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

时间:2012-03-18 19:36:34

标签: java exception httpclient

背景

我一直在自己的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);

注意:来自Apache的httpClient = DefaultHttpClient

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

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

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

感谢。

3 个答案:

答案 0 :(得分:27)

在做了一些搜索之后,我发现错误可能与其他问题有关,如无效的密钥库,密码等。

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

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

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

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

答案 1 :(得分:8)

我遇到了类似的错误问题。在我的情况下,我输入了密钥库的错误密码。

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

keytool -storepasswd -keystore keystore.jks

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

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

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

答案 2 :(得分:1)

我有类似的问题。问题出在密码中:密钥库和私钥使用了不同的密码。 (使用了KeyStore Explorer)

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