Возможно ли иметь несколько ключей / сертификатов на виртуальном хостинге в Apache 2?

#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