Android + Verisign SSL версия 1

У меня следующая проблема: я использую сертификат Verisign SSL Cert и пытаюсь подключиться из моего приложения для Android к своему серверу tomcat 7. На мой взгляд, сертификат установлен правильно, так как я могу успешно подключиться с помощью того же приложения для iphone, браузера Firefox и ssl-инструмента verisign и других инструментов проверки ssl.

Но приложение для Android говорит: java.security.cert.CertificateException: java.security.cert.CertPathValidatorException: Version 1 certs can't be used as intermediate certificates

Я пытаюсь изменить порядок сертификатов, как описано во многих ответах, и внедрил решение с помощью EasySSLSocketFactory а также EasyX509TrustManager но я не мог решить исключение. Сертификат Версии 1 заказан как последний, поэтому у меня есть [0]-my cert, [1]-intermediate1, [2]-intermediate2 and finally [3]-the root Version 1, Я не хочу разрешать все сертификаты по соображениям безопасности. Я не уверен, почему выбрасывается это исключение, но кажется, что либо Verisign выдает неправильный корневой сертификат, либо Android не реализовал корень в своем хранилище доверенных сертификатов. Как это можно решить? Большое спасибо за любую помощь

2 ответа

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

Я решил проблему, сначала выяснив, какой сертификат в цепочке сертификатов был сертификатом версии 1 (что вызывает ошибку) с помощью openssl.

simonevertsson$ openssl s_client -connect my.secure.site.com:443

Это дает цепочку сертификатов. Пример:

---
Certificate chain
 0 s:/C=SE/ST=Uppsala/L=Uppsala/O=Example AB/CN=my.secure.site.com
   i:/C=US/O=VeriSign, Inc./OU=VeriSign Trust Network/OU=Terms of use at https://www.verisign.com/rpa (c)10/CN=VeriSign Class 3 Secure Server CA - G3
 1 s:/C=US/O=VeriSign, Inc./OU=VeriSign Trust Network/OU=Terms of use at https://www.verisign.com/rpa (c)10/CN=VeriSign Class 3 Secure Server CA - G3
   i:/C=US/O=VeriSign, Inc./OU=VeriSign Trust Network/OU=(c) 2006 VeriSign, Inc. - For authorized use only/CN=VeriSign Class 3 Public Primary Certification Authority - G5
 2 s:/C=US/O=VeriSign, Inc./OU=VeriSign Trust Network/OU=(c) 2006 VeriSign, Inc. - For authorized use only/CN=VeriSign Class 3 Public Primary Certification Authority - G5
   i:/C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority
 3 s:/C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority
   i:/C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority
---

Затем я перешел на страницу загрузки корневого сертификата VeriSign и вручную загрузил.pem-файл для сертификата версии 1, которым в моем случае был публичный первичный центр сертификации класса 3.

Когда файл сертификата был загружен, я просто следовал руководству разработчика Android по добавлению неизвестных ЦС. И просто так, ошибка исчезла.

Убедитесь, что вы установили только один сертификат на веб-сервере / сервере приложений. Удалить все просроченные сертификаты.

Другие вопросы по тегам