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