DT Wiki

SSL Сертификат

SSL (secure sockets layer — уровень защищённых cокетов) представляет собой криптографический протокол для безопасной связи. С версии 3.0 SSL заменили на TLS (transport layer security — безопасность транспортного уровня), но название предыдущей версии прижилось, поэтому сегодня под SSL чаще всего подразумевают TLS.

Цель протокола — обеспечить защищенную передачу данных. При этом для аутентификации используются асимметричные алгоритмы шифрования (пара открытый — закрытый ключ), а для сохранения конфиденциальности — симметричные (секретный ключ). Первый тип шифрования более ресурсоемкий, поэтому его комбинация с симметричным алгоритмом помогает сохранить высокую скорость обработки данных.

Получение сертификата

Выпустить SSL-сертификат можно самостоятельно сгенерировав через любой генератор, например, OpenSSL, такой канал связи вполне получится использовать для внутренних целей между устройствами своей сети. Но вот для использования на веб-сайте сертификат необходимо приобретать официально, чтобы в цепочке подтверждения сертификатов обязательно имелся корневой сертификат, браузеры не показывали сообщений о небезопасном соединении, а пользователи были спокойны за свои данные.
Так вот сейчас мы выпустим сертификат с помощью сервиса Let’s Encrypt — Это центр сертификации, предоставляющий бесплатные криптографические сертификаты X.509 для шифрования передаваемых через интернет данных HTTPS и других протоколов, используемых серверами в Интернете. Процесс выдачи сертификатов полностью автоматизирован.

CertBot

В этом примере рассматриваем 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;
  }
}