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

2022-09-01 07:29:06

背景

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

问题

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

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

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 from Apache

我现在完全被难住了。不要说明导致此错误的原因。在Eclipse中,这两款产品似乎都针对相同的JRE。它们还具有httpclient-4.0.1.jar。请注意,有问题的项目还有一些其他依赖项,工作项目没有{ boneCP,番石榴,mysql_connector_java,protobuf }

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

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

谢谢。


答案 1

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

然后我想起,当我为网络连接测试 SSL 时,我已经设置了两个 VM 参数。

我删除了以下 VM 参数来修复此问题:

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

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


答案 2

我遇到过与此错误类似的问题。在我的情况下,我为密钥库输入了不正确的密码。

我更改了密钥库的密码以匹配我输入的密码(我不想更改我正在输入的密码),但它仍然给出了相同的错误。

keytool -storepasswd -keystore keystore.jks

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

当我最初创建密钥库时,密钥是使用与密钥库相同的密码创建的(我接受了此缺省选项)。因此,我还必须更改密钥的密码,如下所示:

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