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.

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


Обновить