1 package org.kuali.common.http.model; 2 3 import static com.google.common.io.Files.asByteSource; 4 import static java.util.Arrays.asList; 5 6 import java.io.File; 7 import java.net.URL; 8 import java.security.KeyFactory; 9 import java.security.KeyStore; 10 import java.security.PrivateKey; 11 import java.security.SecureRandom; 12 import java.security.cert.Certificate; 13 import java.security.cert.CertificateFactory; 14 import java.security.spec.KeySpec; 15 import java.security.spec.PKCS8EncodedKeySpec; 16 import java.util.List; 17 18 import javax.net.ssl.HttpsURLConnection; 19 import javax.net.ssl.SSLContext; 20 import javax.net.ssl.SSLSocketFactory; 21 import javax.net.ssl.TrustManagerFactory; 22 23 import org.junit.Test; 24 25 import com.google.common.io.ByteSource; 26 27 public class PKCS8Test { 28 29 private static final Certificate[] EMPTY_CERT_ARRAY = {}; 30 31 @Test 32 public void test() { 33 try { 34 String protocol = "TLS"; 35 String certPath = "/Users/jcaddel/.boot2docker/certs/boot2docker-vm/cert.pem"; 36 String keyPath = "/Users/jcaddel/.boot2docker/certs/boot2docker-vm/key.pkcs8"; 37 URL url = new URL("https://192.168.59.103:2376/version"); 38 ByteSource certSource = asByteSource(new File(certPath)); 39 ByteSource keySource = asByteSource(new File(keyPath)); 40 CertificateFactory cf = CertificateFactory.getInstance("X.509"); 41 Certificate cert = cf.generateCertificate(certSource.openStream()); 42 List<Certificate> chain = asList(cert); 43 byte[] privateKeyBytes = keySource.read(); 44 KeyFactory keyFactory = KeyFactory.getInstance("RSA"); 45 KeySpec ks = new PKCS8EncodedKeySpec(privateKeyBytes); 46 PrivateKey privateKey = keyFactory.generatePrivate(ks); 47 KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType()); 48 keystore.load(null); 49 keystore.setKeyEntry("docker", privateKey, "abc".toCharArray(), chain.toArray(EMPTY_CERT_ARRAY)); 50 TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); 51 tmf.init(keystore); 52 SSLContext ctx = SSLContext.getInstance(protocol); 53 ctx.init(null, tmf.getTrustManagers(), new SecureRandom()); 54 SSLSocketFactory factory = ctx.getSocketFactory(); 55 HttpsURLConnection conn = (HttpsURLConnection) url.openConnection(); 56 conn.setSSLSocketFactory(factory); 57 conn.connect(); 58 } catch (Throwable e) { 59 e.printStackTrace(); 60 } 61 } 62 }