我已经构建了一个 Java 程序作为服务器上数据库的前端,并且尝试使用 SSL 来加密客户端和服务器之间的流量。这是我发出的用于创建服务器证书的命令:
keytool -genkey -alias localhost -keyalg RSA -keypass kpass123 -storepass kpass123 -keystore keystore.jks
这是相关代码:
System.setProperty("javax.net.ssl.keyStore",
"G:/Data/Android_Project/keystore.jks");
System.setProperty("javax.net.ssl.keyPassword", "kpass123");
SSLServerSocketFactory factory =
(SSLServerSocketFactory)SSLServerSocketFactory.getDefault();
SSLServerSocket accessSocket =
(SSLServerSocket)factory.createServerSocket(DB_ACCESS_PORT);
当我尝试运行这个时,我发现了这个:
java.security.NoSuchAlgorithmException:构造实现时出错(算法:默认,提供者:SunJSSE,类:com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl)
我还发现“KeyPairGenerator”服务具有可用的算法 DIFFIEHELLMAN、DSA、RSA,而“SSLContext”具有算法 SSL、TLS、SSLV3、DEFAULT、TLSV1。
我是否需要找到某种方法将 RSA 安装到 SSLContext 服务中?我是否正在寻找正确的服务?我不应该使用 RSA 吗?
我对整个 SSL - 安全 - 证书这件事很陌生,令我震惊的是,这些不同的服务在应该访问相同的证书时却没有相同的算法。
Try javax.net.ssl.keyStorePassword
代替javax.net.ssl.keyPassword
: 后者没有提到JSSE 参考指南 http://download.oracle.com/javase/6/docs/technotes/guides/security/jsse/JSSERefGuide.html#Customization.
默认情况下,您提到的算法应该使用默认的安全提供程序。NoSuchAlgorithmException
通常是由其他底层异常引起的(未找到文件、密码错误、密钥库类型错误……)。查看完整的堆栈跟踪很有用。
你也可以使用-Djavax.net.debug=ssl
, 或者至少-Djavax.net.debug=ssl,keymanager
,如果堆栈跟踪中的信息不充分,则获取更多调试信息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)