Сервер переведён на принудительное перенаправление всего что можно на https, сертификат экзотично иероглифичный от wosign.com получить тут для прохождения процедуры нужен полный контроль за доменной почтой, так как для подтверждения будут высылаться письма, например на contact@whois webmaster@ postmaster@ hostmaster@ admin@ administrator@ либо можно выбрать способ верификации с размщением html странички в корневой дирректории вебсервера (я делал через почту, работает оперативно, но консольный mail из FreeBSD не справляется Content-Type: text/html; charset=utf-8 Сontent-Transfer-Encoding: base64, так что выручил mutt). Так же не морочился с генерацией мастер ключа у себя и отдался на волю "Generated by the system".
Есть небольшая проблема, судя по диагностике, у данного сертификационного центра нет серверов для поддержания IPv6-only инфраструктуры, но пожалуй это может быть проблемой только для совсем уж гиков, на дуалстеке работает нормально.
В итоге, после заполнения всех полей, и верификации доменов, вы получите письмо с ссылкой на скачивание запароленного архива, качаем к себе, распаковываем при помощи archivers/unzip (системный не умеет пароли), получаем
-rw-r--r-- 1 root wheel 5913 Jun 24 18:17 for Apache.zip -rw-r--r-- 1 root wheel 6212 Jun 24 18:17 for IIS.zip -rw-r--r-- 1 root wheel 5548 Jun 24 18:17 for Nginx.zip -rw-r--r-- 1 root wheel 6249 Jun 24 18:17 for Other Server.zip -rw-r--r-- 1 root wheel 4897 Jun 24 18:17 for Tomcat.zip
Как видно из названий, каждый архив содержит набор для какого либо сервера, с содержимым не всё ясно, видно процедура периодически меняется, а документация как обычно не актуализируется, на настоящий момент, я настраивал lighttpd (Other Server) ещё раз напоминаю, ключи на месте не генерировал (прийдёт в архиве)
Archive: ../for Other Server.zip extracting: 4_user_bsdnir.info.key extracting: 3_user_bsdnir.info.crt extracting: 2_issuer_Intermediate.crt extracting: 1_cross_Intermediate.crt
То есть, имеем ключ .key и три сертификата .crt для удобства сложить всё можно например в /usr/local/etc/lighttpd/ssl/bsdnir.info/
1 cat 3_user_bsdnir.info.crt 2_issuer_Intermediate.crt 1_cross_Intermediate.crt > bsdnir.info.crt # "сливаем" все сертификаты в один, важен порядок по убыванию цифры
2 cat 3_user_bsdnir.info.crt 4_user_bsdnir.info.key > bsdnir.info.pem # "сливаем" с ключом
3 openssl dhparam -out dhparams.pem 4096 # генерируем ключ для Diffie-Hellman (не обязательно, но без него нынче сертификат считается слабым, вроде не выше B+), генерируется долго, вроде можно динамически подключить https://git.openssl.org/gitweb/?p=openssl.git;a=tree;f=apps [1]
4 chmod 0400 bsdnir.info.crt # ограничиваем права, сервер у нас стартует рутом, так что владельца можно не менять
5 chmod 0400 bsdnir.info.pem
6 chmod 0400 dhparams.pem
Дальше начинаем надругаться над конфигом, будем исходить из того, что что то у нас уже было настроено, для работы по https, возможно более 1 домена и IP адреса, а то и всяких IPv6
$HTTP["scheme"] == "https" { $HTTP["host"] =.... .... } ### SSL enable ### var.ssl-cl = "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK" $SERVER["socket"] == ":443" { # повторяем данную секцию для всех IP, которые будем обслуживать ssl.engine = "enable" ssl.ca-file = "/usr/local/etc/lighttpd/ssl/bsdnir.info/bsdnir.info.crt" ssl.pemfile = "/usr/local/etc/lighttpd/ssl/bsdnir.info/bsdnir.info.pem" ssl.dh-file = "/usr/local/etc/lighttpd/ssl/bsdnir.info/dhparams.pem" ssl.ec-curve = "secp384r1" ssl.honor-cipher-order = "enable" # Disable vulnerable shit #ssl.use-compression = "disable" # в моей версии ругается на неверный параметр [2] ssl.disable-client-renegotiation = "enable" ssl.use-sslv2 = "disable" ssl.use-sslv3 = "disable" ssl.cipher-list = var.ssl-cl } # Enable HSTS server.modules += ( "mod_setenv" ) $HTTP["scheme"] == "https" { setenv.add-response-header = ("Strict-Transport-Security" => "max-age=15724800") } # Redirect HTTP to HTTPS $HTTP["scheme"] == "http" { $HTTP["host"] =~ ".*" { url.redirect = (".*" => "https://%0$0") } }
Полезно ознакомится:
http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs_SSL официальная документация, посмотреть все ключи и общие сведения зачем и как работает
https://wiki.mozilla.org/Security/Server_Side_TLS посмотреть рекомендуемые значения переменных, вот ту длинную строку var.ssl-cl например
https://wiki.nyr.es/wosign_free_ssl_on_lighttpd примерно то же что я описываю, по английски, и там видно что с сертификатами было раньше не так (возможно способ до сих пор работает)
[1] https://blog.surfnet.nl/en/pimp-your-ssllabs-rating/ рекомендации по тому какие директивы положительно сказываются на уровне сертификата (в основном тут учтены)
https://raymii.org/s/articles/HTTP_Public_Key_Pinning_Extension_HPKP.html насколько понимаю. публикация ключей,для lighttpd не реализовано, и будет в лучшем случае в 2 http://redmine.lighttpd.net/issues/2278
https://reconfigu.re/article/ssl-pandemonium-with-lighttpd хорошо продемонстрировало как переработать имеющийся конфиг
[2] https://raymii.org/s/tutorials/Strong_SSL_Security_On_lighttpd.html советует не отчаиваться и просто не включать ZIP у openssl
https://www.ssllabs.com/ssltest/ ну и проверить, как оно вышло то