X Tutup
Skip to content

Commit 35c28dd

Browse files
committed
Support certificate chains in cert.pem
Issue 294
1 parent d9dc935 commit 35c28dd

File tree

1 file changed

+23
-11
lines changed

1 file changed

+23
-11
lines changed

src/main/java/com/github/dockerjava/core/CertificateUtils.java

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
package com.github.dockerjava.core;
22

3+
import org.apache.commons.io.IOUtils;
4+
import org.bouncycastle.cert.X509CertificateHolder;
5+
import org.bouncycastle.cert.jcajce.JcaX509CertificateConverter;
6+
import org.bouncycastle.openssl.PEMKeyPair;
7+
import org.bouncycastle.openssl.PEMParser;
8+
39
import java.io.BufferedReader;
410
import java.io.File;
511
import java.io.FileReader;
@@ -16,12 +22,8 @@
1622
import java.security.spec.InvalidKeySpecException;
1723
import java.security.spec.PKCS8EncodedKeySpec;
1824
import java.security.spec.X509EncodedKeySpec;
19-
20-
import org.apache.commons.io.IOUtils;
21-
import org.bouncycastle.cert.X509CertificateHolder;
22-
import org.bouncycastle.cert.jcajce.JcaX509CertificateConverter;
23-
import org.bouncycastle.openssl.PEMKeyPair;
24-
import org.bouncycastle.openssl.PEMParser;
25+
import java.util.ArrayList;
26+
import java.util.List;
2527

2628
public class CertificateUtils {
2729

@@ -41,13 +43,13 @@ public static boolean verifyCertificatesExist(String dockerCertPath) {
4143
public static KeyStore createKeyStore(final String dockerCertPath) throws NoSuchAlgorithmException,
4244
InvalidKeySpecException, IOException, CertificateException, KeyStoreException {
4345
KeyPair keyPair = loadPrivateKey(dockerCertPath);
44-
Certificate privateCertificate = loadCertificate(dockerCertPath);
46+
List<Certificate> privateCertificates = loadCertificates(dockerCertPath);
4547

4648
KeyStore keyStore = KeyStore.getInstance("JKS");
4749
keyStore.load(null);
4850

4951
keyStore.setKeyEntry("docker", keyPair.getPrivate(), "docker".toCharArray(),
50-
new Certificate[] { privateCertificate });
52+
privateCertificates.toArray(new Certificate[privateCertificates.size()]) );
5153
return keyStore;
5254
}
5355

@@ -80,15 +82,25 @@ public static KeyStore createTrustStore(final String dockerCertPath) throws IOEx
8082

8183
}
8284

83-
private static Certificate loadCertificate(final String dockerCertPath) throws IOException, CertificateException {
85+
private static List<Certificate> loadCertificates(final String dockerCertPath) throws IOException, CertificateException {
8486
File certificate = new File(dockerCertPath, "cert.pem");
8587
BufferedReader reader = new BufferedReader(new FileReader(certificate));
8688
PEMParser pemParser = null;
8789

8890
try {
91+
List<Certificate> certificates = new ArrayList<>();
8992
pemParser = new PEMParser(reader);
90-
X509CertificateHolder certificateHolder = (X509CertificateHolder) pemParser.readObject();
91-
return new JcaX509CertificateConverter().setProvider("BC").getCertificate(certificateHolder);
93+
JcaX509CertificateConverter certificateConverter = new JcaX509CertificateConverter().setProvider("BC");
94+
Object certObj = pemParser.readObject();
95+
96+
while (certObj != null) {
97+
X509CertificateHolder certificateHolder = (X509CertificateHolder) certObj;
98+
certificates.add(certificateConverter.getCertificate(certificateHolder));
99+
100+
certObj = pemParser.readObject();
101+
}
102+
103+
return certificates;
92104
} finally {
93105
if (pemParser != null) {
94106
IOUtils.closeQuietly(pemParser);

0 commit comments

Comments
 (0)
X Tutup