1. Какую проблему решали
У нас в компании был обычный сайт, и он не поддерживал защищенное TLS-соединение. Руководство поставило задачу получить SSL сертификат и установить его на сайт. И сделать это нужно было бесплатно или с минимальными вложениями.
2. Как решали
Изучив предложения на рынке, мы поняли, что предложений по подписанию SSL сертификатов достаточно много и все они отличаются по цене. Но нами было найдено бесплатное решение, которое поддерживалось практически всеми браузерами, - letsencrypt. Для получения сертификата мы установили letsencrypt с официального сайта и получили сертификат в бесплатном режиме. Также добавили letsencrypt renew в crontab, чтобы сертификат автоматически обновлялся по расписанию.
Но мы не остановились на достигнутом и решили получить уровень A в тестировании ssl на сайте ssllabs.com. Для этого мы воспользовались сервисом https://ssl-config.mozilla.org и сгенерировали конфигурационный файл для nginx. Он получился следующим:
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
ssl_certificate /path/to/signed_cert_plus_intermediates;
ssl_certificate_key /path/to/private_key;
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m; # about 40000 sessions
ssl_session_tickets off;
# modern configuration
ssl_protocols TLSv1.3;
ssl_prefer_server_ciphers off;
# HSTS (ngx_http_headers_module is required) (63072000 seconds)
add_header Strict-Transport-Security "max-age=63072000" always;
# OCSP stapling
ssl_stapling on;
ssl_stapling_verify on;
# verify chain of trust of OCSP response using Root CA and Intermediate certs
ssl_trusted_certificate /path/to/root_CA_cert_plus_intermediates;
# replace with the IP address of your resolver
resolver 127.0.0.1;
}
Как итог, получили значение A после тестирования.
3. Выводы
Бесплатный сертификат можно получить через letsencrypt. Для тестирования настроек SSL можно использовать ssllabs.com. Для генерации конфигурации для веб-сервера можно использовать https://ssl-config.mozilla.org/.