SSL (secure sockets layer — уровень защищённых cокетов) представляет собой криптографический протокол для безопасной связи. С версии 3.0 SSL заменили на TLS (transport layer security — безопасность транспортного уровня), но название предыдущей версии прижилось, поэтому сегодня под SSL чаще всего подразумевают TLS.
Цель протокола — обеспечить защищенную передачу данных. При этом для аутентификации используются асимметричные алгоритмы шифрования (пара открытый — закрытый ключ), а для сохранения конфиденциальности — симметричные (секретный ключ). Первый тип шифрования более ресурсоемкий, поэтому его комбинация с симметричным алгоритмом помогает сохранить высокую скорость обработки данных.
Выпустить SSL-сертификат можно самостоятельно сгенерировав через любой генератор, например, OpenSSL, такой канал связи вполне получится использовать для внутренних целей между устройствами своей сети. Но вот для использования на веб-сайте сертификат необходимо приобретать официально, чтобы в цепочке подтверждения сертификатов обязательно имелся корневой сертификат, браузеры не показывали сообщений о небезопасном соединении, а пользователи были спокойны за свои данные.
Так вот сейчас мы выпустим сертификат с помощью сервиса Let’s Encrypt — Это центр сертификации, предоставляющий бесплатные криптографические сертификаты X.509 для шифрования передаваемых через интернет данных HTTPS и других протоколов, используемых серверами в Интернете. Процесс выдачи сертификатов полностью автоматизирован.
В этом примере рассматриваем web сервер на базе Nginx и в нашем случае у хоста должно быть доменное имя и настроенный, рабочий хост.
Нам потребуется утилита certbot, устанавливаем
sudo apt install -y letsencrypt python3-certbot-nginx
Далее скармливаем её наш Nginx
sudo certbot --nginx
Далее заполняем информацию которую у нас просят
Enter email address (used for urgent renewal and security notices)
(Enter 'c' to cancel): username@domain.com
Пишем свой Email
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf. You must
agree in order to register with the ACME server. Do you agree?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: y
Отвечаем "y"
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing, once your first certificate is successfully issued, to
share your email address with the Electronic Frontier Foundation, a founding
partner of the Let's Encrypt project and the non-profit organization that
develops Certbot? We'd like to send you email about our work encrypting the web,
EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: y
Отвечаем "y", хотя здесь можно ответить и нет, т.е. "n"
Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: office.domain.com
2: plex.domain.com
3: wiki.domain.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel): 1
На этом этапе утилита определила, что у нас уже есть 3 сайта, выбираем нужный, в нашем случае 1 и получаем следующюю инфу о том, что мы успешно получили сертификат для сайта https://office.domain.com
Requesting a certificate for office.domain.com
Deploying Certificate to VirtualHost /etc/nginx/sites-enabled/office
No matching insecure server blocks listening on port 80 found.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully enabled https://office.domain.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/office.domain.com-0001/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/office.domain.com-0001/privkey.pem
Your certificate will expire on 2024-07-01. To obtain a new or
tweaked version of this certificate in the future, simply run
certbot again with the "certonly" option. To non-interactively
renew *all* of your certificates, run "certbot renew"
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
При этом, если мы заглянем в конфиг сайта,
sudo cat /etc/nginx/sites-enabled/office
то увидим, что утилитка дописала в него все что нужно
server {
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/office.domain.com-0001/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/office.domain.com-0001/privkey.pem; # managed by Certbot
server_name office.domain.com;
location / {
proxy_pass http://10.2.1.102;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_next_upstream error timeout http_502 http_503 http_504;
}
}