1
我收到一份自簽名客戶端證書工具包,用於通過HTTPS訪問服務器。該套件包括以下PEM文件:如何從PEM證書和密鑰構建SSLSocketFactory而不轉換爲密鑰庫?
- client.crt(客戶端證書)
- client.key(客戶端私鑰)
- ca.crt(CA證書)
一的方式來解決的任務是生成Java密鑰:
- 使用OpenSSL客戶端證書和密鑰轉換爲PKCS12密鑰庫
- 使用密鑰工具導入CA證書到店
...然後使用如下代碼來構建SSLSocketFactory的例如:
InputStream stream = new ByteArrayInputStream(pksData);
KeyStore keyStore = KeyStore.getInstance("PKCS12");
keyStore.load(stream, password);
KeyManagerFactory kmf = KeyManagerFactory.getInstance(
KeyManagerFactory.getDefaultAlgorithm());
kmf.init(keyStore, password.toCharArray());
KeyManager[] keyManagers = kmf.getKeyManagers();
TrustManagerFactory tmfactory = TrustManagerFactory.getInstance(
TrustManagerFactory.getDefaultAlgorithm());
tmfactory.init(keyStore);
TrustManager[] trustManagers = tmfactory.getTrustManagers();
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(keyManagers, trustManagers, null);
sslSocketFactory = sslContext.getSocketFactory();
...這是後來用於初始化http庫。
所以我們獲得一個KeyStore,然後在它的幫助下初始化KeyManagers和TrustManagers,最後我們用它們構建SSLSocketFactory實例。
的問題是:有沒有辦法避免的密鑰存儲文件創建並以某種方式建立的SSLSocketFactory開始以公鑰證書和實例(其中,例如,可以從PEM文件使用BouncyCastle的的PemReader獲得)?
號採取你必須建立一個PKCS#12或JKS密鑰庫。但你應該給予一個私鑰。你應該自己生成它。這裏存在嚴重的安全問題。你的私鑰不是私人的,所以無論誰給你的私鑰都可以在法律意義上冒充你。不要這樣做。 – EJP
是的,謝謝,我們知道我們應該自己生成私鑰。但我們在這裏工作的機構規定其規則,不聽任何人:他們只是自己生成所有密鑰。不過這不是技術問題。 –