Несмотря на то, что этот вопрос имеет приемлемый ответ, я подумал, что стоит ответить, так как я получил ту же ошибку на более старом Android-устройстве, работающем под управлением 2.3.3:
javax.net.ssl.SSLPeerUnverifiedException: No peer certificate
После прочтения нескольких различных связанных вопросов на SOЯ пришел к выводу, что это может произойти по двум (может быть, еще?) Причинам:
- Неправильная установка промежуточного сертификата
- Неправильный порядок цепочки сертификатов
В моем случае это был неправильный заказ сертификатов.В качестве примера я публикую заказ на сертификат на этот вопрос с проницательным ответом пользователя bdc .Вы можете получить заказ сертификата, выполнив следующие действия в терминале:
openssl s_client -connect eu.battle.net:443
(очевидно, заменив eu.battle.net своим собственным сервером).В случае eu.battle.net на тот момент порядок был:
Certificate chain
0 s:/C=US/ST=California/L=Irvine/O=Blizzard Entertainment, Inc./CN=*.battle.net
i:/C=US/O=Thawte, Inc./CN=Thawte SSL CA
1 s:/C=US/O=thawte, Inc./OU=Certification Services Division/OU=(c) 2006 thawte, Inc. - For authorized use only/CN=thawte Primary Root CA
i:/C=ZA/ST=Western Cape/L=Cape Town/O=Thawte Consulting cc/OU=Certification Services Division/CN=Thawte Premium Server CA/emailAddress=premium-server@thawte.com
2 s:/C=US/O=Thawte, Inc./CN=Thawte SSL CA
i:/C=US/O=thawte, Inc./OU=Certification Services Division/OU=(c) 2006 thawte, Inc. - For authorized use only/CN=thawte Primary Root CA
В то время как он должен был быть:
Certificate chain
0 s:/C=US/ST=California/L=Irvine/O=Blizzard Entertainment, Inc./CN=*.battle.net
i:/C=US/O=Thawte, Inc./CN=Thawte SSL CA
1 s:/C=US/O=Thawte, Inc./CN=Thawte SSL CA
i:/C=US/O=thawte, Inc./OU=Certification Services Division/OU=(c) 2006 thawte, Inc. - For authorized use only/CN=thawte Primary Root CA
2 s:/C=US/O=thawte, Inc./OU=Certification Services Division/OU=(c) 2006 thawte, Inc. - For authorized use only/CN=thawte Primary Root CA
i:/C=ZA/ST=Western Cape/L=Cape Town/O=Thawte Consulting cc/OU=Certification Services Division/CN=Thawte Premium Server CA/emailAddress=premium-server@thawte.com
Правило состоит в том, что эмитент сертификата "n"в цепочке должен совпадать с темой сертификата" n + 1 ".
После того, как я обнаружил проблему, было тривиально изменить порядок сертификата на сервере, и все сразу начало работать на устройстве Android 2.3.3.,Я думаю, это хорошо, что старые версии Android немного надоедливы по поводу порядка сертификатов, но это было также кошмаром, так как новые версии Android переупорядочивают сертификаты автоматически.Черт, даже старый iPhone 3GS работал с сертификатами из строя.