[16] httpd – mod_md

24 stycznia 2022 Wyłączono przez Adam [zicherka] Nogły

Zainstaluj i skonfiguruj [mod_md], aby zautomatyzować zarządzanie certyfikatami z Let’s Encrypt.

Istnieje możliwość skonfigurowania każdego VirtualHost’a osobno. Nie ma potrzeby konfigurowania ręcznego ustawienia SSL/TLS, jak tutaj dla Witryny z [mod_md].

Wymagany jest dostęp z Internetu do Witryny za pomocą [mod_md] ze względu na weryfikację z Let’s Encrypt.

[1] Zainstaluj [mod_md].

[root@vlsr01 /]# dnf install mod_md
#po instalacji [mod_md] jest już włączony

[root@vlsr01 /]# cat /etc/httpd/conf.modules.d/01-md.conf
LoadModule md_module modules/mod_md.so

[2] Skonfiguruj [mod_md].

[root@vlsr01 /]# mcedit /etc/httpd/conf.d/acme.conf
#stwórz nowy
MDBaseServer            on
MDCertificateProtocol   ACME
MDCAChallenges          http-01
MDDriveMode             auto
MDPrivateKeys           RSA 2048
MDRenewWindow           33%
MDStoreDir              md
MDCertificateAuthority  https://acme-v02.api.letsencrypt.org/directory
MDCertificateAgreement  https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf

<Location "/md-status">
    SetHandler md-status
    Require ip 127.0.0.1 192.168.0.0/16
</Location>

[3] Jeżeli SELinux jest włączony, zmień politykę.

[root@vlsr01 /]# setsebool -P httpd_can_network_connect on
[root@vlsr01 /]# mcedit httpd-md.te
#stwórz nowy
module httpd-md 1.0;

require {
        type httpd_config_t;
        type httpd_t;
        class dir { add_name create remove_name rename reparent rmdir setattr };
        class file { create rename setattr unlink write };
}

#============= httpd_t ==============
allow httpd_t httpd_config_t:dir { add_name create remove_name rename reparent rmdir setattr };
allow httpd_t httpd_config_t:file { create rename setattr unlink write };

[root@vlsr01 ~]# checkmodule -m -M -o httpd-md.mod httpd-md.te
[root@vlsr01 ~]# semodule_package --outfile httpd-md.pp --module httpd-md.mod
[root@vlsr01 ~]# semodule -i httpd-md.pp

[4] Skonfiguruj każdego VirtualHost’a, w którym chcesz wykorzystać [mod_md]. Musisz podać prawidłowy adres email, dla każdej dyrektywy [ServerAdmin], ponieważ Let’s Encrypt wysyła różne powiadomienia.

#przykładowo, sprawdzimy i ustawimy [mod_md] dla witryny [www.zicher.lab]
[root@vlsr01 ~]# mcedit /etc/httpd/conf.d/www.zicher.lab.conf
MDomain www.zicher.lab
MDCertificateAgreement accepted
DirectoryIndex index.html
ServerAdmin root@zicher.lab

<VirtualHost *:80>
    DocumentRoot /var/www/html
    ServerName www.zicher.lab
</VirtualHost>

<VirtualHost *:443>
    SSLEngine on
    DocumentRoot /var/www/html
    ServerName www.zicher.lab
</VirtualHost>

[root@vlsr01 ~]# ausearch -c '/usr/sbin/httpd' --raw | audit2allow -M my-usrsbinhttpd
******************** WAŻNE ***********************
Aby aktywować ten pakiet polityki, należy wykonać:
semodule -i my-usrsbinhttpd.pp

[root@vlsr01 ~]# semodule -i my-usrsbinhttpd.pp
[root@vlsr01 ~]# systemctl restart httpd

# przy pierwszym uruchomieniu uruchamiane są niektóre kontrole weryfikacyjne
#fikcyjny certyfikat jest tworzony w katalogu ustawionym dla [MDStoreDir]
[root@vlsr01 ~]# ll /etc/httpd/md/domains/www.zicher.lab/
razem 12
-rw-------. 1 root root 1119 01-24 16:25 fallback-cert.pem
-rw-------. 1 root root 1704 01-24 16:25 fallback-privkey.pem
-rw-------. 1 root root  470 01-24 16:25 md.json

[5] Możliwe jest potwierdzenie daty wygaśnięcia i innych certyfikatów za pomocą polecenia [openssl] w następujący sposób.

[root@vlsr01 ~]# openssl s_client -connect www.zicher.lab:443 | openssl x509 -noout -startdate -enddate
depth=2 C = US, O = Internet Security Research Group, CN = ISRG Root X1
verify return:1
depth=1 C = US, O = Let's Encrypt, CN = R3
verify return:1
depth=0 CN = zicher.lab
verify return:1
notBefore=Dec 18 16:08:47 2021 GMT
notAfter=Mar 18 16:08:46 2022 GMT