Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Handle multiple PEM CA certs in same file #696

Merged
Merged
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 @@ -64,15 +64,17 @@ public static KeyStore createTrustStore(String caCertData, String caCertFile) th
}

public static KeyStore createTrustStore(InputStream pemInputStream) throws IOException, CertificateException, KeyStoreException, NoSuchAlgorithmException {
KeyStore trustStore = KeyStore.getInstance("JKS");
trustStore.load(null);

while (pemInputStream.available() > 0) {
CertificateFactory certFactory = CertificateFactory.getInstance("X509");
X509Certificate cert = (X509Certificate) certFactory.generateCertificate(pemInputStream);

KeyStore trustStore = KeyStore.getInstance("JKS");
trustStore.load(null);

String alias = cert.getSubjectX500Principal().getName();
trustStore.setCertificateEntry(alias, cert);
return trustStore;
}
return trustStore;
}


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@
import java.security.cert.CertificateException;
import java.security.spec.InvalidKeySpecException;

import static org.junit.Assert.assertEquals;

public class CertUtilsTest {

@Ignore
Expand All @@ -40,4 +42,10 @@ public void testLoadingDodgyKubeConfig() throws CertificateException, NoSuchAlgo
KeyStore ks = CertUtils.createKeyStore(config.getClientCertData(), null, config.getClientKeyData(), null, "RSA", "changeit".toCharArray());
}

@Test
public void testLoadingMultipleCertsFromSameFile() throws CertificateException, NoSuchAlgorithmException, KeyStoreException, IOException {
KeyStore ts = CertUtils.createTrustStore(getClass().getResourceAsStream("/ssl/multiple-certs.pem"));
assertEquals(2, ts.size());
}

}
38 changes: 38 additions & 0 deletions kubernetes-client/src/test/resources/ssl/multiple-certs.pem
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
-----BEGIN CERTIFICATE-----
MIIC6jCCAdKgAwIBAgIBATANBgkqhkiG9w0BAQsFADAmMSQwIgYDVQQDDBtvcGVu
c2hpZnQtc2lnbmVyQDE0ODkwNTI0ODEwHhcNMTcwMzA5MDk0MTIxWhcNMjIwMzA4
MDk0MTIyWjAmMSQwIgYDVQQDDBtvcGVuc2hpZnQtc2lnbmVyQDE0ODkwNTI0ODEw
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDHvEtorBUHnUErPhKKbRrp
Ed/3Kl1UeMMowkHNxq9FMHcm6Mczuu7I0O+qtKbuW7arAZyaoSLO2ezW1lLRuGsu
MSJ7qUqiRus+RUCQWDxLeZhu4OXvcebR3T+drzd35lOwkZBqoNysmT6Uqs7RVZ05
+jKKVJpKDya99Zbr/9zTsYH+gzSAg4LOyMs9fd2tZ75pMHVS0MWMAhXLAPtP/JDM
BXOxiBoFMymsnKeHKThztjoA7dzS1XQTq4cGcCJqyj3wdvey76HBaLzMfu9ZaoA1
0J20eRnk7K4oQEK9jE1rBof4huFa5vvBumSv8Ds/yMzpOA0qOjXPcmJzx0xwQQun
AgMBAAGjIzAhMA4GA1UdDwEB/wQEAwICpDAPBgNVHRMBAf8EBTADAQH/MA0GCSqG
SIb3DQEBCwUAA4IBAQA3hfVp3yf8k0dPr6p/H/xgDKxedWOUTbdfl3v+AWGgSUvD
T30HruYqaC34FXCvoUIia4kxzZlDBDjMg9/9zOOCQdwQimgQM2tOujNUFR3HBEfg
YLxtY106hxzJpLCO+HsYPX9rFOTAsvt2og/jflP10EHAodj40FSymL6HIV671kzb
ykoqfM3Hp+fPfUmvldxZSkzCGJAlDylE8pF4NOMd7B0LKPJuQWM2wgFH1uWQqqq0
gu6oq6GoX+39CSlx5bfydd2D660+Xt0G4k2u6z4SFxqb1hKTpi6cGtB8TERa6sxb
l/KlcfE/R05F+L34hITDjoKYSZUWe5r4weAdMtwp
-----END CERTIFICATE-----

-----BEGIN CERTIFICATE-----
MIIDCjCCAfKgAwIBAgIBATANBgkqhkiG9w0BAQsFADA2MTQwMgYDVQQDDCtvcGVu
c2hpZnQtc2VydmljZS1zZXJ2aW5nLXNpZ25lckAxNDg5MDUyNDgyMB4XDTE3MDMw
OTA5NDEyMVoXDTIyMDMwODA5NDEyMlowNjE0MDIGA1UEAwwrb3BlbnNoaWZ0LXNl
cnZpY2Utc2VydmluZy1zaWduZXJAMTQ4OTA1MjQ4MjCCASIwDQYJKoZIhvcNAQEB
BQADggEPADCCAQoCggEBALKvcK+2kKix24UR5U9en6IJ5yTYBS1ozLCTsKAKWrD4
Ttpec3ON/SycoEfUXY6ao+pN2Q0QbH0/hi1+fFQgdHoQxo1yG4/SAwEu+n4uUse5
ApCtNWLAv8jO+Y1o33CSIIM4Sm3Puw7w/qzHAGmad6Nvg5v+ZOxdGNm7UU399zWz
Y6+igFo/rg8oacZVerchrnLE2cevpjafguqy6kiuKFbfdIcYGfdmmypyC/SbpwgR
ABPWLBqk/AUfkNClKVi91Ysbaj5tlFSXEu2i2z6aAhJCHddjGeq17cQybiYVLhqX
PYXtdXH+khYfXY9cupqVftrXgV6c/xWRzmRxDQyTqdMCAwEAAaMjMCEwDgYDVR0P
AQH/BAQDAgKkMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBADA5
X9iNqR8JmXbHCFMovs5PIOExK6uR1xDBMmD6op0giDXB4ljnIa4R7euo1BCIOjC9
uX6YT0OEXl31IXPAzapZNHzp2sW98pyxDXBd78KD/WEeWfeO4rwL4CMACgqUT9Lw
NCdL01s74NEruNzWIfx74Az1WtlU8YqE7RroCpcBaqZgLJih9jcBdOVuZN5gK/xJ
m2P1QminD5Z+YzU2yeCFOnRzueA9tFveiPVRk454bflfsW8dfixTNeU9MuG3PbtZ
9nqR0hBKWtPst1tJwLTOdNcAijt1T4r6qoZAmGJcEp/EQ5b0beARM1STqNeO3GPO
Og1Ec33+jUHYySkQ3JE=
-----END CERTIFICATE-----