2016-11-29 32 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