Ar trebui să fie posibil să se automatizeze acest lucru cu Let's Encrypt folosind Certbot, dar mă tem că nu există o soluție gata de utilizare pentru aceasta. Prin urmare, necesită niște scripturi și poate fi necesar să angajați pe cineva, deoarece ați pus această întrebare.
Eu as sugera asa ceva (exemplele sunt pentru serverul web Apache 2.4):
Creați o configurație generală care indică http://*/.well-known/acme-challenge/
în același director cu orice domeniu și cu gazda virtuală implicită pentru restul. Acest lucru este posibil cu un global Alias
care ar putea fi plasat în /etc/apache2/conf-enabled/acme-challenge.conf
:
<IfModule alias_module>
Alias /.well-known/acme-challenge/ /var/www/letsencrypt/.well-known/acme-challenge/
</IfModule>
Permiteți clienților să introducă domeniile lor personalizate pentru validare și să salveze informațiile undeva, cu referire la clientul corect. O bază de date ar fi ideală pentru asta, nu-i așa. Este posibil să limitați acest lucru la un nume de gazdă personalizat (& www) per client.
Instruiește-ți clienții să-și orienteze domeniile către adresa IP corectă. În cazul unui subdomeniu, a CNAME
înregistrarea va funcționa, dar la vârful domeniului va trebui să oferiți instrucțiuni pentru o A
record.
Aici, exemplele presupun pur și simplu că fiecare domeniu are ambele exemplu.com
și www.example.com
, dar puteți modifica acest lucru în funcție de cerințele dvs.
Nu lansa Provocare HTTP-01 imediat, dar creați un script lansat cu a cronjob sau a Temporizator de sistem. Scriptul ar trebui să verifice mai întâi dacă domeniile care așteaptă validarea indică serverul sau nu și să lanseze provocarea ACME numai pentru domeniile care îndeplinesc condiția. În caz contrar, cineva ar putea abuza de caracteristică și ar putea face serverul dvs. să efectueze validări inutile Letâs Encrypt.
#!/bin/bash
MYSERVERIP="192.0.2.123"
if [ "$#" -ne 1 ]; atunci
printf "\n%s\n\n" "Utilizare: $0 example.com" >&2
iesirea 1
fi
gazdă „$1” 2>&1 > /dev/null
dacă [ $? -ne 0]; atunci
printf "\n%s\n\n" "Domeniul dat nu este un FQDN valid." >&2
iesirea 1
fi
IPAPEX=$(sapă „$1” +scurt | coadă -n 1)
IPWWW=$(sapă „www.$1” +scurt | coadă -n 1)
if [ "$IPAPEX" = "$MYSERVERIP" ]; atunci
if [ "$IPWWW" = "$MYSERVERIP" ]; atunci
certbot certonly --quiet --webroot -w /var/www/letsencrypt -d $1 -d www.$1
dacă [ $? -ne 0]; atunci
printf "\n%s\n\n" "Certbot a eșuat la provocarea HTTP-01." >&2
iesirea 1
fi
altfel
printf "\n%s\n\n" "Eșuat: www.$1 nu indică către $MYSERVERIP." >&2
iesirea 1
fi
altfel
printf "\n%s\n\n" "Eșuat: $1 nu indică către $MYSERVERIP." >&2
iesirea 1
fi
Odată ce validarea este finalizată, scriptul poate adăuga și configurația la serverul web. Ai putea folosi un macro, de exemplu. /etc/apache2/conf-enabled/custdomain-macro.conf
:
<Macro CustomWebShopDomain $customer $domain>
<VirtualHost *:80>
ServerName $domain
ServerAlias www.$domain
Redirect permanent / https://$domain/
</VirtualHost>
<VirtualHost *:443>
ServerName $domain
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/$domain/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/$domain/privkey.pem
SSLVerifyClient None
DocumentRoot /path/to/webshop/$customer
</VirtualHost>
<VirtualHost *:443>
ServerName www.$domain
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/$domain/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/$domain/privkey.pem
SSLVerifyClient None
Redirect permanent / https://$domain/
</VirtualHost>
</Macro>
În acest caz, adăugarea unui nou domeniu de client ar fi simplă:
Utilizați CustomWebShopDomain customerid example.com
Scriptul dvs. poate adăuga această linie la configurație și apoi reîncărca serverul web Apache:
printf "%s\n" "Utilizați CustomWebShopDomain $2 $1" \
>> /etc/apache2/conf-enabled/custdomain-use.conf
systemctl reîncărcați apache2
Asigurați-vă că curățați domeniile expirate
Certbot adaugă toate domeniile pentru reînnoiri automate. Dacă acele reînnoiri încep să eșueze, nu doriți să păstrați acele domenii în configurație pentru totdeauna. Cel mai bine este să automatizați eliminarea, de ex.
- Eliminați configurația Certbot
/etc/letsencrypt/renewal/example.com
- Scoateți
Utilizați CustomWebShopDomain customerid example.com
linia.