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

Фон

Я использую Authorize.net SDK в собственном проекте Eclipse. Все отлично работает. Затем мне нужно было добавить его в мой основной проект. Я добавил зависимости к пути класса и скопировал в блок кода, который мне нужен. Он должен был работать.

Проблема

Короче говоря, код не будет работать там, где я его разместил. Однако он будет работать, когда я привожу его к основному методу в проекте.

В том месте, где это не сработает, я прошел через код с отладчиком и нашел следующее исключение:

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}

Я не думаю, что дополнительные банки являются причиной того, что код проблемы работает в другом месте проекта.

Любые идеи о том, что не так, очень ценятся, я потратил этот день на отладку и не знаю, куда идти дальше.

Спасибо.

Ответы

Ответ 1

Хорошо после выполнения еще нескольких поисков я обнаружил, что ошибка может быть связана с другими проблемами как с недопустимыми хранилищами ключей, паролями и т.д.

Затем я вспомнил, что я установил два аргумента VM, когда тестировал SSL для подключения к сети.

Я удалил следующие аргументы VM, чтобы устранить проблему:

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

Примечание: это хранилище ключей больше не существует, поэтому, вероятно, почему исключение.

Ответ 2

У меня была аналогичная проблема с этой ошибкой. В моем случае я вводил неверный пароль для Keystore.

Я изменил пароль для Keystore в соответствии с тем, что я вводил (я не хотел менять пароль, который я вводил), но он по-прежнему выдавал ту же ошибку.

keytool -storepasswd -keystore keystore.jks

Проблема заключалась в том, что мне также необходимо было изменить пароль Key в Keystore.

Когда я изначально создал Keystore, ключ был создан с тем же паролем, что и Keystore (я принял этот вариант по умолчанию). Поэтому мне пришлось также изменить пароль ключа следующим образом:

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