Имеем сервер на Ubuntu Server 10.10, на котором запущен lighttpd. Нам необходимо настроить работу с одним из виртуалхостов через https. Рассмотрим, как решить эту задачу.

 

Создаем сертификаты SSL

Создадим директорию, где будем хранить файлы ключей и сертификат, необходимые для корректной работы 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" в той же директории что и файл приватного ключа и запрос на подписку сертификата.

 

Если мы все же решили сэкономить и сделать самоподписанный сертификат, сгенерируем его файл ключа следующей командой:

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout host.key -out host.crt

 

По итогу в каталоге /etc/lighttpd/keys должны лежать два файла: host.crt и host.key

Создаем PEM файл

Следующим шагом создадим PEM-файл (X.509), который содержит в себе данные приватного ключа и сертификата нашего сервера:

cat host.key host.crt > host.pem

Подключение ssl-модуля lighttpd

Подключим 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

Далее нужно настроить переадресацию всех запросов с 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

На этом всё.