#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.