Java NoSuchAlgorithmException - SunJSSE、sun.security.ssl.SSLContextImpl$DefaultSSLContext

Posted

技术标签:

【中文标题】Java NoSuchAlgorithmException - SunJSSE、sun.security.ssl.SSLContextImpl$DefaultSSLContext【英文标题】:Java NoSuchAlgorithmException - SunJSSE, sun.security.ssl.SSLContextImpl$DefaultSSLContext 【发布时间】:2012-03-18 19:36:33 【问题描述】:

背景

我一直在它自己的 Eclipse 项目中使用 Authorize.net SDK。一切都很好。然后我需要将它添加到我的主项目中。我将依赖项添加到类路径中,并复制到我需要的代码块中。应该可以的。

问题

长话短说,代码在我放置的地方不起作用。但是,当我将它直接带到项目中的 main 方法时,它会起作用。

在它不起作用的地方,我用调试器单步执行了代码,发现了以下异常:

java.net.SocketException: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: sun.security.ssl.SSLContextImpl$DefaultSSLContext)

投掷于:

HttpResponse httpResponse = httpClient.execute(httpPost);

注意:httpClient = DefaultHttpClient 来自 Apache

我现在完全被难住了。不要是什么导致了这个错误。在 Eclipse 中,这两个产品似乎都针对同一个 JRE。他们也都有 httpclient-4.0.1.jar。请注意,有问题的项目还具有工作项目没有的其他一些依赖项 boneCP, guava, mysql_connector_java, protobuf

我认为额外的 jar 不是原因,因为问题代码在项目中的不同位置运行。

非常感谢任何关于错误的想法,我已经花了一天的时间调试这个,不知道下一步该去哪里。

谢谢。

【问题讨论】:

【参考方案1】:

在进行更多搜索后,我发现该错误可能与其他问题有关,例如无效的密钥库、密码等。

然后我记起我在测试 SSL 的网络连接时设置了两个 VM 参数。

我删除了以下 VM 参数来解决问题:

-Djavax.net.ssl.keyStore=mySrvKeystore -Djavax.net.ssl.keyStorePassword=123456

注意:此密钥库不再存在,因此这可能是异常的原因。

【讨论】:

同样的问题但我的是一个独立的应用程序。如何解决? 当我的信任库是 JCEKS 类型时,我遇到了同样的错误。使用 JKS 就可以了。【参考方案2】:

这个错误我也遇到过类似的问题。就我而言,我输入的密钥库密码不正确。

我更改了 Keystore 的密码以匹配我输入的内容(我不想更改我输入的密码),但它仍然给出了同样的错误。

keytool -storepasswd -keystore keystore.jks

问题是我还需要在密钥库中更改密钥的密码。

当我最初创建密钥库时,密钥是使用与密钥库相同的密码创建的(我接受了这个默认选项)。所以我还必须按如下方式更改密钥的密码:

keytool -keypasswd  -alias my.alias -keystore keystore.jks

【讨论】:

【参考方案3】:

我有类似的问题。问题出在密码上:Keystore 和私钥使用了不同的密码。 (使用了 KeyStore 资源管理器)

使用与私钥相同的密码创建密钥库后,问题已解决。

【讨论】:

【参考方案4】:

类似问题 - 从 intellij 中运行时出现此错误,从 maven 中运行时没有。

原来 IntelliJ 在内部使用了错误的 java:

/usr/lib/jvm/java-1.11.0-openjdk-amd64/bin/java --version
openjdk 11.0.12 2021-07-20

当 maven 使用好的 java:

/usr/local/buildtools/java/jdk11/bin/java --version
openjdk 11.0.11 2021-08-03

其中一个可能存在上述一些密钥库问题。

【讨论】:

我在使用不同的 Java 版本时也遇到了类似的问题。使用 Java 17 创建的密钥库与 Maven 和 Java 1.8 时发生相同的异常

以上是关于Java NoSuchAlgorithmException - SunJSSE、sun.security.ssl.SSLContextImpl$DefaultSSLContext的主要内容,如果未能解决你的问题,请参考以下文章

Java Switch

Java Math

Java 布尔运算

java [Java] Java常用代码#java

Java - 35 Java 实例

Java While 循环