Java 和 SSL - java.security.NoSuchAlgorithmException

标签 java security ssl

我已经构建了一个 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 - 安全 - 证书这件事都不熟悉,这让我大吃一惊,当这些不同的服务应该访问相同的证书时,它们中的每一个都没有相同的算法。

最佳答案

尝试用 javax.net.ssl.keyStorePassword 代替 javax.net.ssl.keyPassword:JSSE ref guide 中没有提到后者.

您提到的算法应该默认使用默认安全提供程序。 NoSuchAlgorithmException 通常是由其他底层异常(找不到文件、密码错误、 keystore 类型错误……)引起的。查看完整的堆栈跟踪很有用。

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

关于Java 和 SSL - java.security.NoSuchAlgorithmException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6365209/

相关文章:

database - 带有数据库 : java. lang.ClassNotFoundException : org. springframework.security.core.userdetails.jdbc.JdbcDaoImpl 的 Spring Security 应用程序

android - 使用 Volley 在 Android 中从 http 迁移到 https

javascript - Node.JS 错误 - process.env.NODE_TLS_REJECT_UNAUTHORIZED。这是什么意思?

java - JTextArea 转移焦点

security - 如何让客户端先进行身份验证?

java - 在 Java 中使用 == 比较 float 有什么问题?

security - 黑客攻击和利用 - 您如何处理发现的安全漏洞?

ssl - 无法连接到 SSL LDAP 服务器

Java 理解 Math.getExponent(Double)

java - 为什么这是非法的表达开始?