Страницы

среда, 8 августа 2012 г.

Apache 2.2 + SSL на Windows 7

Зачем это всё надо спросите вы? А вот понадобилось :)

Скачиваем

Итак. У нас есть 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 включённым в Apache, поэтому качал отдельно. OpenSSL не установится без Visual C++ 2008 Redistributables.
Вкратце об 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, работает!

Винда есть винда - грабли везде.

7 комментариев:

  1. Все супер. Вот только не могу понять про ошибку как исправить.

    ОтветитьУдалить
  2. вон вы в самом начале показываете запрос на подписание сертификата. А как его сделать в 2048 бит. у вас он в 1024

    ОтветитьУдалить
  3. А вы не могли бы записать видео? хочется посмотреть какие у вас настройки в конфиг файлах да и вообще как вы это делаете. а то ни чего не получается

    ОтветитьУдалить
  4. Вот она ошибка которая меня просто убивает [warn] Init: Session Cache is not configured [hint: SSLSessionCache]

    ОтветитьУдалить
  5. LoadModule socache_shmcb_module modules/mod_socache_shmcb.so

    ОтветитьУдалить
  6. Улыбнуло решение и замечание про грабли. Если в консоли выполнить команду dir /x , то будут выведены альтернативные имена папок и файлов, т.е. короткие имена, совместимые с программами консольного типа (которые не переваривают пробелы в именах). Собери путь из альтернативных имён, и пропиши в httpd-ssl.conf Получится примерно так:
    SSLSessionCache "shmcb:C:/PROGRA~2/APACHE~1/Apache2.2/logs/ssl_scache(512000)"

    ОтветитьУдалить
  7. Огромная благодарность автору статьи, всё понятно и доходчиво, настраивал по Win32 Апач "httpd-2.2.22-win32-x86-openssl-0.9.8t.msi" Запустил с 1го раза))

    ОтветитьУдалить