Let’s Encrypt — это центр сертификации, упрощающий получение и установку бесплатных сертификатов TLS/SSL, обеспечивая шифрование HTTPS на веб-серверах. Это упрощает процесс посредством предоставления программного клиента Certbot, который пытается автоматизировать большинство необходимых шагов (или все шаги). В настоящее время весь процесс получения и установки сертификата полностью автоматизирован — как в Apache, так и Nginx.
В этом руководстве мы будем использовать Certbot для получения бесплатного сертификата SSL для Apache в Ubuntu 20.04, и убедимся, что сертификат настроен на автоматическое обновление.
В этом обучающем руководстве используется отдельный файл виртуального хоста вместо файла конфигурации Apache по умолчанию — для настройки веб-сайта, который будет защищен Let’s Encrypt. Рекомендуется создавать новые файлы виртуального хоста Apache для каждого домена, размещенного на сервере, т. к. это позволяет избежать распространенных ошибок, и при этом поддерживаются файлы конфигурации по умолчанию в качестве резервной настройки.
Для данного обучающего руководства вам потребуется следующее:
Один сервер Ubuntu 20.04, настроенный в соответствии с обучающим руководством Начальная настройка сервера Ubuntu 20.04, включая пользователя без прав root с привилегиями sudo и брандмауэр.
Зарегистрированное полное доменное имя. Во всем обучающем руководстве мы будем использовать your_domain в качестве примера. Вы можете купить доменное имя на Namecheap, получить его бесплатно на Freenom или воспользоваться услугами любого предпочитаемого регистратора доменных имен.
На вашем сервере должны быть настроены обе нижеследующие записи DNS. В руководстве Введение в DigitalOcean DNS содержится подробная информация по их добавлению.
your_domain
указывает на публичный IP-адрес вашего сервера.www.your_domain
указывает на публичный IP-адрес вашего сервера.Apache, установленный в соответствии с указаниями руководства Установка Apache в Ubuntu 20.04. Убедитесь, что у вас имеется файл виртуального хоста для вашего домена. В этом обучающем руководстве мы будем использовать /etc/apache2/sites-available/your_domain.conf
в качестве примера.
Для получения сертификата SSL с помощью Let’s Encrypt нам сначала необходимо установить программное обеспечение Certbot на вашем сервере. Для этого мы будем использовать репозитории пакетов Ubuntu по умолчанию.
Нам нужны два пакета: certbot
и python3-certbot-apache
. Последний — плагин, который интегрирует Certbot с Apache, позволяя автоматизировать получение сертификата и настройку HTTPS на веб-сервере с помощью одной команды.
- sudo apt install certbot python3-certbot-apache
Чтобы подтвердить установку, нажмите Y
, а затем ENTER
.
Теперь Certbot установлен на сервере. На следующем шаге мы будем проверять конфигурацию Apache, чтобы убедиться, что ваш виртуальный хост настроен корректно. Благодаря этому пользовательский скрипт certbot
сможет выявлять ваши домены и изменять настройку вашего веб-сервера для автоматического использования нового сертификата SSL.
Чтобы автоматически получить и настроить SSL для вашего веб-сервера, Certbot должен найти корректный виртуальный хост в ваших файлах конфигурации Apache. Имена доменов ваших серверов будут получены из директив ServerName
и ServerAlias
, определенных в блоке конфигурации VirtualHost
.
Если вы выполнили шаг по настройке виртуального хоста из руководства по установке Apache, то у вас уже должен быть настроен блок VirtualHost для вашего домена в /etc/apache2/sites-available/your_domain.conf
с ServerName
, а также правильно заданные директивы ServerAlias
.
Чтобы проверить это, откройте для вашего домена файл виртуального хоста с помощью nano
или предпочитаемого текстового редактора:
- sudo nano /etc/apache2/sites-available/your_domain.conf
Найдите существующие строки ServerName
и ServerAlias
. Они должны выглядеть следующим образом:
...
ServerName your_domain
ServerAlias www.your_domain
...
Если вы уже настроили параметры ServerName
и ServerAlias
, то можете выйти из текстового редактора и переходить к следующему шагу. Если вы используете nano
, то можете выйти, введя CTRL+X
, а затем Y
и ENTER
для подтверждения.
Если конфигурация вашего виртуального хоста не соответствует данному примеру, обновите ее соответствующим образом. После завершения сохраните файл и закройте редактор. Затем запустите следующую команду для подтверждения сделанных изменений:
- sudo apache2ctl configtest
Должен быть получен ответ Syntax OK
. Если появится сообщение об ошибке, повторно откройте файл виртуального хоста и проверьте, нет ли опечаток или отсутствующих символов. Когда синтаксис файла конфигурации станет корректным, перезагрузите Apache, чтобы изменения вступили в силу:
- sudo systemctl reload apache2
С этими изменениями Certbot сможет найти корректный блок VirtualHost и обновить его.
Далее мы обновим брандмауэр, чтобы разрешить трафик HTTPS.
Если у вас включен брандмауэр UFW в соответствии с предварительными требованиями, то вам потребуется изменить настройки для поддержки трафика HTTPS. После установки Apache зарегистрирует несколько разных профилей приложений UFW. Мы можем использовать профиль Apache Full, чтобы разрешить трафик HTTP и HTTPS на сервере.
Чтобы узнать, какой трафик разрешен на сервере, можно использовать следующую команду:
- sudo ufw status
Если вы следовали указаниям в одном из наших руководств по установке Apache, то результат должен выглядеть примерно следующим образом, т.е. сейчас должен быть разрешен только трафик HTTP через порт 80
:
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Apache ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Apache (v6) ALLOW Anywhere (v6)
Чтобы дополнительно активировать трафик HTTPS, разрешите профиль Apache Full и удалите лишний профиль Apache:
- sudo ufw allow 'Apache Full'
- sudo ufw delete allow 'Apache'
Теперь ваш статус будет выглядеть следующим образом:
- sudo ufw status
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Apache Full ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Apache Full (v6) ALLOW Anywhere (v6)
Теперь вы готовы запустить Certbot и получить сертификаты.
Certbot предоставляет широкий выбор способов получения сертификатов SSL с помощью плагинов: Плагин Apache изменит конфигурацию Apache и перезагрузит ее, когда это потребуется. Для использования этого плагина введите следующую команду:
- sudo certbot --apache
Этот скрипт предложит вам ответить на ряд вопросов, чтобы настроить сертификат SSL. Сначала он запросит действующий адрес электронной почты. Это письмо будет использоваться для уведомлений о продлении и безопасности:
OutputSaving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator apache, Installer apache
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): you@your_domain
После предоставления действующего адреса электронной почты нажмите ENTER
, чтобы перейти к следующему шагу. Затем вам будет предложено подтвердить согласие с условиями обслуживания Let’s Encrypt. Вы можете подтвердить это, нажав A
, а затем ENTER
:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel: A
Далее вам будет предложено предоставить организации Electronic Frontier Foundation свой адрес электронной почты, чтобы получать новости и иную информацию. Если не хотите подписываться на их рассылку, то введите N
. Если хотите — введите Y
. Затем нажмите ENTER
, чтобы перейти к следующему шагу.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing 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: N
На следующем шаге вам будет предложено сообщить Certbot, для каких доменов вы хотите активировать HTTPS. Указанные имена доменов автоматически получены из конфигурации вашего виртуального хоста Apache, поэтому важно убедиться, что настройки ServerName
и ServerAlias
вашего виртуального хоста правильные. Если хотите активировать HTTPS для всех указанных доменных имен (рекомендуется), то можно оставить командную строку пустой и нажать ENTER
, чтобы продолжить. В противном случае выберите домены, для которых вы хотите активировать HTTPS, указав все подходящие номера через запятую и/или пробелы, и нажмите ENTER
.
Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: your_domain
2: www.your_domain
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel):
Вывод будет выглядеть следующим образом:
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for your_domain
http-01 challenge for www.your_domain
Enabled Apache rewrite module
Waiting for verification...
Cleaning up challenges
Created an SSL vhost at /etc/apache2/sites-available/your_domain-le-ssl.conf
Enabled Apache socache_shmcb module
Enabled Apache ssl module
Deploying Certificate to VirtualHost /etc/apache2/sites-available/your_domain-le-ssl.conf
Enabling available site: /etc/apache2/sites-available/your_domain-le-ssl.conf
Deploying Certificate to VirtualHost /etc/apache2/sites-available/your_domain-le-ssl.conf
Далее вам будет предложено выбрать, перенаправлять трафик HTTP на HTTPS или нет. На практике это означает, что те, кто посещает ваш веб-сайт через незашифрованные каналы (HTTP), будут автоматически перенаправляться на адрес HTTPS вашего веб-сайта. Выберите 2
, чтобы активировать перенаправление, или 1
, если хотите сохранить и HTTP, и HTTPS в качестве отдельных методов доступа к вашему веб-сайту.
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2
После этого шага конфигурация Certbot будет завершена, и вам будут предоставлены последние замечания о новом сертификате, о том, где находятся полученные файлы, и о том, как протестировать вашу конфигурацию при помощи внешнего инструмента, который анализирует подлинность вашего сертификата:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully enabled https://your_domain and
https://www.your_domain
You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=your_domain
https://www.ssllabs.com/ssltest/analyze.html?d=www.your_domain
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/your_domain/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/your_domain/privkey.pem
Your cert will expire on 2020-07-27. 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"
- Your account credentials have been saved in your Certbot
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Certbot so
making regular backups of this folder is ideal.
- 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
Теперь ваш сертификат установлен и загружен в конфигурацию Apache. Попробуйте перезагрузить веб-сайт с помощью https://
, и посмотрите на индикатор безопасности в браузере. Он должен указывать, что ваш веб-сайт защищен надлежащим образом — как правило, на это указывает значок замка в адресной строке.
Вы можете использовать SSL Labs Server Test для проверки класса вашего сертификата и получения подробной информации о нем с точки зрения внешней службы.
На следующем (последнем) шаге мы протестируем функцию автоматического обновления Certbot, гарантирующую автоматическое обновление вашего сертификата до даты окончания его действия.
Сертификаты Let’s Encrypt действительны только в течение 90 дней. Это призвано стимулировать пользователей автоматизировать процесс обновления сертификатов, а также гарантировать, что сроки действия сертификатов, попавших в руки злоумышленников, будут истекать быстрее.
Пакет certbot
, который мы установили, обеспечивает обновление приложений посредством добавления скрипта обновления в /etc/cron.d
— им управляет служба systemctl
, которая называется certbot.timer
. Этот скрипт запускается дважды в день и автоматически обновляет любой сертификат, до истечения срока которого осталось менее 30 дней.
Чтобы проверить статус этой службы и убедиться, что она активна и запущена, можно использовать следующую команду:
- sudo systemctl status certbot.timer
Вывод будет выглядеть следующим образом:
Output● certbot.timer - Run certbot twice daily
Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: enabled)
Active: active (waiting) since Tue 2020-04-28 17:57:48 UTC; 17h ago
Trigger: Wed 2020-04-29 23:50:31 UTC; 12h left
Triggers: ● certbot.service
Apr 28 17:57:48 fine-turtle systemd[1]: Started Run certbot twice daily.
Чтобы протестировать процесс обновления, можно сделать запуск «вхолостую» с помощью certbot
:
- sudo certbot renew --dry-run
Если ошибок нет, то все в порядке. При необходимости Certbot обновит ваши сертификаты и перезагрузит Apache для получения изменений. Если процесс автоматического обновления когда-нибудь не выполнится, то Let’s Encrypt отправит сообщение на указанный вами адрес электронной почты с предупреждением о том, что срок действия сертификата подходит к концу.
В этом обучающем руководстве вы установили клиент Let’s Encrypt certbot
, настроили и установили сертификат SSL для своего домена и подтвердили, что служба автоматического обновления Certbot активна в systemctl
. Если возникнут дополнительные вопросы об использовании Certbot, то лучше всего начинать искать ответы в их документации.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!
Sign up for Infrastructure as a Newsletter.
Working on improving health and education, reducing inequality, and spurring economic growth? We'd like to help.
Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.
Hello. Can you help me? If i have a local domain name or IP address of server (like local chat or local apache2 server for inner structure, not for out Network), how can i configurate certbot to give me an SSL certs for local, not registered domain or IP address? Thanks a lot.