Ошибка рукопожатия SSL
Есть сторонние веб-сервисы, размещенные через HTTPS, при использовании веб-сервиса я сталкиваюсь с ошибкой сбоя рукопожатия SSL.
По соображениям безопасности у нас нет доступа к сторонним URL-адресам или сервисам, доступ к которым может получить только наш клиент.
Я сделал достаточно удара и испытания, но все еще не удалось.
Наше приложение работает на Weblogic 9.2.
Сторонние предоставили сертификат (формат.p7b). Я импортировал эти сертификаты в хранилище javakeys (cacerts), даже в хранилища ключей weblogic (demotrust.jks), но все еще с той же ошибкой. Я пробовал разные комбинации импорта сертификата в хранилище ключей, я также вижу запись сертификата в хранилище ключей.
Даже заглушки, которые мы просили клиента сгенерировать в этой среде (поскольку мы не можем получить доступ из нашей среды), генерируются заглушки HTTP, но с использованием HTTPS это дает сбой рукопожатия SSL.
Я думаю, что если мы решим эту проблему, то приложение также будет работать.
Приложение работает нормально на http, но на https выдает ошибку сбоя рукопожатия SSL.
Я правильно преобразовал из (.p7b в формат.cer и затем импортировал), даже использовал.p7b для.pem в.der формат, а затем импортировал в хранилище ключей java demotrust.jks, но все равно не работает.
Я пропустил какие-либо шаги, пожалуйста, дайте мне знать.
2 ответа
То же самое было решено добавлением сертификатов в файл cacerts и указанием того же на weblogic. Собственно цепочка сертификатов не была должным образом импортирована в файл cacerts.
Мы также столкнулись с той же проблемой. Мы пытались подключить сторонний сервер с установленным SSL-сертификатом 256encryption. Когда мы пытались подключить его из Java(v1.7), мы получали ошибку handshake_failure.
Мы следовали ниже шагов для решения проблемы:
Загрузите действующую цепочку сертификатов SSL со стороннего сервера и установите ее в своих хранилищах хранилища ключей jdk (находится в C:\Program Files\Java\jdk1.7.0_79\jre\lib\security) в Windows. использовал следующий Java-класс с открытым исходным кодом для извлечения сертификата из стороннего URL
Для установки сертификата в хранилище ключей вы можете использовать следующую команду: keytool -import -trustcacerts -keystore cacerts -storepass changeit -noprompt -alias helloroot -file hello.cer
После выполнения описанных выше шагов проблема не устраняется, и мы узнаем о TLSv1.1, TLSv1.2 после общения со сторонней командой серверов. Сторонний сервер использовал и заставлял клиента подключаться только по TLSv1.1 и более новой версии.
Мы использовали Java 1.7 и Grails 2.3.1. Мы заставили Grails использовать TLSv1.1 при подключении к URL-адресу HTTPS. Существуют следующие способы заставить Grails использовать TLSv1.1 или новее
Путем настройки файла BuildConfig.groovy и добавления jvmArgs: ['-Dhttps.protocols = TLSv1.1']
grails.project.fork = [... run: [maxMemory: 1280, minMemory: 128, отладка: false, maxPerm: 256, forkReserve: true, jvmArgs: ['-Dhttps.protocols = TLSv1.1'] ] ,...]
Вы можете передать параметр -Dhttps.protocol при запуске приложения Grails
grails run-app -Dhttps.protocols=TLSv1.1