Привет. Сегодня я покажу вам, как можно получить бесплатный ssl сертификат для вашего сервера. Поможет нам в этом проект под названием letsencrypt.
Конечно можно пойти более простым путем, и получить его, например при помощи сервиса startssl, у них то же есть бесплатные сертификаты, но почему то в последнее время, браузеры ругаются на сертификаты выпущенные startssl. Поэтому этот вариант я рекомендую, на данный момент, не рассматривать.
И так, нам понадобиться — какой-нибудь дистрибутив Linux, в моем случае это Ubuntu Server 16.04 и какой-нибудь веб сервер, у меня это Apache. Так же у меня в Apache настроен домен test.mytechnote.ru.
И так, сперва включим https в apache:
a2enmod ssl a2ensite default-ssl service apache2 restart
Далее установим git и скачаем letsencrypt в папку /usr/local:
cd /usr/local apt install git git clone https://github.com/letsencrypt/letsencrypt
Дальше перейдем в папку letsencrypt и выполним команду на запрос сертификата
cd letsencrypt/ ./letsencrypt-auto certonly --apache -d test.mytechnote.ru
Параметров -d может быть несколько, не обязательно 1, этот параметр указывает на то для какого домена должен быть получен сертификат, т.е. в моем случае, можно было бы добавить еще параметр -d www.test.mytechnote.ru и сертификат был бы валиден и для test.mytechnote.ru и для www.test.mytechnote.ru. Для успешного получения сертификата, доменное имя должно быть привязано к вашему серверу, что бы во время получения, прошла проверка сертификата.
При первом выполнении команды автоматически будут установлены зависимости.
Так же будет предложено ввести email адрес для восстановления ключа, в случае чего:
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel):[email protected]
Соглашаемся с условиями:
-------------------------------------------------------------------------------
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf. You must agree
in order to register with the ACME server at
https://acme-v01.api.letsencrypt.org/directory
-------------------------------------------------------------------------------
(A)gree/(C)ancel: A
Соглашаемся или отказываемся от рассылки:
-------------------------------------------------------------------------------
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 EFF and
our work to encrypt the web, protect its users and defend digital rights.
-------------------------------------------------------------------------------
(Y)es/(N)o: N
После чего, если сервер доступен по https сертификат будет создан. Сообщение об успешном создании:
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/test.mytechnote.ru/fullchain.pem. Your cert will
expire on 2017-08-10. To obtain a new or tweaked version of this
certificate in the future, simply run letsencrypt-auto again. To
non-interactively renew *all* of your certificates, run
"letsencrypt-auto 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
Теперь настроим https для нашего виртуального хоста и подклюим ему сертификаты letsencrypt. У меня конфигурация для test.mytechnote.ru хранится в дефолтном конфиге, у вас может отличаться путь. В общем правим файл, где лежит ваш виртуальных хост:
nano /etc/apache2/sites-available/000-default.conf
Здесь можно скопировать все что касается вашего сайта, и висит на 80ом порту, изменить порт на 443 и добавить следующие строчки:
SSLEngine On
SSLCertificateFile /etc/letsencrypt/live/test.mytechnote.ru/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/test.mytechnote.ru/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/test.mytechnote.ru/chain.pem
<Location />
SSLRequireSSL On
SSLVerifyClient optional
SSLVerifyDepth 1
SSLOptions +StdEnvVars +StrictRequire
</Location>
Так же, если вы хотите, что бы все запросы с http сайта перенаправлялись на https, то в секцию с сайтом на 80ом порту можно добавить сточки:
<Location />
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R]
</Location>
И после чего включить mod_rewrite:
a2enmod rewrite
В итоге, в моем случае, итоговый вид дефолтного файла следующий:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot /var/www/test.mytechnote.ru
ServerName test.mytechnote.ru
DirectoryIndex index.html
ServerAlias www.test.mytechnote.ru
ErrorLog ${APACHE_LOG_DIR}/test.mytechnote.ruerror.log
CustomLog ${APACHE_LOG_DIR}/test.mytechnote.ru.access.log combined
<Location />
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R]
</Location>
</VirtualHost>
<VirtualHost *:443>
ServerAdmin [email protected]
DocumentRoot /var/www/test.mytechnote.ru
ServerName test.mytechnote.ru
DirectoryIndex index.html
ServerAlias www.test.mytechnote.ru
ErrorLog ${APACHE_LOG_DIR}/test.mytechnote.ru-error.log
CustomLog ${APACHE_LOG_DIR}/test.mytechnote.ru-access.log combined
SSLEngine On
SSLCertificateFile /etc/letsencrypt/live/test.mytechnote.ru/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/test.mytechnote.ru/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/test.mytechnote.ru/chain.pem
<Location />
SSLRequireSSL On
SSLVerifyClient optional
SSLVerifyDepth 1
SSLOptions +StdEnvVars +StrictRequire
</Location>
</VirtualHost>
Теперь перезагрузим apache:
/etc/init.d/apache2 restart
Осталось только настроить cron на перевыпуск сертификата и все готово, для этого набираем:
crontab -e
и в конец файла добавляем строчку:
0 0,12 * * * /bin/bash /usr/local/letsencrypt/letsencrypt-auto renew
Задание запускается дважды в сутки, что бы не случилось ситуации, что что то пошло не так, и сертификат стал просроченным.
Теперь можно удостоверится в браузере, что всё работает, и нет ошибки сертификата:
- Войдите или зарегистрируйтесь, чтобы отправлять комментарии
Поделитесь статьей с друзьями в соц. сетях, возможно, она будет им полезна.
Если вам помогла статья, вы можете >>отблагодарить автора<<