Установка
При установке apache 2.2 из портов, должен быть установлен флажок SSL (включен по умолчанию).
Настройка глобальных параметров SSL (httpd-ssl.conf)
Немного ясности о понятии SSL сертификата. Есть два кардинально разные типы сертификатов SSL – самоподписанные, это тот, который подписанный тем же, кто его и использует, и подписанные сторонней компанией, которая является официальным уполномоченным органом, которой доверяют многие браузеры и т.д. Самоподписанный сертификат можно генерировать самому, для этого никаких подтверждений, а также проверок проходить не надо. А вот доверенный сертификат требует уже проверок, это может быть простой проверкой собственности домена, на который подписывается сертификат SSL, но может быть и проверка личности и организации (сканы паспорта, свидетельство о регистрации Юр. Лица и т.д.), это зависит от типа желаемого сертификата SSL. Обычно, чем дороже сертификат – тем больше ему доверяют :). Для большинства eCommerce компаний сертификат SSL – это не просто мера защиты, но статус, престиж.
Редактируем файл глобальных настроек, который расположен в папке /usr/local/etc/apache22/extra
#Путь к генератору случайных чисел и размер запрашиваемой последовательности #Задается два параметра для старта и при каждом соединении соответственно. #В случае с FreeBSD используем устройство /dev/urandom (симлинк к /dev/random). SSLRandomSeed startup file:/dev/random 512 SSLRandomSeed connect file:/dev/random 512 #Слушаем стандартный https порт Listen 443 #Регистрируем типы MIME для загрузки сертификатов AddType application/x-x509-ca-cert .crt AddType application/x-pkcs7-crl .crl #Способ запроса пароля к зашифрованному приватному ключу. #По умолчанию (builtin) запрос в консоли во время загрузки перед демонизацией Апача. SSLPassPhraseDialog builtin #Тип (размер) и время жизни межпроцессного кэша сессий #Кэш используется для ускорения параллельных загрузок изображений одним клиентом, не требуя согласования каждой сессии. #По умолчанию используется цикличный буфер в общей памяти. SSLSessionCache "shmcb:/var/run/ssl_scache(512000)" SSLSessionCacheTimeout 300 #Тип блокировок для синхронизации процессов апача #Значение default, позволяет среде исполнения апачи выбрать лучший по ее мнению тип блокировки для данной платформы. SSLMutex "file:/var/run/ssl_mutex" #Задаем настройки для SSL сертификата, если работает модуль ssl_module - эти надстройки включаются #Внимание, это приемлемо только для одного хоста, если вы планируете несколько виртуальных хостов, #вам необходимо отдельно для каждого хоста прописывать свой SSL сертификат, или же приобрести wildcard SSL. <IfModule ssl_module> #Опрределяем протокол для SSL SSLProtocol all -SSLv2 SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5 #Прописываем пути к ключам (мы их сгенерим/получим ниже, или же вы можете подключить самоподписанный SSL сертификат) SSLCertificateFile "/usr/local/etc/apache22/server.crt" SSLCertificateKeyFile "/usr/local/etc/apache22/server.key" #При необходимости, включаем передачу переменных окружения `SSL_*' в скрипты #Требует дополнительные ресурсы, отключите эту опцию, если переменные не используется <Directory "/usr/local/www/apache22/cgi-bin"> SSLOptions +StdEnvVars </Directory> <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> #Раскомментировать, если требуется совместимость с IE 2-5 #Директива снижает производительность для всех версий IE из-за отключения keep-alive #Для обеспечения совместимости с экспортными ограничениями #придется включить поддержку 56 битных ключей #подробности: http://httpd.apache.org/docs/2.0/ssl/ssl_faq.html#msie #BrowserMatch "MSIE [2-5]" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0 </IfModule>
Включение mod_ssl в httpd.conf (/usr/local/etc/apache22/httpd.conf)
Убедимся, что команда загрузки mod_ssl имеется в файле и раскомментирована:
LoadModule ssl_module libexec/apache22/mod_ssl.so
Ниже найдем строки и раскоментируем:
# Secure (SSL/TLS) connections Include etc/apache22/extra/httpd-ssl.conf
Если в файле имеются строки:
<IfModule ssl_module> SSLRandomSeed startup builtin SSLRandomSeed connect builtin </IfModule>
Их нужно закомментировать или удалить, они нужны только в системах, где нет устройства /dev/random:
#<IfModule ssl_module> #SSLRandomSeed startup builtin #SSLRandomSeed connect builtin #</IfModule>
Если не планируем использовать никакие другие порты для apache (то есть apache не будет слушать другие порты, кроме https), то отключаем:
#Listen 443 #Listen 80
Генерация ключей
Генерирование RSA-ключа сервера Apache без шифрования
cd /usr/local/etc/apache22 openssl genrsa -out server.key 1024 #Устанавливаем права только на чтение chmod 600 server.*
где: 1024 – стойкость шифрования, а server.key – имя файла ключа на выходе. Имя файла может быть любым. Но удобней использовать имя хоста, которому принадлежит этот ключ.
Сам ключ представляет собой текстовый файл и выглядит обычно так:
-----BEGIN RSA PRIVATE KEY----- MIICXgIBAAKBgQDHJaQYB4QwYbq1Yf177CBSPVSyl+oMPvc7QKzimldewAosMkcR BQo/02IbIrZsHw2YHL5+EuxZr0RZLvbKCbOIWKa3FWQh00XBDEQCGKQSVAqFyi2J Bb47nJ5nGfWfetRf33hYlRqN2CluH7uU02qV0m8IvgVduI9ce3Ddp7FblQIDAQAB R1a/fwOWIhkKGoLAlKPxnZWgAftXMOhPkl8o4C+V2Nv/LNDW8nk6qF1/fZ9JLdld m7vBJRooJGNzrp9z59gtAkEAl7JjjuqX3ae+Bg4/DFzJh/qyLBwwMHrlnicLxXUL 3w8f+a4t/R4vmh5Pqlep5IorWWfwhNIO2MODfzcN8XeApA== -----END RSA PRIVATE KEY-----
Важную роль играют первая и последняя строчки файла. До и после фраз "BEGIN RSA PRIVATE KEY" и "END RSA PRIVATE KEY" должно быть ровно по пять тире. Не исправляйте никогда этот файл вручную в текстовом редакторе.
Положите полученный ключ в папку, доступную веб-серверу, например, в /usr/local/etc/apache/ssl Перейдите в эту папку и сгенерируйте CSR запрос.
Создание CSR (сertificate signing request)
cd /usr/local/etc/apache22/ssl openssl req -new -key server.key -out server.csr
где: server.key – RSA-ключ сервера; server.csr – имя файла, в котором будет сгенерирован CSR запрос в PEM формате.
Программа начнет задавать Вам вопросы, на которые следует указывать данные о владельце будущего ключа. Естественно, вписать сюда можно что угодно (кроме пункта Common Name – оно должно точно совпадать с именем сайта, который будет использовать будущий сертификат). Но все таки стоит придерживаться правил и вписывать реальные данные.
Дополнительные ('extra') атрибуты запроса вводить не обязательно и не нужно. Просто нажать Enter. В текущей папке появится файл CSR запроса. Выглядит он обычно так:
-----BEGIN CERTIFICATE REQUEST----- MIIB5DCCAU0CAQAwgaMxCzAJBgNVBAYTAlVBMQswCQYDVQQIEwJEUDEXMBUGA1UE BxMORG5lcHJvcGV0cm92c2sxFDASBgNVBAoTC0RhZW1vbnkub3JnMRowGAYDVQQL ExFBcGF5aGUgV2ViIFNlcnZlcjEbMBkG21UEAxMSc2VjdXJlLmRhZW1vbnkub3Jn MR8wHQYJKoZIhvcNAQkBFhByb290QGRhZW1vbnkub3JnMIGfMA0GCSqGSIb3DQEB AQUAA4GNADCBiQKBgQDKanM73zDC7YKuulG+WdsicutOQqPltQrKaG+8ifq5KhX8 QEK6cek7vMHQ195qwIXXtTUqZYRZM//Ogc+AytJ7b1csR2yiqQrh3cAcn3h1+LtX Sy+1ty0OeUqWBRYhIgfNeuY253nPJRhicKOLTDPbmURq9SlIPXjkkirEg90Q5QID AQABoAAwDQYJKoZIhvcNAQEFBQADgYEAGdVMaWva0eobg5Q/q8icTiE3c1WkD/B8 lp5NBfqRZ/9xzvriA2R2nmjilYfMPvP5sGi9usdul9v7iftMz/FikAuDiIwZMRFv OIGyedJ6jJG08YKCt+YpCXXd8v2EvuyKL9NMy3C2+RAA3ZJ1YmPPYBxF07+UX0q4 SmVodjGDfpo= -----END CERTIFICATE REQUEST-----
Имея CSR запрос, проходим по этому адресу, (либо по другим, приведенным выше), и отправляем его через форму на сайте, указывая дополнительно прочую сопутствующую информацию. Ключ пришлют Вам по e-mail. Полученный ключ (файл с расширением .crt) положите в папочку /usr/local/etc/apache/ssl и в конфигурационный файл сервера Apache для Вашего SSL хоста добавьте необходимые директивы, мы их уже добавили выше.
Настройка виртуального хоста
Виртуальный хост необходим чтобы изолировать шифруемый контент. Виртуальные хосты могу находиться как в extra/httpd-vhosts.conf, так и в Includes/*.conf.
<VirtualHost *:443> #Включаем SSL для этого виртуального хоста SSLEngine on ServerAdmin [email protected] DocumentRoot "/www/sites/адрес.нашего.сайта.ру/www" ServerName адрес.нашего.сайта.ру:443 ServerAlias www.адрес.нашего.сайта.ру:443 ErrorLog "/www/sites/адрес.нашего.сайта.ру/logs/error_hhtps_log" CustomLog "/www/sites/адрес.нашего.сайта.ру/logs/access_httpds_log" "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" TransferLog "/www/sites/адрес.нашего.сайта.ру/logs/transfer_https_log" <Directory "/www/sites/адрес.нашего.сайта.ру/www"> AllowOverride All Order allow,deny Allow from all #Запрещаем смотреть содержимое каталога, в случае отсутствия индексных файлов (index.html, index.php) Options -Indexes FollowSymLinks </Directory> </VirtualHost>
Перезапускаем апач:
apachectl restart
Пробуем зайти на сайт 🙂