Службы

Apache и HTTPS

https osi

HTTPS (HyperText Transfer Protocol Secure) — это не самостоятельный протокол, а развитие HTTP (HyperText Transfer Protocol) в сторону безопасности. То есть, к обычному HTTP прикрутили механизм шифрования передаваемых данных. Шифрование реализуется с помощью SSL (Secure Sockets Layer). Как это работает на практике?

При подключении к серверу по протоколу HTTPS (cтандатный порт TCP 443), браузер с сервером сначала здороваюся, обмениваются поддерживаемыми алгоритмами шифрования, договариваются какой алгоритм будут использовать. Сервер отдает браузеру открытый ключ (сертификат), который будет использоваться для шифрования. Договариваются о взаимовыгодном сотрудничестве короче. Обычно им удается договориться и они устанавливают защищенное соединение. Происходит все это на шестом уровне модели OSI. И только после этого уже вступает в действие HTTP, который работает на прикладном — седьмом уровне.

Для активации поддержки HTTPS на уже установленном Apache требуется: сгенерировать ключи, включить поддержку SSL, и сконфигурировать виртуальный хост (Или несолько виртуальных хостов).


Генерация самоподписного сертификата

Заходим в директорию к апачу где хранятся ключи.

# cd /etc/apache2/ssl

Создаем самоподписный сертификат и новый ключ сервера без пароля:

# openssl req -new -newkey rsa:1024 -nodes -keyout citename-CA.key -x509 -days 365 \
-subj "/C=RU/ST=Arkh/L=Arkh/O=OAO/OU=Sales/CN=citename.ru/emailAddress=Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра." \
-out citename-CA.crt

Аргументы команды:

reqГенерация нового сертификата
-newЗапрос на подпись сертификата
-newkey rsa:1024Новый закрытый RSA ключ длиной 1024 бита
-nodesНе шифровать закрытый ключ
-keyout citename-CA.keyЗакрытый ключ сохранить в citename-CA.key
-x509Самоподписанный сертификат
-days 365Срок действия сертификата
-subjИнформация о владельце сертификата.
 

C — Двухсимвольное обозначение страны
ST — Республика/Регион/Край/Область
L — Населённый пункт
O — Организация
OU — Подразделение организации
CN — Имя сертификата. Если генерится для сервера — должно указываться имя сервера.
emailAddress — и так вроде понятно

-out citename-CA.crtСертификат сохранить в citename-CA.crt

Выставляем права доступа на ключи.

# chmod 600 /etc/apache2/ssl/*.crt
# chmod 600 /etc/apache2/ssl/*.key

Настройка сервера apache

Включаем поддержку SSL в строке опций сервера. Для этого добавим туда -D SSL

/etc/conf.d/apache2

APACHE2_OPTS=»-D SSL»

Конфигурация виртуального хоста

Конфигурируем файл виртуального хоста. Можно и дефолтный виртуальный хост, если включена его поддержка в Apache.

/etc/apache2/vhosts.d/citename_ssl_vhost.conf

<IfDefine SSL>

<IfModule ssl_module>

Listen 11.222.33.4:443

<VirtualHost 11.222.33.4:443>

    ServerName citename.ru

    ServerAdmin Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.

    DocumentRoot «/var/www/localhost/htdocs»

    <Directory «/var/www/localhost/htdocs»>

        Options Indexes FollowSymLinks

        AllowOverride All

        Order allow,deny
        Allow from all

    </Directory>

    ErrorLog /var/log/apache2/ssl_citename_error_log

    <IfModule log_config_module>

        TransferLog /var/log/apache2/ssl_citename_access_log

        CustomLog /var/log/apache2/ssl_citename_request_log \

                  «%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \»%r\» %b»

    </IfModule>

    SSLEngine              on

    SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL

    SSLCertificateFile     /etc/apache2/ssl/citename-CA.crt

    SSLCertificateKeyFile  /etc/apache2/ssl/citename-CA.key

    <FilesMatch «\.(cgi|shtml|phtml|php)$»>

        SSLOptions +StdEnvVars

    </FilesMatch>

</VirtualHost>

</IfModule>

</IfDefine> 

 Осталось перезапустить Apache

# /etc/init.d/apache reload

Настройка нескольких виртуальных хостов для работы с SSL

Например, есть три хоста с одинаковым IP адресом: citename.ru, shop.citename.ru, cite-name.ru. Для них нужно поднять три сайта с разным содержимым и доступом к ним через HTTPS.

Создаем для них самоподписные сертификаты.

# cd /etc/apache2/ssl
# openssl req -new -newkey rsa:1024 -nodes -keyout citename-CA.key -x509 -days 365 \
-subj "/C=RU/ST=Arkh/L=Arkh/O=OAO/OU=Sales/CN=citename.ru/emailAddress=Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра." \
-out citename-CA.crt
# openssl req -new -newkey rsa:1024 -nodes -keyout shop-citename-CA.key -x509 -days 365 \
-subj "/C=RU/ST=Arkh/L=Arkh/O=OAO/OU=Sales/CN=shop.citename.ru/emailAddress=Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра." \
-out shop-citename-CA.crt
# openssl req -new -newkey rsa:1024 -nodes -keyout cite-name-CA.key -x509 -days 365 \
-subj "/C=RU/ST=Arkh/L=Arkh/O=OAO/OU=IT/CN=cite-name.ru/emailAddress=Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра." \
-out cite-name-CA.crt
# chmod 600 /etc/apache2/ssl/*.crt
# chmod 600 /etc/apache2/ssl/*.key

И конфигурируем виртуальные хосты.

/etc/apache2/vhosts.d/citename_ssl_vhost.conf

<IfDefine SSL>

<IfModule ssl_module>

Listen 11.222.33.4:443

NameVirtualHost 11.222.33.4:443

<VirtualHost 11.222.33.4:443>

    ServerName citename.ru

    ServerAdmin Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.

    DocumentRoot «/var/www/localhost/htdocs»

    <Directory «/var/www/localhost/htdocs»>

        Options Indexes FollowSymLinks

        AllowOverride All

        Order allow,deny
        Allow from all

    </Directory>

    ErrorLog /var/log/apache2/ssl_citename_error_log

    <IfModule log_config_module>

        TransferLog /var/log/apache2/ssl_citename_access_log

        CustomLog /var/log/apache2/ssl_citename_request_log \

                  «%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \»%r\» %b»

    </IfModule>

    SSLEngine              on

    SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL

    SSLCertificateFile     /etc/apache2/ssl/citename-CA.crt

    SSLCertificateKeyFile  /etc/apache2/ssl/citename-CA.key

    <FilesMatch «\.(cgi|shtml|phtml|php)$»>

        SSLOptions +StdEnvVars

    </FilesMatch>

</VirtualHost>

<VirtualHost 11.222.33.4:443>

    ServerName shop.citename.ru

    ServerAdmin Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.

    DocumentRoot «/var/www/shop/htdocs»

    <Directory «/var/www/shop/htdocs»>

        Options Indexes FollowSymLinks

        AllowOverride All

        Order allow,deny
        Allow from all

    </Directory>

    ErrorLog /var/log/apache2/ssl_shop_citename_error_log

    <IfModule log_config_module>

        TransferLog /var/log/apache2/ssl_shop_citename_access_log

        CustomLog /var/log/apache2/ssl_shop_citename_request_log \

                  «%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \»%r\» %b»

    </IfModule>

    SSLEngine              on

    SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL

    SSLCertificateFile     /etc/apache2/ssl/shop-citename-CA.crt

    SSLCertificateKeyFile  /etc/apache2/ssl/shop-citename-CA.key

    <FilesMatch «\.(cgi|shtml|phtml|php)$»>

        SSLOptions +StdEnvVars

    </FilesMatch>

</VirtualHost>

<VirtualHost 11.222.33.4:443>

    ServerName cite-name.ru

    ServerAdmin Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.

    DocumentRoot «/var/www/cite-name/htdocs»

    <Directory «/var/www/cite-name/htdocs»>

        Options Indexes FollowSymLinks

        AllowOverride All

        Order allow,deny
        Allow from all

    </Directory>

    ErrorLog /var/log/apache2/ssl_cite_name_error_log

    <IfModule log_config_module>

        TransferLog /var/log/apache2/ssl_cite_name_access_log

        CustomLog /var/log/apache2/ssl_cite_name_request_log \

                  «%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \»%r\» %b»

    </IfModule>

    SSLEngine              on

    SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL

    SSLCertificateFile     /etc/apache2/ssl/cite-name-CA.crt

    SSLCertificateKeyFile  /etc/apache2/ssl/cite-name-CA.key

    <FilesMatch «\.(cgi|shtml|phtml|php)$»>

        SSLOptions +StdEnvVars

    </FilesMatch>

</VirtualHost>

</IfModule>

</IfDefine> 

Тестировалось на apache-2.2.27-r4, openssl-1.0.1k.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *