2011-11-27 75 views
0

我想在使用SSL的應用程序中確保通信安全。我正在使用org.apache.commons.ssl和OpenSSL。我已創建的密鑰和CRT這樣的(這些是自現在籤):Java中的SSL套接字

openssl req -new -x509 -nodes -out szrr.crt -keyout szrr.key 
openssl rsa -des3 -in szrr.key -out szrr.key.new 
del szrr.key 
move szrr.key.new szrr.key 

所以我現在已經鍵和證書,我用這樣的方式:

KeyMaterial km = new KeyMaterial(certChain, key, password); 
SSLServer sslServer = new SSLServer(); 
sslServer.setKeyMaterial(km); 
sslServer.addTrustMaterial(TrustMaterial.TRUST_ALL); 
sslServerSocket = (SSLServerSocket) sslServer 
        .createServerSocket(serverPort); 

certChain,關鍵是路徑crt和鍵,密碼只是密碼:)

現在還有什麼我必須做類似的方式來創建SSLClient?

回答

0

檢查下面的例子:

SSLClient client = new SSLClient(); 
char[] pwd = "secret".toCharArray(); 

client.addTrustMaterial(TrustMaterial.DEFAULT); 
client.addTrustMaterial(new TrustMaterial("/path/to/self-signed.pem")); 
client.addTrustMaterial(new KeyMaterial("/path/to/keystore.jks", pwd)); 

client.setCheckHostname(true); // default is "true" 
client.setCheckExpiry(true); // default is "true" 
client.setCheckCRL(true);  // default is "true" 

// load a client certificate (max: 1 per SSLClient instance). 
client.setKeyMaterial(new KeyMaterial("/path/to/client.pfx", "secret".toCharArray())); 
SSLSocket s = (SSLSocket) client.createSocket("www.mysite.com", 443); 
+0

說實話,我看到那個例子,但我不知道是怎麼回事,有這些證書。目前我有一個自簽名的crt和key。我知道我可以生成pem,jks和其他任何我想要的但是沒有更簡單的方法嗎? – BartoszCichecki

+0

如果您的服務器沒有對客戶端進行身份驗證,那麼您在客戶端上所需要的只是信任庫。如果確實如此,那麼你的客戶也需要自己的證書。但是,對於單向驗證,您只需要信任存儲庫即可。只有一個client.addTrustMaterial(新的TrustMaterial(「通往truststore的路徑」,pwd)); – Drona