Зачем это всё надо спросите вы? А вот понадобилось :)
Скачиваем
Итак. У нас есть Windsows 7. Осталось скачать Apache (
httpd-2.2.22-win32-x86-no_ssl.msi) и OpenSSL (
Win32OpenSSL-1_0_1c.exe) или 2 в 1
— Apache с включенным OpenSSL (
httpd-2.2.22-win32-x86-openssl-0.9.8t.msi).
Устанавливаем
Установку Apache описывать не буду. Там всё понятно.
Вкратце об
OpenSSL:
OpenSSL — криптографический пакет с открытым исходным кодом для работы с SSL/TLS. Позволяет создавать ключи RSA, DH, DSA исертификаты X.509, подписывать их, формировать CSR и CRT. Также имеется возможность шифрования данных и тестирования SSL/TLS соединений.
Настраиваем
Сперва подключим модуль SSL в Apache и файл конфигурации SSL. Для этого откроем
httpd.conf (например,
c:\Program Files(x86)\Apache Software Foundation\Apache2.2\conf\httpd.conf) и раcкомментируем строки:
#LoadModule ssl_module modules/mod_ssl.so
#Include conf/extra/httpd-ssl.conf
Теперь создадим необходимые ключи и
самозаверенный сертификат.
Создание ключей
Открываем командную строку с
OpenSSL (
c:\Program Files(x86)\Apache Software Foundation\Apache2.2\bin\openssl.exe) (можно, как обычно, в командной строке, но с командой openssl и указанием пути до неё). И укажите свой путь до
openssl.cnf, возможно он совпадёт с моим:
OpenSSL> req -config ..\conf\openssl.cnf -new -out server.csr
Там можно ничего не вводить, кроме пароля - он дальше потребуется.
A challenge password и
An optial company name необходимо пропустить (не знаю зачем). В результате этой команды в нашей директории появятся два файла
privkey.pem и
server.csr.
Сгенерируем ключ сервера
server.key (потребуется ввести пароль, который задали ранее):
OpenSSL> rsa -in privkey.pem -out server.key
Осталось сгенерировать сертификат, например на 365 дней:
OpenSSL> x509 -in server.csr -out server.crt -req -signkey server.key -days 365
Создадим отдельную папку для сертефикатов (
c:\Program Files(x86)\Apache Software Foundation\Apache2.2\conf\cert) и переместим туда все получившиеся файлы
server.key,
privkey.pem,
server.csr и
server.crt.
Настраиваем дальше
в файле настройки SSL (
c:\Program Files(x86)\Apache Software Foundation\Apache2.2\conf\extra\httpd-ssl.conf) меняем путь к
server.crt:
SSLCertificateFile "C:/Program Files(x86)/Apache Software Foundation/Apache2.2/conf/cert/server.crt"
и к server.key:
SSLCertificateKeyFile "C:/Program Files(x86)/Apache Software Foundation/Apache2.2/conf/cert/server2.key"
Перезапускаем Apache ииии...
Вариант 1: сервер перезапустился,
https://localhost работает.
Вариант 2: ничего не работает!
т.е. не запускается Apache. Пишет ошибку:
The requested operation has failed
Как у меня и случилось. Это и сподвигло написать статью на будущее.
Пока не сползал в error.log, не понял в чём дело. А проблема известная и даже
описана в вики apache, и предложено несколько решений.
Проблема
В
httpd-ssl.conf есть такой пункт:
SSLSessionCache "shmcb:C:/Program Files(x86)/Apache Software Foundation/Apache2.2/logs/ssl_scache(512000)"
Windows 64-bit устанавливает 32-bit приложения в
Program Files(x86), ошибка как раз из-за этих скобок.
Решение
Я создал ярлык Apache для C:/Program Files(x86)/Apache Software Foundation/Apache2.2/ и поместил его в корень.
Затем в той строке, где возникает ошибка, изменил путь с применением ярлыка:
SSLSessionCache "shmcb:C:/Apache/logs/ssl_scache(512000)"
Перезапускаем Apache. Заходим на https://localhost, работает!
Винда есть винда - грабли везде.