Все переходят на SSL. Но порой платить деньги за то, чтобы пощупать не хочется. Очень смешно, но таковы реалии. Люди не могут понять, почему стоимость файлика часто превышает стоимость сервера. Ну да ладно. Приступим лучше к настройке NGINX с сертификатом, который мы получим бесплатно!!!

Есть такой сервис, как letencrypt. Он выдает сертификаты для домена. Пока Wildcard Certificates не выдаются. Но не печаль. В планах на январь 2018 добавить эту возможность. Важное ограничение – выдаются такие сертификаты на 90 дней. После надо либо перезаказать, либо отказаться. Для продления, есть API, как и для заказа. Хотя можно работать и с не валидным. Но тогда зачем напрягаться, ведь можно пользоваться самоподписанным?

Так, вроде бы все обсудили. Ах, нет. Будем все производить на CentOS 6.9. Версия NGINX в данном случае не сильно играет роль, да и вообще, может стоять Apache.

Приступим.

  1. Для начала, нам нужно взять последнюю версию letencrypt. Идем на гитхаб и клонируем репу.
cd /usr/local
git clone https://github.com/letsencrypt/letsencrypt
  1. Открываем порт на фаерволе. Лучше сразу.
  2. Останавливаем NGINX/Apache
  3. Переходим в директорию letsencrypt
cd /usr/local/letsencrypt
  1. Генерируем сертификаты
./letsencrypt-auto certonly --standalone -d your_domain.ua -d www.your_domain.ua

Или только для одного

./letsencrypt-auto certonly --standalone -d your_domain.ua

При первом запуске установятся необходимые пакеты. Надо будет указать email и ответить на вопрос, желаете ли Вы поделится своими данными. После если все ОК, то будет сформирован сертификат и поздравление:

Performing the following challenges:

tls-sni-01 challenge for your_domain.ua

Waiting for verification...

Cleaning up challenges

IMPORTANT NOTES:

 - Congratulations! Your certificate and chain have been saved at:

   /etc/letsencrypt/live/your_domain.ua/fullchain.pem

   Your key file has been saved at:

   /etc/letsencrypt/live/your_domain.ua/privkey.pem

   Your cert will expire on 2018-01-11. 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

Тут указаны пути, куда сохранились сертификаты и прочая инфа. Полезно, так что прочитайте.

Если все же выдало ошибку, проверьте, может что-то блокирует 80 порт.

  1. Что бы получить оценку A+ нужно будет сгенерировать новый DH (Diffie-Hellman cipher) key. Если Вы параноик, а большинство просто делают из принципа – больше, не хуже, то генерируем ключ в 4096 бит.
mkdir /etc/nginx/ssl
cd /etc/nginx/ssl
openssl dhparam -out dhparams.pem 4096
  1. Теперь у нас есть все, для работы сайта по https. Добавляем в конфиг NGINX:
  1. Запускаем NGINX, заходим на сайт по HTTPS и радуемся. Конечно это еще не все. Я долго не буду рассказывать о том, как перекидывать с http на https. Но покажу свой скрипт обновления сертификата. Он не идеален, но на первое время мне его хватает. А как говорится, нет ничего более постоянного, чем что-то временное.

Обновление происходит этой командой

letsencrypt-auto certonly -a webroot --agree-tos --renew-by-default --webroot-path="web_site_path" -d "domain"

Для тех кто не понял:

—webroot-path – путь к webroot заданный в настройках nginx

-d – имя домена your_domain.ua

Для самого скрипта потребуется bc, которая входит в состав CentOS и является калькулятором. Нужно для того, чтобы не мучать сервис letsencrypt.

После прописываем в крон, на запуск каждую неделю и все.

@weekly  /usr/local/bin/lets-cert-renew your_domain.ua >> /var/log/ your_domain.ua 2>&1

Нужна помощь в настройке SSL для домена? Обращайтесь [email protected]