The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Наиболее простой способ получения и обновления сертификатов Let's Encrypt
В рамках проекта dehydrated (https://github.com/lukas2511/dehydrated)
развивается shell-скрипт для автоматизации действий по получению
SSL-сертификатов в некоммерческом удостоверяющем центре Let's Encrypt
(https://letsencrypt.org/). Регистрация в сервисе, получение сертификата и его
последующее обновление предельно упрощено и требует только указания домена в
файле конфигурации, создания проверочного пути на сайте и запуска скрипта.

Пользователи RHEL/CentOS могут установить dehydrated из репозитория
EPEL:

   yum install dehydrated

Скрипт также присутствует в портах FreeBSD, в репозитории Fedora, Ubuntu и
многих других дистрибутивов Linux.

После установки прописываем домены, для которых необходим сертификат, в файле
/etc/dehydrated/domains.txt (можно определить несколько строк с разными
доменами для разных сертификатов):

   example.com www.example.com
   example2.com www.example2.com test.example2.com

В иерархии каталогов, в которых хранится контент example.com, создаём каталог
.well-known и подкаталог acme-challenge, в которых будет создан временный  файл
для проверки наличия контроля за сайтом:

   mkdir /var/www/htdocs/.well-known
   mkdir /var/www/htdocs/.well-known/acme-challenge

Указываем в файле конфигурации /etc/dehydrated/config каталоги и email для
связи, остальные параметры можно оставить по умолчанию:

   WELLKNOWN="/var/www/htdocs/.well-known/acme-challenge"
   CONTACT_EMAIL="example@examplemail.com"

Далее запускаем скрипт dehydrated с опцией "-с", которой достаточно для
большинства ситуаций. После первого запуска будет совершена регистрация в Let's
Encrypt, после чего будет инициирован процесс проверки путем генерации токена в
директории .well-known/acme-challenge с его последующим внешним запросом.

   dehydrated -c

   # INFO: Using main config file /etc/dehydrated/config
   # INFO: Using additional config file /etc/dehydrated/conf.d/local.sh
   Processing example.com with alternative names: www.example.com
    + Signing domains...
    + Creating new directory /etc/dehydrated/certs/example.com ...
    + Generating private key...
    + Generating signing request...
    + Requesting challenge for example.com...

Если проверка прошла удачно, готовые сертификаты будут сохранены в каталог
/etc/dehydrated/certs/example.com, который можно указать в настройках сервера.
Например, в nginx:


        ssl on;
        ssl_protocols        TLSv1 TLSv1.1 TLSv1.2;
        ssl_certificate      /etc/dehydrated/certs/example.com/fullchain.pem;
        ssl_certificate_key  /etc/dehydrated/certs/example.com/privkey.pem;
        ssl_session_cache    shared:SSL:10m;
        ssl_session_timeout  10m;
        ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
        ssl_prefer_server_ciphers on;
        ssl_dhparam /etc/nginx/ssl/dhparams.pem; # генерируется через "openssl dhparam -dsaparam -out /etc/nginx/ssl/dhparams.pem 2048"

В случае повторного запуска "dehydrated -c" будет выполнена проверка срока
действия сертификата и если до окончания его действия остаётся менее 30 дней
будет запрошено обновление. Для автоматизации поддержания сертификатов можно
добавить "dehydrated -c" в cron.


   dehydrated -c

   # INFO: Using main config file /etc/dehydrated/config
   # INFO: Using additional config file /etc/dehydrated/conf.d/local.sh
   Processing example.com with alternative names: www.example.com
    + Checking domain name(s) of existing cert... unchanged.
    + Checking expire date of existing cert...
    + Valid till Sep 11 03:53:00 2017 GMT (Longer than 30 days). Skipping renew!

После обновления сертификата не забудьте перезапустить HTTP-сервер:

   systemctl restart nginx

В случае необходимости получения сертификатов для нескольких доменов, следует
для всех сайтов позаботиться о пробросе проверочных запросов в каталог,
заданный в переменной WELLKNOWN (проверка осуществляется через запрос
http://example.com/.well-known/acme-challenge/m4g1C-t0k3n). Например, можно
добавить в конфигурацию хоста в nginx:


   location /.well-known/acme-challenge {
      alias /var/www/htdocs/.well-known/acme-challenge;
   }
 
08.07.2017
Ключи: letsencrypt, cert, crypt, ssl, https, sign, dehydrated / Лицензия: CC-BY
Раздел:    Корень / Администратору / Сетевые сервисы / WWW, Apache httpd / Ограничение доступа и ресурсов, безопасность

Обсуждение [ Линейный режим | Показать все | RSS ]
  • 1.1, PavelR (??), 11:05, 08/07/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Мои "заготовки" для веб-сервера


    ### NGINX

    ssl_certificate /etc/dehydrated/var/certs/domain.tld/fullchain.pem;
    ssl_certificate_key /etc/dehydrated/var/certs/domain.tld/privkey.pem;


    location /.well-known/acme-challenge/ {
      alias  /etc/dehydrated/var/acme-challenges/;
    }


    ### APACHE

    Alias /.well-known/acme-challenge/ /etc/dehydrated/var/acme-challenges/
    <Directory /etc/dehydrated/var/acme-challenges/>
            Options None
            AllowOverride None

            # Apache 2.x
            <IfModule !mod_authz_core.c>
                    Order allow,deny
                    Allow from all
            </IfModule>

            # Apache 2.4
            <IfModule mod_authz_core.c>
                    Require all granted
            </IfModule>
    </Directory>

     
  • 1.2, PavelR (??), 11:09, 08/07/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Скрипт быстрого конфигурирования (не забудьте задать ваш реальный E-Mail)


    ## КОНФИГУРАЦИЯ /etc/dehydrated/config
    cat <<-EOF >> /etc/dehydrated/config
    BASEDIR=/etc/dehydrated/var
    WELLKNOWN="\${BASEDIR}/acme-challenges"
    CONTACT_EMAIL="support@company.com"
    LICENSE="https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf"
    HOOK=/etc/dehydrated/hook.sh
    EOF

    touch /etc/dehydrated/conf.d/empty.sh
    touch /etc/dehydrated/domains.txt

    mkdir -p /etc/dehydrated/var/acme-challenges

    #Прописываем запуск в CRON - файл /etc/cron.weekly/dehydrated

    cat <<-EOF > /etc/cron.weekly/dehydrated
    #!/bin/sh
    /usr/bin/dehydrated -c -g 1>/dev/null
    EOF
    chmod +x /etc/cron.weekly/dehydrated


    #HOOK  (для версии младше 0.4)

    cat <<-EOF > /etc/dehydrated/hook.sh
    #!/bin/bash
    if [ \${1} == "deploy_cert" ]; then
        /usr/sbin/service nginx reload
    fi
    EOF

    chmod +x /etc/dehydrated/hook.sh


    #HOOK V2 (FOR dehydrated 0.4+, please check for "exit_hook" presence)

    cat <<-EOF > /etc/dehydrated/hook.sh
    #!/usr/bin/env bash

    if [ \${1} == "deploy_cert" ]; then
      touch \${BASEDIR}/.service-nginx-reload
      #if [ "\${2}" = "mail.company.com" ]
      #then
      #  /usr/sbin/service postfix reload
      #  /usr/sbin/service dovecot reload
      #fi
    fi

    if [ \${1} == "exit_hook" ]; then
      if [ -r "\${BASEDIR}/.service-nginx-reload" ]; then
        rm "\${BASEDIR}/.service-nginx-reload"
        /usr/sbin/service nginx reload
      fi
    fi
    EOF

    chmod +x /etc/dehydrated/hook.sh

     
  • 1.3, Аноним (-), 11:28, 08/07/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    С ssl_ciphers что-то намудрили, можно поменьше их указывать
    https://mozilla.github.io/server-side-tls/ssl-config-generator/
    https://wiki.mozilla.org/Security/Server_Side_TLS

    Или тут ещё ресурс https://cipherli.st/

    Ну а потом идем https://www.ssllabs.com/ssltest/ и смотрим чтобы было grade A или A+ для эстетов

     
  • 1.4, Solari (?), 11:33, 08/07/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А я не настолько доверяю сервису, чтобы запускать на сервере шеллскрипт с него.
     
     
  • 2.6, Аноним (-), 21:14, 08/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Это обычная shell-обвязка над клиентом ACME, которая поставляется во многих дистрибутивах и хорошо проверена. Оснований доверять/не доверять dehydrated столько же как и любому другому пакету из репозитория, никакой внешний код этот скрипт не запускает, только то что уже установлено.
     
     
  • 3.7, Аноним (-), 21:18, 08/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > Это обычная shell-обвязка над клиентом ACME

    Точнее над протоколом ACME, там из зависимостей только openssl, curl, sed, grep и mktemp. Скрипт предельно простой и понятный.

     

  • 1.5, mimocrocodile (?), 14:38, 08/07/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >   location /.well-known/acme-challenge {
    >      alias /var/www/htdocs/.well-known/acme-challenge;
    >   }

    можно переписать как

    >   location /.well-known/acme-challenge {
    >      root /var/www/htdocs;
    >   }

     
  • 1.8, Аноним (-), 22:21, 08/07/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >mkdir /var/www/htdocs/.well-known
    >mkdir /var/www/htdocs/.well-known/acme-challenge

    ->

    mkdir -p /var/www/htdocs/.well-known/acme-challeng

     
     
  • 2.9, Аноним (-), 23:33, 08/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    mkdir: invalid option -- 'p'
    Try 'mkdir --help' for more information.
     
     
  • 3.12, Гость (??), 16:21, 09/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Вам не повезло с ОС.
    У других эта опция есть.
     

  • 1.10, ыщёадинаноним (?), 09:04, 09/07/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Как-то не очевидно, в чем его преимущество над certbot?
    Или запускать certbot renew шириат не позволяет?
     
     
  • 2.11, PavelR (??), 10:24, 09/07/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Как-то не очевидно, в чем его преимущество над certbot?
    > Или запускать certbot renew шириат не позволяет?

    В моем случае на сервере нет PHP, но есть curl / openssl.

     
     
  • 3.22, Blind Vic (ok), 08:36, 01/08/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Python? На сервере нет Python?
     
  • 2.13, Аноним (-), 23:15, 09/07/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    certbot не понравился тем, что сильно раздут и норовит править конфиги если не указал certonly. Dehydrated  предельно прост и ничего лишнего не пытается делать.


     
     
  • 3.14, Аноним (-), 13:41, 10/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Да, но для себя нашёл заметное преимущество в случае certbot на ubuntu – после установки пакета certbot с их "фирменного" ppa:certbot/certbot он прописался и в cron.d, и добавил systemd timer. В случае с другими дистрами не проверял, но это очень обрадовало, т.к. настройку планировщика я всегда делаю в последнюю очередь и могу про неё вообще забыть.
     
     
  • 4.19, Ergil (ok), 04:32, 14/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > Да, но для себя нашёл заметное преимущество в случае certbot на ubuntu
    > – после установки пакета certbot с их "фирменного" ppa:certbot/certbot он прописался
    > и в cron.d, и добавил systemd timer. В случае с другими
    > дистрами не проверял, но это очень обрадовало, т.к. настройку планировщика я
    > всегда делаю в последнюю очередь и могу про неё вообще забыть.

    acmetool при выполнении acmetool quickstart(первой команды, что нужно сделать, когда его поставил, что бы сконфигурить его) не самовольничает, а спрашивает нужно ли прописаться в крон. Такое поведение правильней. Нефига тут самому из пакета лезть в cron.d и systemd timer'ы, надо спрашивать у того, кто тебя поставил и конфигурит нужно ли это.

     

  • 1.15, vantoo (ok), 11:36, 12/07/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А чем он лучше скрипта letsencrypt.sh? Там все те же шаги нужно сделать.
     
     
  • 2.16, PavelR (??), 12:40, 12/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > А чем он лучше скрипта letsencrypt.sh? Там все те же шаги нужно
    > сделать.

    Это он и есть, только его переименовали из-за использования имени letsencrypt.

     
     
  • 3.17, vantoo (ok), 13:02, 12/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Ну тогда, от себя добавлю, что вещь хорошая, давно работает без проблем и при установке не тянет за собой кучу пакетов в питоном.
     
     
  • 4.18, Ergil (ok), 04:30, 14/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    acmetool тоже не тянет никаких пакетов, приходит один, без ансамбля и работает, при этом гораздо удобней в использовании.
     
     
  • 5.20, PavelR (??), 05:32, 14/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > acmetool тоже не тянет никаких пакетов, приходит один, без ансамбля и работает,
    > при этом гораздо удобней в использовании.

    "гораздо удобней" - это как?

    Оно вам автоматически конфиги веб-сервера правит?

    Для меня всё использование "dehydrated" сводится к двум действиям

    - правка файла domains.txt
    - запуск команды "dehydrated -c"

    Ну и дальше конфигурирование вебсервера - прописывание полученных сертификатов, благо оно также сводится к шаблонному действию.

    У вас использование "гораздо удобней". В чем это проявляется?

     

  • 1.21, nur (ok), 13:36, 24/07/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    а можно пример для ejabberd например?
     
     
  • 2.23, Аноним (-), 14:10, 23/08/2017 [^] [^^] [^^^] [ответить]  
  • +/
    можно
     
     
  • 3.26, Anonizmus (?), 23:33, 04/09/2017 [^] [^^] [^^^] [ответить]  
  • +/
    а где этот пример увидеть?
     

  • 1.25, Аноним (-), 10:07, 01/09/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Чем acme.sh не устроил?
     
     
  • 2.27, Аноним (27), 18:05, 06/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Он для PavelR неудобный!!
     

  • 1.28, darkshvein (ok), 14:36, 07/03/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    спасибо, работает
     


     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру