Русская версия English version  
Статьи
Настройка веб-сервера Apache 2.0.x с поддержкой SSL.

Автор: Григорьев Михаил
Редакция от 24.11.2008

В организации существует сервер FreeBSD 7.0, на котором установлен веб-сервер Apache 2.2.x. Имеется сайт mysite.ru

Задача: Организовать доступ до веб-сервера по протоколу SSL.

1) Собираем Apache c поддержкой SSL

Для этого в файл /etc/make.conf пишем:

WITH_SSL_MODULES=yes
WITH_SSL_EXPERIMENTAL_ENGINE=yes

Далее:

cd /usr/ports/www/apache22
make install

2) Для запуска Apache c SSL в /etc/rc.conf пишем:

apache22_enable="YES"
apache2ssl_enable="YES"

3) Генерация ключей:

Для работы SSL нужны такие вещи как сертификат и ключи, которые должны лежать в путях SSLCertificateFile и SSLCertificateKeyFile

Создание пары ключей происходит так:

# openssl genrsa -des3 -out mysite.ru.key 1024

genrsa - указывает для библиотеки OpenSSL, что мы хотим сгенерировать пару ключей.
des3 - указывает, что секретный ключ должен быть зашифровани защищен ключевой фразой (pass phrase).
Опция out указывает, где следует сохранить результаты.
Число 1024 указывает длину генерируемых ключей в битах.

В процессе генерации ключей будет запрошена ключевая фраза для электронной почты с усовершенствованной защитой (PE pass phrase). Выберите безопасную фразу.
Ключевая фраза должна защитить секретный ключ, и ее будут просить ввести каждый раз, когда будет запускаться сервер Apache. Вы можете не защищать ключ.
Это удобно, поскольку будете избавлены от необходимости вводить ключевую фразу во время каждой перезагрузки сервера Apache. С другой стороны, это очень рискованно, поскольку взлом компьютера автоматически приведет и к взлому ключа. В любом случае, можно отказаться от защиты ключа, выключив генерацию ключевой фразы переключателем -des3, или выдав команду:

# openssl rsa -in mysite.ru.key -out mysite.ru.key.unsecure

Теперь создание запроса подписи сертификата. Для получения своего сертификата следует сертификационной службе запрос о выдаче сертификата:

# openssl req -new -key mysite.ru.key -out mysite.ru.csr

Сформированный файл запроса подписи сертификата сохранится файле mysite.ru.csr
Узнать о содержании сертификата можно узнать так:

# openssl req -noout -text -in mysite.ru.csr

В идеале, файл запроса подписи сертификата нужно отослать в сертификационную службу для обработки.
Verisign и Thawte - две наиболее известные сертификационные службы.
Но можно создать самоподписанный сертификат.

Создание сертификата с личной подписью:

# openssl x509 -req -days 700 -in mysite.ru.csr -signkey mysite.ru.key -out mysite.ru.cert

Следует скопировать файл сертификата mysite.ru.cert (или тот, что возвращен вам сертификационной службой) и файл с ключами mysite.ru.key (или mysite.ru.key.unsecure) в пути SSLCertificateFile и SSLCertificateKeyFile соответственно.

Например:
# cp mysite.ru.cert mysite.ru.key mysite.ru.key.unsecure /usr/local/etc/apache22/

Защитите файл ключей с помощью команды:

# chmod 400 /usr/local/etc/apache22/mysite.*

Виртуальные хосты, основанные на имени:
Часто спрашивают, как сделать, чтобы виртуальные хосты, основанные на имени (name-based virtual hosts), работали с SSL-протоколом?
Ответ: "Вы не сможете сделать это". Подобные хосты зависят от заголовка хоста (Host header) запроса HTTP-протокола, но проверка сертификата выполняется при установке соединения, т.е. протоколом SSL, когда HTTP-запрос еще не может быть послан. Существует протокол, служащий для обновления существующего подключения HTTP к TLS, но он не поддерживается текущими версиями браузеров (см. RFC 2817)

4) Добавляем настройки в файл конфигурации Apache:

В файл httpd.conf в конце пишем:

Include etc/apache22/httpd-ssl.conf

За основу httpd-ssl.conf можно взять мой файл настроек и исправить его под ваши нужды.
Скачать мой httpd-ssl.conf можно здесь

5) Рестартуем Apache командой:

# apachectl restart


NVStat Team © 2001 - 2016 Григорьев Михаил