2010-07-08 49 views
0

我正在尝试构建一个使用SSLSocket交换数据的简单客户机/服务器系统。 (JavaSE 6) 服务器必须拥有自己的证书,客户端不需要证书。与JSSE(Javase6)和自签名证书建立SSL连接

我以此开始 http://java.sun.com/javase/6/docs/technotes/guides/security/jsse/JSSERefGuide.html#CreateKeystore 为服务器和自签名证书生成密钥。 概括起来:

Create a new keystore and self-signed certificate with corresponding public/private keys. 
keytool -genkeypair -alias mytest -keyalg RSA -validity 7 -keystore /scratch/stores/server.jks 

    Export and examine the self-signed certificate. 
keytool -export -alias mytest -keystore /scratch/stores/server.jks -rfc -file server.cer 

    Import the certificate into a new truststore. 
keytool -import -alias mytest -file server.cer -keystore /scratch/stores/client.jks 

然后在我的服务器代码我

System.setProperty("javax.net.ssl.keyStore", "/scratch/stores/server.jks"); 
System.setProperty("javax.net.ssl.keyStorePassword", "123456"); 

SSLServerSocketFactory sf = sslContext.getServerSocketFactory(); 
SSLServerSocket sslServerSocket = (SSLServerSocket)sf.createServerSocket(port); 

Socket s = sslServerSocket.accept(); 

我基本上错过了一些点,因为我得到一个“javax.net.ssl.SSLException:没有证书或密钥对应于启用的SSL密码套件。“当我尝试运行服务器时。

它可能是证书的问题吗?在keytool中使用-validity时,证书会自签名,所以如果我没有错,它应该可以工作。

阅读文档似乎设置属性“javax.net.ssl.keyStore”足以让SSLContext正确设置。任何建议?

回答