11package 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+
39import java .io .BufferedReader ;
410import java .io .File ;
511import java .io .FileReader ;
1622import java .security .spec .InvalidKeySpecException ;
1723import java .security .spec .PKCS8EncodedKeySpec ;
1824import 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
2628public 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