Вы здесь

Как получить бесплатный SSL сертификат.


Как получить бесплатный SSL сертификат.

Привет. Сегодня я покажу вам, как можно получить бесплатный 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

Задание запускается дважды в сутки, что бы не случилось ситуации, что что то пошло не так, и сертификат стал просроченным.

Теперь можно удостоверится в браузере, что всё работает, и нет ошибки сертификата:

Сертификат прошел проверку

Сертификат прошел проверку

1 2

Поделитесь статьей с друзьями в соц. сетях, возможно, она будет им полезна.


Если вам помогла статья, вы можете >>отблагодарить автора<<