Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -92,9 +92,10 @@ public static KeyStore loadTrustStore(File certificateChainFile) throws IOExcept
keyStore.load(null, null);

List<X509Certificate> certificateChain = readCertificateChain(certificateChainFile);
int i = 1;
for (X509Certificate certificate : certificateChain) {
X500Principal principal = certificate.getSubjectX500Principal();
keyStore.setCertificateEntry(principal.getName("RFC2253"), certificate);
keyStore.setCertificateEntry(principal.getName("RFC2253") + "-" + i++, certificate);
}
return keyStore;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ public void testLoadKeyStoreWithWrongFileType(

@ParameterizedTest
@MethodSource("data")
public void testLoadTrustStore(
public void testLoadTrustStoreFromPemBundle(
X509KeyType caKeyType, X509KeyType certKeyType, String keyPassword, Integer paramIndex)
throws Exception {
init(caKeyType, certKeyType, keyPassword, paramIndex);
Expand All @@ -118,7 +118,7 @@ public void testLoadTrustStore(
.setTrustStorePassword(x509TestContext.getTrustStorePassword())
.build()
.loadTrustStore();
assertEquals(1, ts.size());
assertEquals(2, ts.size());
}

@ParameterizedTest
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
import java.security.Security;
import java.security.cert.X509Certificate;
import java.util.Arrays;
import java.util.List;
import org.apache.commons.io.FileUtils;
import org.bouncycastle.asn1.x500.X500NameBuilder;
import org.bouncycastle.asn1.x500.style.BCStyle;
Expand All @@ -48,7 +49,7 @@ public class X509TestContext {
private final X509KeyType trustStoreKeyType;
private final KeyPair trustStoreKeyPair;
private final long trustStoreCertExpirationMillis;
private final X509Certificate trustStoreCertificate;
private final List<X509Certificate> trustStoreCertificates;
private final String trustStorePassword;
private File trustStoreJksFile;
private File trustStorePemFile;
Expand Down Expand Up @@ -99,11 +100,18 @@ private X509TestContext(File tempDir, KeyPair trustStoreKeyPair, long trustStore

X500NameBuilder caNameBuilder = new X500NameBuilder(BCStyle.INSTANCE);
caNameBuilder.addRDN(BCStyle.CN, MethodHandles.lookup().lookupClass().getCanonicalName() + " Root CA");
trustStoreCertificate = X509TestHelpers.newSelfSignedCACert(caNameBuilder.build(), trustStoreKeyPair, trustStoreCertExpirationMillis);
// Create two CA certs to test multiple certs in PEM bundles.
// Use same subject name to simulate multiple CA certs from the same CA and to test reg
trustStoreCertificates = Arrays.asList(
X509TestHelpers.newSelfSignedCACert(caNameBuilder.build(), trustStoreKeyPair,
trustStoreCertExpirationMillis),
X509TestHelpers.newSelfSignedCACert(caNameBuilder.build(), trustStoreKeyPair,
trustStoreCertExpirationMillis)
);

X500NameBuilder nameBuilder = new X500NameBuilder(BCStyle.INSTANCE);
nameBuilder.addRDN(BCStyle.CN, MethodHandles.lookup().lookupClass().getCanonicalName() + " Zookeeper Test");
keyStoreCertificate = X509TestHelpers.newCert(trustStoreCertificate, trustStoreKeyPair, nameBuilder.build(), keyStoreKeyPair.getPublic(), keyStoreCertExpirationMillis);
keyStoreCertificate = X509TestHelpers.newCert(trustStoreCertificates.get(0), trustStoreKeyPair, nameBuilder.build(), keyStoreKeyPair.getPublic(), keyStoreCertExpirationMillis);
trustStorePkcs12File = trustStorePemFile = trustStoreJksFile = null;
keyStorePkcs12File = keyStorePemFile = keyStoreJksFile = null;

Expand Down Expand Up @@ -139,8 +147,8 @@ public long getTrustStoreCertExpirationMillis() {
return trustStoreCertExpirationMillis;
}

public X509Certificate getTrustStoreCertificate() {
return trustStoreCertificate;
public X509Certificate getTrustStoreCertificates() {
return trustStoreCertificates.get(0);
}

public String getTrustStorePassword() {
Expand All @@ -159,7 +167,7 @@ public File getTrustStoreFile(KeyStoreFileType storeFileType) throws IOException
case JKS:
return getTrustStoreJksFile();
case PEM:
return getTrustStorePemFile();
return getTrustStorePemBundleFile();
case PKCS12:
return getTrustStorePkcs12File();
case BCFKS:
Expand All @@ -177,7 +185,7 @@ private File getTrustStoreJksFile() throws IOException {
File trustStoreJksFile = File.createTempFile(TRUST_STORE_PREFIX, KeyStoreFileType.JKS.getDefaultFileExtension(), tempDir);
trustStoreJksFile.deleteOnExit();
try (final FileOutputStream trustStoreOutputStream = new FileOutputStream(trustStoreJksFile)) {
byte[] bytes = X509TestHelpers.certToJavaTrustStoreBytes(trustStoreCertificate, trustStorePassword);
byte[] bytes = X509TestHelpers.certToJavaTrustStoreBytes(trustStoreCertificates.get(0), trustStorePassword);
trustStoreOutputStream.write(bytes);
trustStoreOutputStream.flush();
} catch (GeneralSecurityException e) {
Expand All @@ -188,11 +196,13 @@ private File getTrustStoreJksFile() throws IOException {
return trustStoreJksFile;
}

private File getTrustStorePemFile() throws IOException {
private File getTrustStorePemBundleFile() throws IOException {
if (trustStorePemFile == null) {
File trustStorePemFile = File.createTempFile(TRUST_STORE_PREFIX, KeyStoreFileType.PEM.getDefaultFileExtension(), tempDir);
trustStorePemFile.deleteOnExit();
FileUtils.writeStringToFile(trustStorePemFile, X509TestHelpers.pemEncodeX509Certificate(trustStoreCertificate), StandardCharsets.US_ASCII, false);
for (X509Certificate cert : trustStoreCertificates) {
FileUtils.writeStringToFile(trustStorePemFile, X509TestHelpers.pemEncodeX509Certificate(cert), StandardCharsets.US_ASCII, true);
}
this.trustStorePemFile = trustStorePemFile;
}
return trustStorePemFile;
Expand All @@ -203,7 +213,7 @@ private File getTrustStorePkcs12File() throws IOException {
File trustStorePkcs12File = File.createTempFile(TRUST_STORE_PREFIX, KeyStoreFileType.PKCS12.getDefaultFileExtension(), tempDir);
trustStorePkcs12File.deleteOnExit();
try (final FileOutputStream trustStoreOutputStream = new FileOutputStream(trustStorePkcs12File)) {
byte[] bytes = X509TestHelpers.certToPKCS12TrustStoreBytes(trustStoreCertificate, trustStorePassword);
byte[] bytes = X509TestHelpers.certToPKCS12TrustStoreBytes(trustStoreCertificates.get(0), trustStorePassword);
trustStoreOutputStream.write(bytes);
trustStoreOutputStream.flush();
} catch (GeneralSecurityException e) {
Expand All @@ -220,7 +230,7 @@ private File getTrustStoreBcfksFile() throws IOException {
TRUST_STORE_PREFIX, KeyStoreFileType.BCFKS.getDefaultFileExtension(), tempDir);
trustStoreBcfksFile.deleteOnExit();
try (final FileOutputStream trustStoreOutputStream = new FileOutputStream(trustStoreBcfksFile)) {
byte[] bytes = X509TestHelpers.certToBCFKSTrustStoreBytes(trustStoreCertificate, trustStorePassword);
byte[] bytes = X509TestHelpers.certToBCFKSTrustStoreBytes(trustStoreCertificates.get(0), trustStorePassword);
trustStoreOutputStream.write(bytes);
trustStoreOutputStream.flush();
} catch (GeneralSecurityException e) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -135,8 +135,8 @@ public void testLoadCertificateFromTrustStore(
throws Exception {
init(caKeyType, certKeyType, keyPassword, paramIndex);
List<X509Certificate> certs = PemReader.readCertificateChain(x509TestContext.getTrustStoreFile(KeyStoreFileType.PEM));
assertEquals(1, certs.size());
assertEquals(x509TestContext.getTrustStoreCertificate(), certs.get(0));
assertEquals(2, certs.size());
assertEquals(x509TestContext.getTrustStoreCertificates(), certs.get(0));
}

}