Користувальницькі налаштування

Налаштування сайту


ssl

Розбіжності

Тут показані розбіжності між вибраною ревізією та поточною версією сторінки.

Посилання на цей список змін

Наступна ревізія
Попередня ревізія
ssl [2016/02/18 12:37] – створено wombatssl [2016/12/03 20:51] (поточний) – Переход на certbot wombat
Рядок 1: Рядок 1:
 ====== Let's Encrypt! ====== ====== Let's Encrypt! ======
 +
 +https://letsencrypt.readthedocs.org/en/latest/index.html
 +
 +https://certbot.eff.org/
  
 ===== Установка ===== ===== Установка =====
  
-  sudo apt-get install python-pip python3-pip+  sudo apt-get install certbot
  
  
 ===== Запрос сертификата ===== ===== Запрос сертификата =====
  
-Перед любым запросом сертификата этой программой, нужно остановить все службы, использующие порты 80 и 443, так как эти порты будут использованы для запроса сертификата.+Сертификат выдаётся только управляющему доменом. Поэтому для того, чтобы его получить, нужно как-то подтвердить, что вы управляете указанным доменом. 
 + 
 +Существуют разные способы подтверждения управления доменом. Например, при выборе способа "''standalone''" будет запущен встроенный веб-сервер. В этом случае перед запросом сертификата нужно остановить все службы, использующие порты 80 и 443, так как эти порты будут использованы для запроса сертификата:
  
   sudo /etc/init.d/lighttpd stop   sudo /etc/init.d/lighttpd stop
   sudo /etc/init.d/sslh stop   sudo /etc/init.d/sslh stop
  
-  ./letsencrypt-auto+Если используется способ "''webroot''", то останавливать программы не нужно, но нужно указать корневой каталог, используемый вашим веб-сервером для указанного домена. 
 + 
 +Тогда запрос сертификата может выглядеть, например, так((https://certbot.eff.org/#debianjessie-other)): 
 + 
 +  certbot certonly --webroot -w /var/www/example -d example.com -d www.example.com -w /var/www/thing -d thing.is -d m.thing.is 
 + 
 +Эта команда запросит единый сертификат для доменов "example.com" и "www.example.com", для которых ваш вебсервер использует корневой каталог "/var/www/example", а также доменов "thing.is" и "m.thing.is", для которых корневой каталог "/var/www/thing".
  
 После получения сертификата по умолчанию он будет сохранён в ''/etc/letsencrypt/archive/<имя_домена>'' с символической ссылкой на последний сертификат в ''/etc/letsencrypt/live/<имя_домена>''. После получения сертификата по умолчанию он будет сохранён в ''/etc/letsencrypt/archive/<имя_домена>'' с символической ссылкой на последний сертификат в ''/etc/letsencrypt/live/<имя_домена>''.
 +
 +Затем можно скопировать эти сертификаты в какое-нибудь стандартное системное расположение. Например,
 +
 +  cat /etc/letsencrypt/live/example.com/fullchain.pem > /etc/ssl/certs/example.com.cert
 +  cat /etc/letsencrypt/live/example.com/privkey.pem > /etc/ssl/private/example.com.key
 +
 +Обратите внимание, что сертификат "''example.com.cert''" - вещь публичная. Веб-сервер передаёт её браузеру клиента, который подключается к вашему сайту для того, чтобы тот смог проверить, действительно ли ваш сервер тот, за кого себя выдаёт. Поэтому этот файл доступен для чтения всем программам и пользователям без ограничений.
 +
 +Что же касается ключа "''example.com.key''", то он **секретен**! Он не должен быть доступен никому, кроме вашего веб-сервера (или других программ, использующих SSL). Поэтому
 +
 +  * во-первых, его нельзя располагать в том же каталоге, где и публичные файлы,
 +  * а во-вторых, его каталог "''/etc/ssl/private''/" должен быть доступен для чтения только узкой группе пользователей или программ.
 +
 +Для этого можно, например, создать группу "''ssl-cert''", сделать её владельцем каталога "''/etc/ssl/private/''" и добавлять в эту группу только те программы, которые должны в своей работе использовать SSL (например, веб-сервер, FTP-сервер, XMPP-сервер).
  
 Некоторые программы требуют, чтобы сертификат и секретный ключ к нему хранились в одном файле. Для этого на основе полученного сертифиата и ключа нужно создать единый файл, содержащий их вместе: Некоторые программы требуют, чтобы сертификат и секретный ключ к нему хранились в одном файле. Для этого на основе полученного сертифиата и ключа нужно создать единый файл, содержащий их вместе:
  
-  # cat /etc/letsencrypt/live/<имя_домена>/cert.pem /etc/letsencrypt/live/<имя_домена>/privkey.pem > /etc/ssl/<имя_домена>.pem+  # cat /etc/letsencrypt/live/<имя_домена>/fullchain.pem /etc/letsencrypt/live/<имя_домена>/privkey.pem > /etc/ssl/private/<имя_домена>.pem
  
 Необходимо обеспечить доступ программам из группы ''ssl-cert'' к этим файлам. В эту группу будут входить все программы, которые должны иметь возможность считывать сертификат. Если такой группы ещё нет, то её нужно создать: Необходимо обеспечить доступ программам из группы ''ssl-cert'' к этим файлам. В эту группу будут входить все программы, которые должны иметь возможность считывать сертификат. Если такой группы ещё нет, то её нужно создать:
Рядок 27: Рядок 53:
   sudo usermod -a -G ssl-cert prosody   sudo usermod -a -G ssl-cert prosody
  
-  sudo chown root:ssl-cert /etc/ssl/certs/ +  sudo chown -R root:ssl-cert /etc/ssl/certs/ 
-  sudo chown root:ssl-cert /etc/ssl/certs/<имя_домена>.pem +  sudo chown -R root:ssl-cert /etc/ssl/private
-  sudo chmod 750 /etc/ssl/certs +  sudo chmod -R 644 /etc/ssl/certs/ 
-  sudo chmod 750 /etc/ssl/certs/<имя_домена>.pem +  sudo chmod -R 755 /etc/ssl/certs/ 
-  sudo chown root:ssl-cert /etc/letsencrypt/live+  sudo chmod 640 -/etc/ssl/private
-  sudo chmod 750 /etc/letsencrypt/live/+  sudo chmod 750 /etc/ssl/private/
  
  
  
 ===== Обновление сертификата ===== ===== Обновление сертификата =====
 +
 +В современных версиях Debian GNU/Linux (например, в версии 8 "Jessie") при установке пакета certbot автоматически создаётся периодическое задание для CRON, которое будет выполнять проверку необходимости обновления сертификата, и обновлять его, когда истечёт срок его действия. Задание это выглядит так:
 +
 +<file bash "/etc/cron.d/certbot">
 +# m h    dom   mon   dow   user   command
 +  0 */12 *             root   test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && certbot -q renew
 +</file>
 +
 +Но можно запустить проверку и вручную.
 +
 +
 +
 +==== Без остановки веб-сервера ====
 +
 +  $ sudo certbot renew
 +
 +Если обновление сертификата произошло, можно записать новый сертификат и ключ в системные файлы, как это описано выше.
 +
 +==== Через встроенный веб-сервер ====
 +
  
   sudo /etc/init.d/lighttpd stop   sudo /etc/init.d/lighttpd stop
   sudo /etc/init.d/sslh stop   sudo /etc/init.d/sslh stop
  
 +  $ sudo certbot renew --standalone
  
-  ./letsencrypt-auto renew -nvv --standalone +После обновления можно записать новый сертификат и ключ в системные файлы, как это описано выше, после чего снова зпустить наши службы:
- +
-  # cat /etc/letsencrypt/live/<имя_домена>/cert.pem /etc/letsencrypt/live/<имя_домена>/privkey.pem > /etc/ssl/<имя_домена>.pem+
  
   sudo /etc/init.d/sslh start   sudo /etc/init.d/sslh start
   sudo /etc/init.d/lighttpd start   sudo /etc/init.d/lighttpd start
-  sudo /etc/init.d/prosody reload+  sudo /etc/init.d/prosody restart 
 + 
 + 
 + 
 +==== Перед и после обновления ==== 
 + 
 +Для автоматизации выполнения подготовки к обновлению сертификата и каких-либо действий после его обновления, служат параметры((https://certbot.eff.org/docs/using.html#certbot-command-line-options)): 
 +  * ''--pre-hook'' -- выполняет команду (или bash-скрипт со списком команд) **перед попыткой** обновить сертификат. Независимо от того, устарел сертификат или нет. Как раз подходит для режима подтверждения управления доменом при помощи встроенного веб-сервера ("''standalone''"), ведь перед запросом обновления сертификата нужно остановить все службы, связанные с портами 80 и 443. 
 +  * ''--renew-hook'' -- выполняет команду (или bash-скрипт) только в случае, когда истёк срок действия сертификата, и //certbot// получил новый сертификат. При этом перед выполнением указанной нами команды или скрипта certbot устанавливает переменные среды ''$RENEWED_LINEAGE'' (содержит путь к каталогу, куда помещены обновлённые файлы сертификата и ключа) и ''$RENEWED_DOMAINS'' (содержит список доменов, для которых получен новый сертификат, разделённых пробелами). Эта команда будет выполнена для **каждого** обновлённого сертификата в отдельности. Это удобный способ автоматически скопировать все новые сертификаты в системные папки, если нужно. 
 +  * ''--post-hook'' -- выполняет команду (или bash-скрипт) **после попытки** обновления сертификата. То есть вне зависимости от того, был ли получен новый сертификат, или срок действия старого ещё не истёк. Это самое подходящее для запуска остановленных ранее программ. 
 + 
 +Если для запроса обновления используется задание ''cron'', то можно дописать эти параметры в команду в соответствующем файле: 
 + 
 +<file bash "/etc/cron.d/certbot"> 
 +# m h    dom   mon   dow   user   command 
 +  0 */12 *             root   test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && certbot -q renew --pre-hook /var/lib/stop-services.sh --renew-hook /var/lib/certbot-renew.sh --post-hook /var/lib/stop-services.sh 
 +</file> 
 + 
 +Где файлы ''/var/lib/stop-services.sh'', ''/var/lib/certbot-renew.sh'' и ''/var/lib/stop-services.sh'' -- bash-скрипты с командами, которые нужно выполнять в соответствующих ситуациях.
  
ssl.1455799023.txt.bz2 · Востаннє змінено: повз wombat