функционирует, однако обратиться по протоколу HTTPS вы еще не можете. Для этого вам нужно сконфигурировать виртуальные узлы, которые будут использовать протокол HTTPS. Но для начала необходимо настроить Apache для прослушивания порта 443 (это стандартный порт для протокола HTTPS). Добавьте в файл /etc/httpd/conf/httpd.conf следующие строки:
Listen 443
NameVirtualHost x.х.x.х:443
Теперь непосредственно приступите к созданию виртуального сервера, работающего по протоколу HTTPS, для чего продолжите редактирование файла /etc/httpd/conf/httpd.conf. Пример того, что необходимо при этом ввести, приведен в листинге 16.14. После этих обязательных директив вы можете конфигурировать свой виртуальный узел как обычно.
Листинг 16.14. Виртуальный HTTPS-сервер
<VirtualHost x.х.x.х:443>
# Эти строки нужны для поддержки SSL
SSLEngine on
SSLLogLevel warn
SSLOptions +StdEnvVars
SSLCertificateFile /usr/local/apache/conf/ssl.crt/server.crt
SSLCertificateKeyFile /usr/local/apache/conf/ssl.key/server.key
SSLLog /usr/local/apache/logs/ssl_engine.log
# --------------------------------------
ServerName www.dhsilabs.com
ServerAdmin [email protected]
DocumentRoot /var/httpd/www/html
ErrorLog /var/https/www/logs/error.log
</VirtualHost>
Теперь нужно перезапустить сервер httpd. При запуске Apache потребует ввести пароль. Если вы не хотите вводить его при каждом запуске системы, то перейдите в каталог, где находится файл ssl.key, и выполните следующие команды:
# cp server.key server.key.org
# openssl rsa -in server.key.org -out server.key
# chmod 400 server.key
Почти все готово! Теперь сервер не должен запрашивать пароль и будет работать в нормальном режиме.
Чтобы Apache по умолчанию стартовал с поддержкой SSL, исправьте в файле apachectl (он устанавливается в каталог /bin, /sbin или /usr/sbin, см. rpm -ql <пакет_Apache>) условие start на startold, a startssl на просто start. Затем, находясь в каталоге /usr/local/bin, установите ссылку openssl:
# ln -s /usr/local/ssl/bin/openssl openssl
16.10.3. Генерирование сертификатов
Сертификат гарантирует безопасное подключение к веб-серверам и/или удостоверяет личность владельца. Идентификация обеспечивается путем применения личного ключа, известного только пользователю данной системы. Когда пользователь посещает защищенный узел для передачи секретной информации (например, номеров кредитных карточек) по протоколу HTTPS, узел автоматически посылает ему сертификат.
Итак, давайте приступим к генерированию сертификатов. Для этого сначала выполните команду:
# openssl genrsa -des3 -out server.key 1024
Она создаст файл server.key. После этого вы должны подать запрос в службу верификации:
# openssl req -new -key server.key -out server.csr
Здесь вам придется ответить на вопросы. Если вы ошибетесь — ничего страшного, все можно будет повторить заново. В том случае, если запрос сгенерирован правильно, вы должны получить такую надпись:
You now have to send this Certificate Signing Request (CSR)
to a Certifying Authority (CA) for signing
Отвечая на вопросы, будьте очень внимательны — ваши ответы увидит весь мир.
По всем правилам вы сейчас должны подписать сертификат у сертифицирующей организации. Это услуга платная, и оказывает ее компания ThawTe (www.thawte.com), которую в России представляет www.solutions.rbc.ru. Бесплатно вы можете получить только «самоподписанный» сертификат. Скопируйте sign.sh из пакета mod_ssl в каталог с ключами и подпишите себя сами:
# openssl req -new -x509 -days 365 -key server.key -out server.csr
# ./sign.sh server.csr
Если на экране появится надпись
Now you have two files: server.key and server.crt.
These now can be used as following
то это означает, что все собрано правильно. Затем скопируйте новые файлы server.key и server.crt на место старых. Выполните команду make в каталоге с .crt-файлом.
В итоге вы получите полностью работающий Apache, защищенный SSL. Для сбора полной информации о работе SSL введите:
# openssl s_client -connect localhost:443 -state -debug
16.11. Пример файла httpd.conf
В этом параграфе приведен пример стандартной конфигурации сервера Apache. Каждому блоку листинга 16.15 сопутствуют комментарии, которые помогут вам разобраться с различными настройками сервера.
Листинг 16.15. Пример файла httpd.conf
##
## httpd.conf -- файл конфигурации сервера HTTP Apache
##
# ----------------------------------------------------
# Установите имя сервера
ServerName www.dhsilabs.com
ResourceConfig /dev/null
AccessConfig /dev/null
# Поддержка динамических разделяемых объектов (Dynamic
# Shared Object -- DSO)
