2011-11-27 55 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