#apache #ssl #apache2 #mod-ssl
#apache #ssl #apache2 #мод-ssl
Вопрос:
Я хотел бы знать, как я могу настроить мой Apache 2 (версия 2.0.64) для использования нескольких пар ключей / сертификатов для взаимной аутентификации.
Точнее, я настроил свой apache на прием SSL-соединений через порт 443, используя эту конфигурацию:
<VirtualHost _default_:443>
SSLEngine on
SSLCertificateFile certs/mycert.crt
SSLCertificateKeyFile certs/mykey.key
SSLCACertificateFile certs/ca.crt
.....
</VirtualHost>
У меня есть 2 псевдонима, допустим:
https://myserver/project1
https://myserver/project2
Я хотел бы использовать другие пары ключей / сертификатов (чем mykey.key
/ mycert.crt
) для аутентификации клиентов, которые подключаются к моему 2-му URL ( https://myserver/project2
).
Я пробовал использовать директивы <Location>
и <LocationMatch>
, но директивы SSL, похоже, не поддерживаются в этих директивах.
Как это можно сделать?
Ответ №1:
В TLS есть расширение с именем Service Name Indication (оно же SNI). Клиент TLS указывает имя сервера, к которому он подключен; поэтому сервер может выбрать правильный ключ и сертификат для использования.
Согласно странице Википедии SNI, оба модуля Apache 2 mod_ssl и mod_gnutls, похоже, поддерживают это расширение, а также многочисленные веб-клиенты
Руководство по настройке Apache 2 доступно здесь: http://en.gentoo-wiki.com/wiki/Apache2/SSL_and_Name_Based_Virtual_Hosts
Комментарии:
1. Привет, Jcs, спасибо за ваш ответ. Фактически, я видел эту ссылку, но она на самом деле не соответствует моим потребностям.
2. Потому что мой Apache использует mod_jk для отправки запросов на несколько серверов приложений в JAVA JEE. Так что у меня нет нескольких доменных имен, кроме псевдонима. На самом деле, я бы хотел иметь какую-то конфигурацию, подобную
<Location /project1>SSLCertificateKeyfile .... SSLCertificateFile </Location>
для каждого проекта. Скажите мне, если это кажется вам непонятным. Спасибо.3. У вас есть одно доменное имя, но вы хотите использовать другой сертификат сервера на основе URL-адреса. Я не думаю, что это возможно, поскольку клиент не отправляет URL-адрес, пока не будет выполнено подтверждение связи TLS.
Ответ №2:
Возможные решения для выполнения имеют SNI с apache2:
- Обновите apache2 до версии 2.2.x
- Скомпилируйте / установите gnutls с помощью apache2