Skip to content

Commit 727c251

Browse files
committed
Replace static certificates with dynamically-generated certificates
1 parent d71ad85 commit 727c251

28 files changed

Lines changed: 321 additions & 675 deletions

benchmark/script/generate-certs.sh

Lines changed: 0 additions & 11 deletions
This file was deleted.

benchmark/src/main/java/com/eatthepath/pushy/apns/ApnsClientBenchmark.java

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,17 @@
2828
import com.eatthepath.pushy.apns.util.ApnsPayloadBuilder;
2929
import com.eatthepath.pushy.apns.util.SimpleApnsPushNotification;
3030
import io.netty.channel.nio.NioEventLoopGroup;
31+
import io.netty.pkitesting.CertificateBuilder;
32+
import io.netty.pkitesting.X509Bundle;
3133
import io.netty.util.concurrent.Future;
3234
import org.apache.commons.lang3.RandomStringUtils;
3335
import org.openjdk.jmh.annotations.*;
3436

3537
import java.security.KeyPairGenerator;
3638
import java.security.SecureRandom;
3739
import java.security.interfaces.ECPrivateKey;
40+
import java.time.Duration;
41+
import java.time.Instant;
3842
import java.util.ArrayList;
3943
import java.util.List;
4044
import java.util.Random;
@@ -57,9 +61,8 @@ public class ApnsClientBenchmark {
5761
@Param({"1", "4", "8"})
5862
public int concurrentConnections;
5963

60-
private static final String CA_CERTIFICATE_FILENAME = "/ca.pem";
61-
private static final String SERVER_CERTIFICATES_FILENAME = "/server_certs.pem";
62-
private static final String SERVER_KEY_FILENAME = "/server_key.pem";
64+
protected static X509Bundle CA_BUNDLE;
65+
protected static X509Bundle SERVER_CERTIFICATE_BUNDLE;
6366

6467
private static final String TOPIC = "com.eatthepath.pushy";
6568
private static final String TEAM_ID = "benchmark.team";
@@ -77,6 +80,27 @@ public void setUp() throws Exception {
7780
this.clientResources = new ApnsClientResources(new NioEventLoopGroup(this.concurrentConnections));
7881
this.serverEventLoopGroup = new NioEventLoopGroup(this.concurrentConnections);
7982

83+
final Instant now = Instant.now();
84+
85+
final CertificateBuilder rootCertificateBuilderTemplate = new CertificateBuilder()
86+
.notBefore(now)
87+
.notAfter(now.plus(Duration.ofHours(8)));
88+
89+
CA_BUNDLE = rootCertificateBuilderTemplate.copy()
90+
.subject("CN=PushyTestRoot")
91+
.setKeyUsage(true, CertificateBuilder.KeyUsage.digitalSignature, CertificateBuilder.KeyUsage.keyCertSign)
92+
.setIsCertificateAuthority(true)
93+
.buildSelfSigned();
94+
95+
SERVER_CERTIFICATE_BUNDLE = rootCertificateBuilderTemplate.copy()
96+
.subject("CN=com.eatthepath.pushy")
97+
.setKeyUsage(true, CertificateBuilder.KeyUsage.digitalSignature, CertificateBuilder.KeyUsage.keyEncipherment)
98+
.addExtendedKeyUsage(CertificateBuilder.ExtendedKeyUsage.PKIX_KP_CLIENT_AUTH)
99+
.addExtendedKeyUsage(CertificateBuilder.ExtendedKeyUsage.PKIX_KP_SERVER_AUTH)
100+
.setIsCertificateAuthority(false)
101+
.addSanDnsName("localhost")
102+
.buildIssuedBy(CA_BUNDLE);
103+
80104
final ApnsSigningKey signingKey;
81105
{
82106
final KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("EC");
@@ -89,13 +113,13 @@ public void setUp() throws Exception {
89113
.setApnsServer(HOST, PORT)
90114
.setConcurrentConnections(this.concurrentConnections)
91115
.setSigningKey(signingKey)
92-
.setTrustedServerCertificateChain(ApnsClientBenchmark.class.getResourceAsStream(CA_CERTIFICATE_FILENAME))
116+
.setTrustedServerCertificateChain(CA_BUNDLE.getCertificate())
93117
.setApnsClientResources(this.clientResources)
94118
.build();
95119

96120
this.server = new BenchmarkApnsServerBuilder()
97-
.setServerCredentials(getClass().getResourceAsStream(SERVER_CERTIFICATES_FILENAME), this.getClass().getResourceAsStream(SERVER_KEY_FILENAME), null)
98-
.setTrustedClientCertificateChain(getClass().getResourceAsStream(CA_CERTIFICATE_FILENAME))
121+
.setServerCredentials(SERVER_CERTIFICATE_BUNDLE.getCertificatePathWithRoot(), SERVER_CERTIFICATE_BUNDLE.getKeyPair().getPrivate())
122+
.setTrustedClientCertificateChain(CA_BUNDLE.getCertificate())
99123
.setEventLoopGroup(this.serverEventLoopGroup)
100124
.build();
101125

benchmark/src/main/resources/ca.pem

Lines changed: 0 additions & 19 deletions
This file was deleted.

benchmark/src/main/resources/server_certs.pem

Lines changed: 0 additions & 17 deletions
This file was deleted.

benchmark/src/main/resources/server_key.pem

Lines changed: 0 additions & 28 deletions
This file was deleted.

pushy/pom.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,10 @@
6666
<artifactId>slf4j-simple</artifactId>
6767
<scope>test</scope>
6868
</dependency>
69+
<dependency>
70+
<groupId>io.netty</groupId>
71+
<artifactId>netty-pkitesting</artifactId>
72+
</dependency>
6973
<dependency>
7074
<groupId>io.netty</groupId>
7175
<artifactId>netty-transport-native-epoll</artifactId>

pushy/script/apns-extensions.cnf

Lines changed: 0 additions & 32 deletions
This file was deleted.

pushy/script/generate-certs.sh

Lines changed: 0 additions & 51 deletions
This file was deleted.

0 commit comments

Comments
 (0)