RTFM.WIKI

Ordnung muß sein. Ordnung über alles (18+)

Инструменты пользователя

Инструменты сайта


linux:apache:mod_md

mod_md: сертификаты Let's Encrypt


Получаем сертификат Let's Encrypt за 5 минут с помощью модуля mod_md.

Исходные данные

  • Debian 12
  • Apache 2.4.57-2
  • Домен pupupu.site

Документация

Настройка mod_md

Включаем модули

a2enmod mod_md mod_ssl

Минимальный конфиг

  • MDCertificateAgreement accepted - принять условия LE
  • MDContactEmail - контактный email, иначе будет использоваться из ServerAdmin
  • MDomain foobar.com www.foobar.com - для каких доменов выпустить сертификат

Пример виртуального хоста Apache

# mod_md
MDCertificateAgreement accepted
MDContactEmail admin@pupupu.site
MDomain pupupu.site www.pupupu.site 
MDomain mail.pupupu.site admin.pupupu.site
 
MDStapling on
 
# md-status
<Location "/md-status">
  SetHandler md-status
  Require ip 127.0.0.1 172.16.10.0/24
</Location>
 
# server-status
<Location "/server-status">
  SetHandler server-status
  Require ip 127.0.0.1 172.16.10.0/24
</Location>
 
# https://github.com/icing/mod_md#certificate-status
#<Location "/certificate-status">
#  SetHandler certificate-status
#  Require ip 127.0.0.1 172.16.10.0/24
#</Location>
 
# http 301 redirect
<VirtualHost *:80>
  ServerName pupupu.site
  ServerAlias www.pupupu.site
  Redirect 301 / https://pupupu.site/
</VirtualHost>
 
# https
<VirtualHost *:443>
    Protocols h2 http/1.1 acme-tls/1
    DocumentRoot /srv/www/pupupu_main
    ServerAdmin admin@pupupu.site
    ServerName pupupu.site
    ServerAlias www.pupupu.site
 
    CustomLog "/var/log/apache2/pupupu.site_access.log" combined
    ErrorLog  "/var/log/apache2/pupupu.site_error_log"
 
    # php-fpm handler
    <FilesMatch ".+\.ph(ar|p|tml)$">
      SetHandler "proxy:unix:/run/php/php8.1-foobar.sock|fcgi://localhost"
    </FilesMatch>
 
    SSLEngine on
    SSLProtocol             all -SSLv3 -TLSv1 -TLSv1.1
    SSLCipherSuite          ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305
    SSLHonorCipherOrder     off
    SSLSessionTickets       off
 
    # OCSP managed by mod_md, so turning off
    #SSLUseStapling On
    #SSLStaplingCache "shmcb:logs/ssl_stapling(32768)"
</VirtualHost>
 
<Directory /srv/www/pupupu_main>
    # rewrite www2non-www
    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^www.pupupu.site [NC]
    RewriteRule ^(.*)$ https://pupupu.site/$1 [L,R=301]
 
    Options -Indexes +FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>
 
# mail vhost
<VirtualHost *:443>
    Protocols h2 http/1.1 acme-tls/1
    SSLEngine on
    DocumentRoot /srv/www/pupupu_mail
    ServerAdmin admin@pupupu.site
    ServerName mail.pupupu.site
 
<Directory /srv/www/pupupu_mail>
    Options -Indexes +FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>
</VirtualHost>
 
# admin vhost
<VirtualHost *:443>
    Protocols h2 http/1.1 acme-tls/1
    SSLEngine on
    DocumentRoot /srv/www/pupupu_admin
    ServerAdmin admin@pupupu.site
    ServerName admin.pupupu.site
 
<Directory /srv/www/pupupu_admin>
    Options -Indexes +FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>
</VirtualHost>

Перезапускаем Apache

systemctl restart apache2

Проверка md-status

По адресу https://pupupu.site/md-status можно посмотреть информацию о SSL сертификате.

pupupu.site, www.pupupu.site

mail.pupupu.site, admin.pupupu.site

OCSP

Что такое OCSP stapling

Как включить - Just the Stapling, Mam!

Информацию о OCSP можно посмотреть через Apache Module mod_status

Пример

Для OCSP можно использовать и mod_ssl и mod_md.

Нюансы

Виды проверок у Let's Encrypt.

Для wildcard можно использовать только dns-01.

Если например недоступен 80 порт извне, то может быть подобная ошибка

Error[Internal error (specific information not available)]: None of the ACME challenge methods configured for this domain are suitable. The http: challenge 'http-01' is disabled because the server seems not reachable on public port 80. The https: challenge 'tls-alpn-01' is disabled because the Protocols configuration does not include the 'acme-tls/1' protocol. The DNS challenge 'dns-01' is disabled because the directive 'MDChallengeDns01' is not configured. Next run in ~3 seconds

Если доступен только 443 порт, то в Protocols добавляем acme-tls/1

EOM

Обсуждение

Ваш комментарий. Вики-синтаксис разрешён:
 
linux/apache/mod_md.txt · Последнее изменение: 2023/07/30 18:25 — dx