Let’s Encrypt - это новый центр сертификации, который предоставляет бесплатные сертификаты SSL (до определенного ограничения в неделю). Примерно месяц назад он вышел из бета-версии и поддерживается широким спектром браузеров.

Certbot - официальный клиент Let's Encrypt, разработанный Electronic Frontier Foundation. Это делает автоматическое получение и развертывание сертификатов SSL / TLS для вашего веб-сервера относительно простым процессом.

Давайте начнем.

Шаг №1

Убедитесь, что вы открыли для всех порты 80 (HTTP) и 443 (HTTPS) в группе безопасности вашего экземпляра. Certbot будет использовать это для установления соединений при создании ваших сертификатов.

Обратите внимание, что я потратил слишком много времени, чтобы выяснить, почему я не могу сгенерировать сертификат, а единственная проблема заключалась в том, что я не открыл порт 443 в моей группе безопасности экземпляра EC2.

Шаг 2

Настройте запись CNAME своего домена так, чтобы она указывала на общедоступный DNS вашего экземпляра EC2.

Шаг 3

Установите Certbot на свой экземпляр. В зависимости от вашей операционной системы и сервера вы можете узнать, как его установить, на домашней странице Certbot. Для NGINX в Ubuntu 14.04 используйте this.

wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto

Выполните эту команду в своем домашнем каталоге:

/home/ubtuntu

Шаг # 4

Остановите все существующие серверы, работающие на портах 80 и 443, поскольку они используются Certbot для проверки вашего домена и создания сертификатов.

Вы можете перезапустить эти серверы после завершения создания сертификатов.

Шаг 5

Выполните следующую команду, чтобы сгенерировать сертификаты для вашего домена:

./certbot-auto certonly --standalone -d xyz.yourdomain.com

Используя этот подход, вы можете генерировать сертификаты для нескольких доменов.

Шаг № 6

Измените конфигурацию NGINX в /etc/nginx/nginx.conf, чтобы включить SSL:

http {
  ##
  # Logging Settings
  ##
  access_log /var/log/nginx/access.log;
  error_log /var/log/nginx/error.log;
  server {
    listen 80;
    server_name xyz.yourdomain.com;
    location / {
      # Redirect any http requests to https
      return 301 https://$server_name$request_uri;
    }
  }
  server {
    listen 443 ssl;
    server_name xyz.yourdomain.com;
    ssl_certificate /etc/letsencrypt/live/xyz.yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/xyz.yourdomain.com/privkey.pem;
    add_header Strict-Transport-Security “max-age=31536000”;
    
    location / {
      proxy_pass http://127.0.0.1:3000;
    }
  }
}

Заголовок Strict-Transport-Security (HSTS) гарантирует, что любые внутренние ссылки, которые не являются HTTPS, будут автоматически перенаправлены на версию HTTPS во время сеанса HTTPS.

Шаг № 7

Наконец, перезагрузите конфигурацию NGINX:

sudo service nginx reload

Поздравляю! Ваш сайт xyz.example.com теперь успешно работает по HTTPS.

ПРИМЕЧАНИЕ. Сертификаты Let's Encrypt действительны только в течение 3 месяцев после выпуска. Так что каждые 3 месяца требуется продление. Вот как вы можете автоматизировать это с помощью задания cron.

Если этот пост вам помог, нажмите кнопку с сердечком ниже. 😄 А если нет, оставьте комментарий, чтобы рассказать мне, как я могу это исправить.

PS: Спасибо Нарендре Н. Шетти за корректуру и предложения.

Каран Таккар - руководитель фронтенда в Crowdfire - ваш супер-умный помощник по маркетингу. Его статья ранее была размещена в The Huffington Post. Он любит пробовать новые технологии в свободное время и создал Tweetify (используя React Native) и Show My PR’s (используя Golang).

Другие статьи, написанные им: