2016-11-29 29 views
1

从本地存储获取SSL证书,我需要通过安装本地SSL证书来执行REST调用。用java为SSLContext对象

我没有关于密钥库的任何信息。我只知道有安装在我的PC证书,我必须使用基于像“序列号”,“发行人”等等,我可以在个人证书存储证书的详细信息见证书的详细信息证书。

我需要建立一个可以连接到REST调用SSLConnectionSocketFactory对象。

我的问题是如何创建SSLContext对象?

SSLContext sslContext;// How to create this object and pass it to sslSocketFactory. 

    HostnameVerifier hostnameVerifier = NoopHostnameVerifier.INSTANCE; 
    SSLConnectionSocketFactory sslSocketFactory = new SSLConnectionSocketFactory(sslContext, hostnameVerifier); 

回答

1

您可以使用此代码段的SSLContext实例。

// Load Certificate 
CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509"); 
Certificate certificate = certificateFactory.generateCertificate(new FileInputStream(new File("CERTIFICATE_LOCATION"))); 

// Create TrustStore 
KeyStore trustStoreContainingTheCertificate = KeyStore.getInstance("JKS"); 
trustStoreContainingTheCertificate.load(null, null); 

trustStoreContainingTheCertificate.setCertificateEntry("ANY_CERTIFICATE_ALIAS", certificate); 

// Create SSLContext 
TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); 
trustManagerFactory.init(trustStoreContainingTheCertificate); 

SSLContext sslContext = SSLContext.getInstance("TLS"); 
sslContext.init(null, trustManagerFactory.getTrustManagers(), null); 

SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory(); 
System.out.println(sslSocketFactory); 
+0

如何创建“trustStoreContainingTheCertificate”? – Jeev

+0

@Jeev请参阅最新的答案。 –

+0

我能得到org.apache.http.conn.socket.LayeredConnectionSocketFactory代替的SSLSocketFactory的LayeredConnectionSocketFactory()在结束了吗? – Jeev