【发布时间】:2011-09-15 22:49:34
【问题描述】:
我已经构建了一个 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 - 安全 - 证书这件事都是新手,这让我大吃一惊,当这些不同的服务应该访问相同的证书时,它们中的每一个都没有相同的算法。
【问题讨论】:
-
看起来与this problem 非常相似。我首先怀疑有限的加密支持,但 1024 位强密钥对应该可以正常工作。 RSA 应该在不添加任何单独的提供程序的情况下可用。
-
感谢您的链接!我看了那个问题,看来我做的一切都是正确的,但仍然出现异常。
-
在
NoSuchAlgorithmException之前看到各种“由”异常也会很有趣:这通常是真正的原因所在。