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 - Двухсимвольное обозначение страны |
|
-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 </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 </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 </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 </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.
Добавить комментарий