Java and SSL - java.security.NoSuchAlgorithmException

2022-09-01 03:41:15

我已经构建了一个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: error constructing implementation (algorithm: Default, provider: SunJSSE, class: com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl)

我还发现“KeyPairGenerator”服务具有DIFFIEHELLMAN,DSA,RSA可用的算法,而“SSLContext”具有SSL,TLS,SSLV3,DEFAULT,TLSV1算法。

我是否需要找到某种方法将 RSA 安装到 SSLContext 服务中?我是否在查看正确的服务?我不应该使用 RSA 吗?

我是整个SSL - 安全性 - 证书的新手,这让我感到震惊的是,当这些不同的服务应该访问相同的证书时,它们都没有相同的算法。


答案 1

尝试代替:后者在JSSE参考指南中没有提到。javax.net.ssl.keyStorePasswordjavax.net.ssl.keyPassword

默认情况下,您提到的算法应使用默认安全提供程序。s 通常是由其他底层异常(找不到文件、密码错误、密钥库类型错误等)引起的。查看完整的堆栈跟踪非常有用。NoSuchAlgorithmException

如果堆栈跟踪中的信息不够,您还可以使用 或至少 使用 来获取更多调试信息。-Djavax.net.debug=ssl-Djavax.net.debug=ssl,keymanager


答案 2