Elettracompany.com

Компьютерный справочник
1 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

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 по умолчанию можно найти в Javajdk1.6.0_29jrelibsecuritycacerts, то при повторной попытке подключения к URL-соединению будет принято.

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

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

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

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

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

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

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

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

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

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

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

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

Как решить ошибку javax.net.ssl.SSLHandshakeException?

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

6 Ответов

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

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

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

Теперь я решил этот вопрос таким образом,

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

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

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

1) запросите сертификат(загрузите сертификат), импортируйте этот сертификат в trustore. По умолчанию trustore java uses можно найти в Javajdk1.6.0_29jrelibsecuritycacerts, тогда, если мы повторим попытку подключиться к URL-му соединению, оно будет принято.

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

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

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

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

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

Читать еще:  Как восстановить удаленные сообщения whatsapp на iphone

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

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

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

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

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

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

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

SSLHandshakeException можно решить 2 способами.

Получить SSL (спросив системного администратора исходного кода, можно также быть загружены командой openssl, или любые браузеры загружают сертификаты)

Добавить сертификат в хранилище доверенных сертификатов (cacerts в), расположенные по JRE/lib/security

указать расположение базы доверенных сертификатов в параметрах виртуальной машины, как «-Djavax.net.ssl.trustStore=»

Теперь я решил этот вопрос таким образом,

Похожие вопросы:

я создал одно веб-приложение для доступа к google bigtable. но я показываю следующую ошибку, как решить эту проблему Описание Ресурс Путь Расположение Тип Проект веб-приложения должен быть настроен.

Я скачал StanfordOpenNLP и пытаюсь использовать его лемматизер. Но это дает мне ошибку, как показано ниже, Неподдерживаемая версия major.minor 52.0 Может ли кто-нибудь, пожалуйста, сказать мне, как.

Я пытаюсь подключиться к одному из моих серверов через ssl, с Java. Я перепробовал много вариантов String jwtUrl = https://ABC.XYZ.COM:3333/api/auth; String username = ABC; String password = ABC;.

Когда я пытаюсь получить доступ к веб-службе ‘https’ из моего приложения, он выдает ошибку javax.net.ssl.SSLHandshakeException: соединение закрыто узлом . Тот же веб-сервис отлично работает в.

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

У меня есть проект android, который я пытаюсь протестировать на Travis CI, однако при запуске тестов Robolectric ( v3.2.2 ) я получаю: com.android.volley.NoConnectionError.

Недавно у нас возникла проблема с одним из наших приложений java,которое пыталось запустить защищенный веб-сервис SSL балансировщика нагрузки amazone, у которого был сертификат, подписанный GoDaddy.

Как решить следующую ошибку? Cs0234: имя типа или пространства имен ‘Helpers’ не существует в системе пространство имен ‘NerdDinner’ (вы отсутствует ссылка assembly?)

Отсутствие взаимного авторизации на Android w / javax.net.ssl.SSLHandshakeException: сообщение об ошибке не выполнено

Я пытаюсь получить взаимный запрос на аутентификацию для работы в android. Я тестирую свой сервер, поэтому у меня есть собственный сертификат CA и клиента.

Поэтому мне придется разрешить недоверенный серверный сертификат.

Вот что я делаю:

Затем AsyncTask выполняет запрос:

Я протестировал этот запрос в браузере и в iOS-клиенте, но я не могу заставить его работать в Android.

Я думаю, что это правильный способ разрешить ненадежные сертификаты сервера:

Не знаю, почему я получаю:

Я должен был добавить свой собственный SSLSocketFactory, чтобы доверять самоподписанному серверному сертификату:

Как только я использую это, я получаю следующее:

Javax.net.ssl.SSLHandshakeException: сообщение подтверждения не выполнено

Я нахожусь на Lollipop и использую apache как мой веб-сервер. Моя конфигурация веб-сервера Apache имеет:

Может ли это быть моей проблемой: HttpClient не работает с Handshake Failed в Android 5.0 Lollipop

Не совсем уверен, что мне нужно изменить. Я посмотрел на все, и это, кажется, рекомендуют config (на данный момент).

Вот полная трассировка стека:

Я никогда не ставил сертификат клиента в KeyManager:

Я пытаюсь получить взаимный запрос на аутентификацию для работы в android …

(Комментарий) Сервер CA не установлен на устройстве. Это не обязательно. Для завершения рукопожатия должен быть только сертификат клиента. Вот почему я загружаю нулевую доверенность, чтобы разрешить несертифицированный серверный сертификат.

Хорошо, поэтому самым простым решением является установка CA на устройстве. Я понимаю, что вы не хотите этого делать, и я действительно не виню вас. Это не лучшее решение, потому что оно бросает ваш CA в смесь с другими в CA Zoo.

Поскольку вы все это делаете программно, я считаю, что это ваше решение: используйте PEM Encoded CA Cert для файловой системы напрямую для запроса HTTPS? , Клиент будет проверять сертификат сервера с помощью вашего центра сертификации, а затем продолжить работу с сертификатом клиента. CA не нужно устанавливать на устройство.

Другой альтернативой является пользовательский TrustManager . Но я предпочитаю, чтобы система выполняла проверки, а не переопределяла поведение и проверки. Есть много проверок, которые вы должны выполнить, и они подвержены ошибкам. Во-первых, вы должны знать, какие RFCs пойдут, чтобы выяснить, что такое проверки.

Я буду использовать настраиваемый TrustManager для TrustManager ключа. Есть много примеров этого; См., Например, Сертификат и открытый ключ на сайте OWASP. Вы можете использовать пиннинг и отказаться от проверок, потому что вам не нужно доверять доверие. Вы либо разговариваете с ожидаемым сервером – с открытым ключом X; Или нет – и не имеет значения, что говорит третья сторона (например, CA).

Также имейте в SSLFactory что у SSLFactory Java и Android есть некоторые проблемы, например getInstance(«TLS») также вернет SSLv3; И TLS 1.1 и 1.2 будут отключены. Чтобы исправить это, см. Раздел «Какие Cipher Suites для включения SSL-сокета»? ,

Связано с вашим редактированием:

Обычно это нормально работает:

HIGH даст вам все, что сильно (около 112 бит безопасности и выше).

!aNULL удаляет анонимные протоколы, и !kRSA удаляет !kRSA ключей (но не подписание RSA), поэтому вы !kRSA с Integer и Elliptic Curve Diffie-Hellman. Ниже вы можете увидеть пример подписания RSA с Au=RSA .

HIGH также доставит вам слабый / раненый рывок, например MD5 и RC4 , поэтому вы явно удалите их. Вы также удаляете ненужные комплекты шифров, такие как SRP и PSK .

Вы можете проверить шифры под строкой с openssl ciphers -v ‘HIGH:!aNULL:!kRSA:!MD5:!RC4:!SRP:!PSK’ :

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

Получено фатальное предупреждение: handshake_failure через SSLHandshakeException

91 Denees [2011-06-15 09:23:00]

У меня проблема с авторизованным SSL-соединением. Я создал Struts Action, который подключается к внешнему серверу с сертификатом авторизированного SSL-клиента. В своем действии я пытаюсь отправить некоторые данные на сервер банка, но без везения, потому что в результате от сервера возникает следующая ошибка:

Читать еще:  Программа для восстановления удаленных фото с флешки

Мой метод из моего класса Action, который отправляет данные на сервер

Мой файл merchant.properties:

Впервые я подумал, что это проблема с сертификатом, я преобразовал ее из .pfx в .jks, но у меня такая же ошибка, без изменений.

java ssl ssl-certificate sslhandshakeexception

17 ответов

194 Решение Vineet Reynolds [2011-06-15 09:36:00]

Ошибка рукопожатия могла произойти по различным причинам:

  • Несовместимые комплекты шифрования, используемые клиентом и сервером. Это потребует от клиента использования (или включения) набора шифров, который поддерживается сервером.
  • Несовместимые версии используемого SSL (сервер может принимать только TLS v1, а клиент может использовать только SSL v3). Опять же, клиенту, возможно, придется убедиться, что он использует совместимую версию протокола SSL/TLS.
  • Неполный путь доверия для сертификата сервера; серверному сертификату, вероятно, не доверяет клиент. Это обычно приводит к более подробной ошибке, но это вполне возможно. Обычно исправление заключается в том, чтобы импортировать сертификат CA сервера в хранилище доверия клиентов.
  • Сертификат выдается для другого домена. Опять же, это привело бы к более подробному сообщению, но здесь я укажу исправление, если это является причиной. В этом случае разрешение будет заключаться в том, чтобы сервер (он не кажется вашим) использовать правильный сертификат.

Так как основной отказ нельзя определить, лучше включить флаг -Djavax.net.debug=all , чтобы включить отладку установленного SSL-соединения, С включением отладки вы можете определить, какая активность в рукопожатии не удалась.

Обновление

Основываясь на доступных сейчас деталях, выясняется, что проблема связана с недопустимым доверительным доверием сертификата между сертификатом, выданным серверу, и корневым центром сертификации. В большинстве случаев это происходит потому, что корневой сертификат ЦС отсутствует в хранилище доверия, что приводит к ситуации, когда путь доверия сертификатов не может существовать; сертификат по существу не доверен клиенту. Браузеры могут представлять предупреждение, чтобы пользователи могли игнорировать это, но то же самое не касается SSL-клиентов (например, класс HttpsURLConnection, или любая HTTP-клиентская библиотека, например Apache Клиент HttpComponents).

Большинство этих клиентских классов/библиотек будут полагаться на хранилище доверия, используемое JVM для проверки сертификата. В большинстве случаев это будет файл cacerts в каталоге JRE_HOME/lib/security. Если местоположение хранилища доверия было задано с использованием системного свойства JVM javax.net.ssl.trustStore , то хранилище в этом пути обычно является тем, которое используется клиентской библиотекой. Если вы сомневаетесь, посмотрите на свой класс Merchant и выясните, какой класс/библиотека он использует для установления соединения.

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

Предупреждение. Хранилище доверия — это, по сути, список всех доверенных центров, которым вы доверяете. Если вы введете сертификат, который не принадлежит CA, которому вы не доверяете, тогда соединения SSL/TLS с сайтами, имеющими сертификаты, выпущенные этим объектом, могут быть дешифрованы, если доступен закрытый ключ.

Обновление # 2: представление вывода трассировки JSSE

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

Если используется неверный доверительный магазин, вам необходимо повторно импортировать сертификат сервера в нужное место или перенастроить сервер на использование указанного списка (не рекомендуется, если у вас несколько JVM, и все они используется для разных нужд).

Если вы хотите проверить, содержит ли список доверенных сертификатов требуемые сертификаты, то есть раздел для того же самого, который начинается с:

Вам нужно будет искать, является ли CA сервера объектом.

Процесс рукопожатия будет иметь несколько значительных записей (вам нужно знать SSL, чтобы понять их подробно, но с целью отладки текущей проблемы достаточно знать, что сообщение handshake_failure обычно сообщается в ServerHello.

1. ClientHello

После инициализации соединения будет сообщена серия записей. Первым сообщением, отправленным клиентом в настройке соединения SSL/TLS, является сообщение ClientHello, обычно сообщается в журналах как:

Обратите внимание на используемые шифра. Возможно, вам придется согласиться с записью в вашем файле merchant.properties, поскольку та же конвенция может использоваться банковской библиотекой. Если используемое соглашение отличается от других, нет никаких причин для беспокойства, так как ServerHello будет указывать так, если набор шифров несовместим.

2. ServerHello

Сервер отвечает сервером ServerHello, который укажет, может ли быть установлена ​​настройка соединения. Записи в журналах обычно имеют следующий тип:

Обратите внимание на набор шифров, который он выбрал; это лучший набор, доступный как для сервера, так и для клиента. Обычно набор шифров не указан, если есть ошибка. Сертификат сервера (и, необязательно, целая цепочка) отправляется сервером, и он будет найден в записях как:

Если проверка сертификата прошла успешно, вы найдете запись, похожую на:

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

17 motobói [2015-07-17 20:41:00]

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

В обновлении 51 java 1.8 запретил [1] шифры RC4 по умолчанию, как мы видим на странице «Примечания к выпуску»:

Исправление ошибок: Запретить комплекты шифрования RC4

RC4 теперь рассматривается как скомпрометированный шифр.

Шифрованные номера RC4 были удалены из списка привилегированных шифрований по умолчанию для клиента и сервера в реализации Oracle JSSE. Эти комплекты шифрования могут быть включены с помощью методов SSLEngine.setEnabledCipherSuites() и SSLSocket.setEnabledCipherSuites() . См. JDK-8077109 (не публичный).

Если ваш сервер имеет сильное предпочтение для этого шифрования (или использует только этот шифр), это может вызвать handshake_failure на java.

Вы можете протестировать подключение к серверу, включающее шифры RC4 (сначала попробуйте без аргумента enabled , чтобы увидеть, запускаются ли a handshake_failure , а затем установите enabled :

17 Simon Yu [2016-11-08 04:31:00]

Установка расширения Java Cryptography Extension (JCE) Unlimited Strength (для JDK7 | для JDK8) исправит это ошибка. Разархивируйте файл и следуйте readme, чтобы установить его.

14 Brig [2013-06-13 18:32:00]

Это также может случиться, когда клиент должен предоставить сертификат. После того, как сервер перечислит цепочку сертификатов, может произойти следующее:

3. Запрос сертификата Сервер выдаст запрос клиента клиенту. В запросе будут перечислены все сертификаты, которые сервер принимает.

4. Цепочка клиентских сертификатов Это сертификат, который клиент отправляет на сервер.

Если в цепочке нет сертификата, а серверу требуется один, вы получите ошибку рукопожатия. Вероятная причина — путь к вашему сертификату не найден.

5. Проверка сертификата Клиент просит сервер проверить сертификат

Этот шаг произойдет, только если вы отправляете сертификат.

6. Закончено Сервер ответит с подтверждением ответа

7 Bela Vizy [2016-09-28 18:16:00]

Ошибка рукопожатия может быть ошибкой реализации протокола TLSv1.

В нашем случае это помогло с java 7:

jvm будет вести переговоры в этом порядке. Серверы с последним обновлением сделают 1.2, багги снизят до v1 и это будет работать с аналогичным v1 в java 7.

У меня есть эта ошибка, когда я пытался использовать JDK 1.7. Когда я обновил JDK до jdk1.8.0_66, все стало нормально работать.

Итак, самым простым решением для этой проблемы может быть — обновить JDK, и он может начать работать хорошо.

Читать еще:  Не сохранил изменения в excel как восстановить

3 heez [2016-06-17 01:18:00]

Предполагая, что вы используете надлежащие протоколы SSL/TLS, правильно настроили ваши keyStore и trustStore и подтвердили, что проблем с самими сертификатами не существует, вам может потребоваться укрепить ваши алгоритмы безопасности.

Как упоминалось в Vineet answer, одна из возможных причин получения этой ошибки связана с использованием несовместимых наборов шифров. Обновляя баннеры local_policy и US_export_policy в моей папке JDK security с теми, что указаны в Java Cryptography Extension (JCE), Я смог успешно завершить рукопожатие.

Сегодня я встречаю ту же проблему с клиентом OkHttp, чтобы получить https-адрес. Это было , вызванное версией протокола Https и несоответствием метода Cipher между стороной сервера и клиентской стороной.

1) проверьте версию протокола HTTPS и метод шифрования.

openssl>s_client -connect your_website.com:443 -showcerts

Вы получите подробную информацию о подробностях, информация о ключе приведена ниже:

2) настройте свой http-клиент, например, в клиент OkHttp:

Это даст нам то, что мы хотим.

2 Rich [2018-01-25 17:02:00]

Я обнаружил, что HTTPS-сервер потерпел неудачу, если мой клиентский процесс Java был настроен с

Не удалось выполнить соединение с помощью handshake_failure после ServerHello завершения ServerHello , но до начала потока данных.

Не было четкого сообщения об ошибке, которое идентифицировало проблему, ошибка выглядела как

Я изолировал проблему, пытаясь с помощью -Djsse.enableSNIExtension=false » -Djsse.enableSNIExtension=false «

1 jalogar [2016-09-09 10:22:00]

В моем случае переход из jdk 1.7.0_71 в jdk 1.8.0_60 исправил ошибку

1 John [2018-07-30 16:28:00]

Ugg! Это оказалось просто проблемой Java-версии для меня. Я получил ошибку рукопожатия, используя JRE 1.6, и все отлично работало с использованием JRE 1.8.0_144.

У меня была аналогичная проблема; обновление до Apache HTTPClient 4.5.3 исправлено.

Я использую com.google.api http client. Когда я общаюсь с внутренним сайтом компании, у меня возникает эта проблема, когда я ошибочно использовал https вместо http.

1 Ali786 [2016-03-14 16:13:00]

Mine была несовместимой с версией версии TLS .

Раньше это было TLSv1 Я изменил его TLSV1.2 , это решило мою проблему.

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

Я получал эту ошибку при использовании Parasoft SOATest для отправки запроса XML (SOAP).

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

0 molly gu [2018-07-04 12:03:00]

В моем случае сертификат импортируется, ошибка остается, решается это путем добавления System.setProperty(«https.protocols», «TLSv1.2,TLSv1.1,SSLv3»); перед подключением

0 Tianmu [2018-08-24 11:38:00]

В моем случае, сайт просто может использовать TLSv1.2. и я использую apache httpclient 4.5.6, я использую этот код и устанавливаю jce для решения этой проблемы (JDK1.7):

Javax net ssl sslhandshakeexception

413244 просмотра

7 ответа

2718 Репутация автора

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

Ответы (7)

плюса

1251 Репутация автора

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

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

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

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

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

PS Я не могу получить исходный код до выходных, так как в моем офисе отключен внешний SSH 🙁

14 плюса

2718 Репутация автора

Теперь я решил эту проблему таким образом,

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

129 плюса

102795 Репутация автора

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

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

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

9 плюса

1789 Репутация автора

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

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

1) попросить сертификат (скачать сертификат), импортировать этот сертификат в trustore. Стандартное использование Java по умолчанию можно найти в 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 .

Ссылка на основную публикацию
Adblock
detector