Android javax net ssl sslhandshakeexception

Как решить javax.сеть.ssl.Ошибка SSLHandshakeException?

я подключился к VPN для настройки API инвентаризации, чтобы получить список продуктов, и он отлично работает. Как только я получаю результат от веб-сервиса, я привязываюсь к UI. А также я интегрировал PayPal с моим приложением для экспресс-проверки, когда я делаю вызов для оплаты, я сталкиваюсь с этой ошибкой. Я использую сервлет для внутреннего процесса. Может кто-нибудь сказать как исправить эту проблему?

6 ответов

сначала нужно получить сертификат от сервера, к которому вы пытаетесь подключиться. Это можно сделать различными способами, например, связаться с администратором сервера и попросить его,использование openssl для его загрузки, или, поскольку это, по-видимому, HTTP-сервер, подключение к нему с любым браузером, просмотр информации о безопасности страницы и сохранение копии сертификата. (Google должен быть в состоянии сказать вам точно, что делать для вашего конкретного браузера.)

теперь чтобы сертификат был сохранен в файле, его необходимо добавить в хранилище доверия JVM. At $JAVA_HOME/jre/lib/security/ для JREs или $JAVA_HOME/lib/security для JDKs есть файл с именем cacerts , который поставляется с Java и содержит публичные сертификаты известных сертификационных органов. Чтобы импортировать новый сертификат, запустите keytool как пользователь, имеющий разрешение на запись в cacerts:

он, скорее всего, попросит у вас пароль. Пароль по умолчанию, поставляемый с java, — changeit . Почти никто. изменить его. После выполнения этих относительно простых шагов вы будете общаться безопасно и с уверенностью, что вы разговариваете с правильным сервером и только с правильным сервером (если они не потеряют свой закрытый ключ).

сейчас я решил эту проблему таким образом,

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

Читайте также:  Редактор сообщений для андроид

всякий раз, когда мы пытаемся подключиться к URL-адресу,

если сервер на другом сайте работает по протоколу https и требует, чтобы мы общались через информацию, предоставленную в сертификате, то у нас есть следующий вариант:

1) попросите сертификат (загрузите сертификат), импортируйте этот сертификат в trustore. Использование Java trustore по умолчанию можно найти в \Java\jdk1.6.0_29\jre\lib\security\cacerts, то при повторной попытке подключения к URL-соединению будет принято.

2) в обычных бизнес-случаях мы можем подключаться к внутренним URL-адресам в организациях, и мы знаем, что они верны. В таких случаях вы уверены, что это правильный URL-адрес, в таких случаях выше может использоваться код, который не будет уполномочен хранить сертификат для подключения к определенному URL-адресу.

для точки № 2 мы должны выполнить следующие шаги:

1) напишите ниже метод, который устанавливает HostnameVerifier для HttpsURLConnection, который возвращает true для всех случаев означает, что мы доверяем trustStore.

2) Напишите ниже метод, который вызывает doTrustToCertificates перед попыткой подключения к URL

этот вызов вернет код ответа = 200 означает, что соединение успешно.

для получения более подробной информации и примера примера вы можете обратиться к URL-адресом.

Я считаю, что вы пытаетесь подключиться к чему-то с помощью SSL, но что-то предоставляет сертификат, который не проверяется корневыми центрами сертификации, такими как verisign.. По сути, по умолчанию безопасные соединения могут быть установлены только в том случае, если лицо, пытающееся подключиться, знает ключи контрагентов или какой-либо другой verndor, такой как verisign, может вмешаться и сказать, что предоставляемый открытый ключ действительно прав..

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

Читайте также:  Ssh to server from android

в любом случае, возвращаясь к делу.. У меня была аналогичная проблема при программировании Java-апплета и java-сервера ( надеюсь, когда-нибудь я напишу полный блог о том, как я получил всю безопасность для работы 🙂 )

по сути, мне нужно было извлечь открытые ключи с сервера и сохранить их в хранилище ключей внутри моего апплета и при подключении к серверу я использовал это хранилище ключей для создания фабрики доверия и эту фабрику доверия для создания ssl-соединения. Существуют процедуры alterante, такие как добавление ключа к доверенному хосту JVM и изменение хранилища доверия по умолчанию при запуске..

Я сделал это около двух месяцев назад и сейчас у меня нет исходного кода.. используйте google, и вы сможете решить эту проблему. Если ты не можешь ответить мне, и я могу предоставить тебе релевантный исходный код проекта .. Не знаю, решает ли это вашу проблему, так как вы не предоставили код, который вызывает эти исключения. Кроме того, я работал с апплетами, думал, что не могу понять, почему он не будет работать на Серверлетах.

P. S Я не могу получить исходный код до выходных, так как внешний SSH отключен в моем офисе : (

Источник

Оцените статью