openssl -connect возвращает неправильный сертификат

#apache #ssl #certificate

#apache #ssl #сертификат

Вопрос:

Вот моя проблема. У меня есть несколько доменов, размещенных на одном веб-сервере apache. (Виртуальные хосты) Два из них (a.com и b.com) используйте ssl-сертификаты. Я настроил обе эти команды:

     SSLEngine on
    SSLCertificateFile /etc/apache2/ssl/ABC.crt
    SSLCertificateKeyFile /etc/apache2/ssl/ABC.key
    SSLCertificateChainFile /etc/apache2/ssl/ABC.chain.crt
    SSLProtocol             all -SSLv2
  

Когда я пытаюсь подключиться через браузер (Chrome, Firefox, IE), он работает нормально, и я получаю правильный сертификат.
Но на Android я получил исключение: нет однорангового сертификата

Затем я попытался протестировать его с помощью этой команды:

     openssl s_client -connect b.com:443
  

Он возвращает мне сертификат a.com.
Есть предложения, что я сделал не так, что я получаю неправильный сертификат с openssl и Android?

Ответ №1:

Вероятно, на одном IP-адресе находится несколько хостов, и вам необходимо использовать указание имени сервера (SNI) для доступа к этому сайту. Для SNI с помощью openssl s_client используйте -servername опцию, например openssl s_client -connect b.com:443 -servername a.com . Что касается Android: согласно https://developer.android.com/training/articles/security-ssl.html SNI поддерживается начиная с версии 2.3 для HttpsURLConnection, но не для HTTP-клиента Apache.