Задача

Как сконфигурировать и получить SSL сертификат для сайта A+ в роутере при помощи Let's Encrypt.

Требования

Необходимо иметь зарегистрированное доменное имя, например, mydomen.pp и открытые порты на роутере 80 и 443.

Установка

Первоначально устанавливаем

opkg install  ca-certificates curl  nginx openssl-util php7 php7-cli

Далее

cd /opt/etc/nginx и скачиваем < a href="https://curl.haxx.se/docs/caextract.html" target="_blank"> cacert.pem.

Устанавливаем

curl --cacert cacert.pem -O https://raw.githubusercontent.com/lukas2511/dehydrated/master/dehydrated

При 60 ошибке curl необходимо установить путь к сертификату cacert.pem в файле /opt/etc/php.ini, вида

curl.cainfo = "/opt/etc/nginx/certs/cacert.pem"

Далее

mkdir -p /opt/share/nginx/html/.well-known/acme-challenge

и создаем файл config, который содержит

echo WELLKNOWN="/opt/share/nginx/html/.well-known/acme-challenge" > config
# Размер для приватных ключей
echo KEYSIZE="2048" >> config
# Каталог для расположения ключей
echo CERTDIR="${BASEDIR}/certs" >> config
# Путь к сертификатам  cacert.pem
echo CURL_OPTS="--cacert cacert.pem" >> config
# Ваш контактный  email
echo CONTACT_EMAIL=123456789@gmail.com >> config

Создаем файл с именами Вашего домена

echo mydomen.pp www.mydomen.pp > domains.txt

Далее

nginx -s  reload
chmod +x dehydrated 
# регистрация
./dehydrated --register --accept-terms
# генерация ключей 
./dehydrated -c

Если все верно, то сертификаты будут находится в каталоге /opt/etc/nginx/certs.

Дальше сгенерируем ключ Diffie-Hellman (это достаточно длительная процедура)

openssl dhparam -out dhparams.pem 2048

И отредактируем файлы nginx.conf и default.

nginx.conf

…
include default;

}

default


# путь с сертификатам
ssl_dhparam /opt/etc/nginx/dhparam.pem;
ssl_certificate /opt/etc/nginx/certs/MYDOMEN.PP/fullchain.pem;
ssl_certificate_key /opt/etc/nginx/certs/MYDOMEN.PP/privkey.pem;

server {

    # Ваше имя сервера
    server_name MYDOMEN.PP;

     listen  443 ssl;

     ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
     ssl_prefer_server_ciphers on;

      ssl_ciphers          EECDH+AES128:EECDH+AES256:EECDH+3DES:RSA+AES128:RSA+AES256:RSA+3DES:!MD5;

    ssl_stapling         on;
    ssl_stapling_verify  on;
    ssl_session_cache    shared:SSL:10m;
    ssl_session_timeout  5m;

resolver            8.8.8.8;

add_header          X-Xss-Protection "1";
add_header          X-Frame-Options SAMEORIGIN;
add_header          X-Content-Type-Options nosniff;
add_header Strict-Transport-Security "max-age=31536000; includeSubdomains";

    root /opt/share/nginx/html;
    index index.php;

    location / {

      try_files $uri $uri/ /index.php$args;
    }
 …
}

Перегружаем nginx

/opt/etc/init.d/S80nginx restart

Настройка для обновления сертификатов

По умолчанию сертификаты Let's Encrypt действительны 3 месяца. Для автоматического продления сертификатов настроим выполнение запроса через cron для обновления сертификатов, например, раз в месяц.

Создадим файл dehyd с содержимым

#!/bin/sh
cd /opt/etc/nginx
./dehydrated -c
/opt/etc/init.d/S80nginx reload

И запишем задание в cron роутера, например,


0 0 1 * * root /jffs/sr/dehyd

где /jffs/sr/dehydrated — путь нахождения файла.

Проверка настроек

Проверка корректности цепочки сертификатов SSL Server Test .

Полезные ссылки

  1. Let's encrypt project - Let's Encrypt
  2. Quality SSL labs - SSL labs

Добавить комментарий

Следующая запись Предыдущая запись