Допустим, что есть сервер под управлением Ubuntu Server 9.10, на котором запущен lighttpd, обслуживающий один или несколько сайтов и в какой-то момент встала задача перевести один из обслуживаемых сайтов на работу по https. Далее будет показано как можно решить эту задачу.
Для начала создадим директорию, где будем хранить файлы ключей и сертификат, необходимые для корректной работы ssl-модуля lighttpd и перейдём в эту директорию:
mkdir -p /etc/lighttpd/keys && cd /etc/lighttpd/keys
Теперь сгенерируем файл приватного ключа:
openssl genrsa -out host.key 2048
Далее создадим запрос на подписку (CSR - Certificate Signing Request) нашего сертификата:
openssl req -new -nodes -key host.key -out host.csr
На запросы отвечаем в соответствии с имеющимися данными (то есть правду;)). Важно только чтобы в поле "Common Name" было имя вашего домена.
Далее используя CSR нужно получить SSL-сертификат в одном из центров сертификации или его официального представителя. Автор этих строк предпочитает покупать сертификаты вот тут. Разумеется можно подписать сертификат и самому, но тогда браузеры клиентов будут выдавать предупреждение безопасности, что скорее всего негативно скажется на отношении пользователей к ресурсу.
Получив сертификат сохраним его под именем "host.crt" в той же директории что и файл приватного ключа и запрос на подписку сертификата.
Следующим шагом создадим PEM-файл (X.509), который содержит в себе данные приватного ключа и сертификата нашего сервера:
cat host.key host.crt > host.pem
Подключим ssl-модуль для lighttpd:
lighty-enable-mod ssl
Приведём файл /etc/lighttpd/conf-enabled/10-ssl.conf к следующему виду:
$SERVER["socket"] == "0.0.0.0:443" { ssl.engine = "enable" ssl.pemfile = "/etc/lighttpd/keys/host.pem" }
Далее нужно настроить переадресацию всех запросов с http на https, чтобы посетитель, попавший на сайт по старый ссылке, автоматически был переключен на защищённое соединение.
Допустим что SSL-сертификат выдан для домена "example.com". Создадим файл "/etc/lighttpd/conf-enabled/20-redirect-ssl.conf" следующего содержания:
$HTTP["host"] == "example.com" { $HTTP["scheme"] == "http" { url.redirect = ("^/(.*)" => "https://example.com/$1") } }
И, наконец, снимаем комментарии (если это ещё не было сделано) в файле "/etc/lighttpd/lighttpd.conf" со строк, разрешающих использование модулей rewrite и redirect. После этого остаётся только перезапустить веб-сервер:
invoke-rc.d lighttpd restart
На этом всё. Приятной работы!
morbo 2010-03-28 17:56:14 (#)