Certifikáty
Pro správné vygenerování a získání SSL certifikátu je nutné splnit několik předpokladů a provést konfiguraci v několika částech a konfiguračních souborech systému.
Certifikáty jsou vystavovány certifikační autoritou (CA) Let’s Encrypt, která poskytuje SSL/TLS certifikáty zdarma.
Certifikáty jsou vystavovány na 3 měsíce a do té doby je nutná jejich obnova (ručně/automaticky). Požadavek na získání certifikátu může přijít pouze ze serveru, na který je směrované příslušné doménové jméno (kontrola pomocí DNS).
Chcete-li požádat o certifikát certifikační autoritu Let’s Encrypt (nebo jinou), je nutné poskytnout určitý druh důkazu, že jste oprávněným nárokujícím k získání certifikátu pro danou doménu (domény).
Aktuálně je systémem podporováno automatické obnovení metodou HTTP-01 (ověření přes http).
DOPORUČENÍ
Problémy s automatickým obnovením certifikátů (HTTP-01 challenge) jsou obvykle způsobeny blokováním portu 80 a 443 na firewallu.
Validace pomocí metody HTTP-01 challenge může být provedena pouze na portu 80. Dovolit klientům specifikovat libovolné porty by snížilo zabezpečení a proto není standartem ACME povoleno.
https://letsencrypt.org/docs/allow-port-80/
Základní nastavení
- správně nastavené DNS záznamy pro Administrační rozhraní, Portál klienta a případně i Portál dealera.
- potřeba mít v Nastavení / Syst. nastavení / Zabezpečení povolené porty HTTP (80) a HTTPS (443) nebo na externím FW.
- nezbytné v konfiguraci web serveru Apache nastavit pro každou doménu ServerName.
Konfigurace serveru
Návody a postupy na konfiguraci HTTP Apache serveru pro nastavení přístupu do jednotlivých částí systému (uživatelské rozhraní, portál klienta, portál dealera).
Uživatelské rozhraní
Rozhraní pro uživatele/administrátory systému ISPadmin.
Část konfigurace pro uživatelské rozhraní v konfiguračním souboru ispadmin.conf.
nano /etc/apache2/sites-available/ispadmin.conf
### ISP admin#
<VirtualHost *:80>
ServerName admin.mydomain.tld
DocumentRoot "/data/support_nossl/"
<Directory /data/support_nossl/>
Options FollowSymLinks MultiViews
AllowOverride all
Require all granted
</Directory>
</VirtualHost>
## ISP Admin SSL
<VirtualHost *:443>
ServerName admin.mydomain.tld
DocumentRoot "/data/support/ispadmin/new/www/"
AddDefaultCharset UTF-8
<Directory /data/support/ispadmin/new/www/>
Options +ExecCGI
Options FollowSymLinks MultiViews
AllowOverride all
Require all granted
</Directory>
CustomLog /var/log/apache2/access_support_ispadmin.log combined
AddType application/x-httpd-php .php
SSLEngine on
SSLCertificateFile /etc/apache2/certs/ispadmin.eu/ispadmin.crt
SSLCertificateKeyFile /etc/apache2/certs/ispadmin.eu/private.key
# SSLCertificateChainFile /etc/apache2/certs/ispadmin.eu/ca.pem
</VirtualHost>
- zkontrolovat, zda-li je konfigurační soubor validní (syntax) příkazem:
apachectl configtest
- pokud se neobjeví chyba a kontrola správnosti syntaxe proběhne v pořádku, je potřeba systémem znovu načíst (aplikovat) nově upravené konfigurační soubory:
systemctl reload apache2
Portál klienta
Rozhraní pro klienty (koncové zákazníky) – portál klienta.
Část konfigurace pro rozhraní klientů v konfiguračním souboru ispadmin.conf.
nano /etc/apache2/sites-available/ispadmin.conf
## ISP CP
<VirtualHost *:81>
Protocols h2 h2c http/1.1
ServerName clientportal.mydomain.tld
DocumentRoot "/data/support/ispadmin/new/www/clientinterface"
<Directory /data/support_nossl/>
Options FollowSymLinks MultiViews
AllowOverride all
Require all granted
</Directory>
</VirtualHost>
## ISP CP SSL
<VirtualHost *:443>
Protocols h2 h2c http/1.1
ServerName clientportal.mydomain.tld
DocumentRoot "/data/support/ispadmin/new/www/clientinterface"
AddDefaultCharset UTF-8
<Directory /data/support/ispadmin/new/www/clientinterface>
Options +ExecCGI
Options FollowSymLinks MultiViews
AllowOverride all
Require all granted
</Directory>
CustomLog /var/log/apache2/access_support_ispadmin.log combined
AddType application/x-httpd-php .php
SSLEngine on
SSLCertificateFile /data/ispadmin_cert/clientportal.mydomain.tld/clientportal.mydomain.tld.cer
SSLCertificateKeyFile /data/ispadmin_cert/clientportal.mydomain.tld/clientportal.mydomain.tld.key
SSLCertificateChainFile /data/ispadmin_cert/clientportal.mydomain.tld/fullchain.cer
</VirtualHost>
- zkontrolovat, zda-li je konfigurační soubor validní (syntax) příkazem:
apachectl configtest
- pokud se neobjeví chyba a kontrola správnosti syntaxe proběhne v pořádku, je potřeba systémem znovu načíst (aplikovat) nově upravené konfigurační soubory:
systemctl reload apache2
Portál dealera
- pokud neexistuje soubor, tak je potřeba jej vytvořit:
/etc/apache2/sistes-available/dealer.conf
- vložit do něj obsah a nahradit všechny výskyty zástupného řetězce (dealerportal.mydomain.tld) skutečným doménovým jménem (subdoménou).
- editace souboru příkazem:
nano /etc/apache2/sites-available/dealer.conf
- vložit do něj obsah:
## ISP partner
#<VirtualHost *:80>
# ServerName dealerportal.mydomain.tld
# DocumentRoot "/data/support_nossl/"
# <Directory /data/support_nossl/>
# Options FollowSymLinks MultiViews
# AllowOverride all
# Require all granted
#</Directory>
<VirtualHost *:80>
Protocols h2 h2c http/1.1
DocumentRoot "/data/support/ispadmin/new/www/partner/"
ServerName dealerportal.mydomain.tld
AddDefaultCharset UTF-8
<Directory /data/support/ispadmin/new/www/partner/>
Options ExecCGI
Options FollowSymLinks MultiViews
AllowOverride all
Require all granted
</Directory>
CustomLog /var/log/apache2/access_support_ispadmin_support.log combined
AddType application/x-httpd-php .php
# SSLEngine on
# SSLCertificateFile /data/ispadmin_cert/dealerportal.mydomain.tld/dealerportal.mydomain.tld.cer
# SSLCertificateKeyFile /data/ispadmin_cert/dealerportal.mydomain.tld/dealerportal.mydomain.tld.key
# SSLCertificateChainFile /data/ispadmin_cert/dealerportal.mydomain.tld/fullchain.cer
</VirtualHost>
- povolit portál dealera v konfiguraci Apache. Tím se vytvoří symlink do složky /etc/apache2/sites-enabled:
a2ensite dealer
- zkontrolovat, zda-li je konfigurační soubor validní (syntax) příkazem:
apachectl configtest
- pokud se neobjeví chyba a kontrola správnosti syntaxe proběhne v pořádku, je potřeba systémem znovu načíst (aplikovat) nově upravené konfigurační soubory:
systemctl reload apache2
- vygenerovat certifikáty pro portál dealera:
/data/ispadmin_cert/acme/acme.sh --issue --certhome /data/ispadmin_cert -d dealerportal.mydomain.tld -w /data/support/ispadmin/new/www/partner/
- pokud je vše v pořádku je potřeba upravit konfiguraci apache a povolit použití certifikátů.
- editace konfiguračního souboru:
nano /etc/apache2/sites-available/dealer.conf
- úpravy v souboru:
- v souboru odkomentovat sekci prvního virtualhostu (odmazat #)
- upravit port u druhé sekce virtualhostu na 443
- odkomentovat v druhém virtualhostu sekci s certifikáty (4 řádky na konci odmazat počáteční #)
- výsledek po úpravě:
## ISP partner
<VirtualHost *:80>
ServerName dealerportal.mydomain.tld
DocumentRoot "/data/support_nossl/"
<Directory /data/support_nossl/>
Options FollowSymLinks MultiViews
AllowOverride all
Require all granted
</Directory>
<VirtualHost *:443>
Protocols h2 h2c http/1.1
DocumentRoot "/data/support/ispadmin/new/www/partner/"
ServerName dealerportal.mydomain.tld
AddDefaultCharset UTF-8
<Directory /data/support/ispadmin/new/www/partner/>
Options ExecCGI
Options FollowSymLinks MultiViews
AllowOverride all
Require all granted
</Directory>
CustomLog /var/log/apache2/access_support_ispadmin_support.log combined
AddType application/x-httpd-php .php
SSLEngine on
SSLCertificateFile /data/ispadmin_cert/dealerportal.mydomain.tld/dealerportal.mydomain.tld.cer
SSLCertificateKeyFile /data/ispadmin_cert/dealerportal.mydomain.tld/dealerportal.mydomain.tld.key
SSLCertificateChainFile /data/ispadmin_cert/dealerportal.mydomain.tld/fullchain.cer
</VirtualHost>
- opět zkontrolovat, zda-li je konfigurační soubor validní (syntax) příkazem:
apachectl configtest
- pokud se neobjeví chyba a kontrola správnosti syntaxe proběhne v pořádku, je potřeba systémem znovu načíst (aplikovat) nově upravené konfigurační soubory:
systemctl restart apache2
- Pokud je vše správně nastavené, mělo by se vám v prohlížeči na nastavených doménových jménech, zobrazit jak Administrační rozhraní, Portál klienta, tak i Portál dealera. Zatím se však bude zobrazovat i upozornění na certifikát.
Správa certifikátů
Instalace
- Instalaci certifikátů je možné provést příkazem:
/usr/local/script/ispadmin/bin/certificate.pl
- Zadat DNS záznamy pro Administrační rozhraní a Portál klienta.
- Zkontrolovat, zda vypsané IP adresy odpovídají IP adrese serveru.
- Pokud nesouhlasí, tak je potřeba DNS záznamy opravit. Ve skriptu vybrat volbu n a skript spustit znovu.
- Pokud je vše v pořádku, vytvoří se požadované certifikáty.
- V této fázi se vás skript zeptá, jestli chcete vytvořené certifikáty nainstalovat na Apache server.
- Pokud nemáte na Apache serveru provedeny žádné změny (vlastní konfigurace), zvolíte možnost y.
- Pokud chcete z jakýchkoliv důvodů certifikáty nakopírovat ručně, vidíte před sebou 3 umístění, kde se jednotlivé části nacházejí. Stiskněte n a certifikáty si ručně nastavte v /etc/apache2/sites-available/ispadmin.conf.
- Pokud jste vybrali y, provedla se instalace certifikátů. Zároveň byla provedena záloha konfigurace Apache a restart Apache serveru.
- Nyní jsou certifikáty platné a v prohlížeči se zobrazí https.
- Pokud je vše správně nastaveno, tak jsou certifikáty každé 3 měsíce automaticky obnovovány.
Automatická obnova
Pokud nedošlo k automatické obnově certifikátů je potřeba zkontrolovat:
- Je HTTP server Apache na standardních (výchozích) portech?
- Je povolen globální přístup z internetu na HTTP (80) a HTTPS (443)?
- Je server nepřetržitě online? Nedošlo k výpadku?
- Je v CRONu (/etc/crontab) řádek:
00 05 * * 7 root /data/ispadmin_cert/acme/acme.sh --apache --renewAll --home /data/ispadmin_cert/acme --certhome /data/ispadmin_cert #letsencrypt renew
V případě, že automatická obnova selhala opakovaně, je možné vyzkoušet aktualizovat utilitu ACME:
/data/ispadmin_cert/acme/acme.sh --upgrade
Následně provést manuální obnovu certifikátů.
Pokud i toto selže, zkuste přeinstalovat utilitu acme:
rm -r /root/.acme.sh
rm -r /root/acme.sh
rm -r /data/ispadmin_cert/acme
Následně spusťte instalaci certifikátů:
/usr/local/script/ispadmin/bin/certificate.pl
Manuální obnova
Pokud dojde k příliš mnoha neúspěšným pokusům o obnovu (např. z důvodu stále zablokovaného portu 80) objeví se error:
error creating new order :: too many failed authorizations recently
Limit je 5 neúspěšných pokusů na účet, hostname a hodinu. Více informací na webu Let’s Encrypt.
- Ruční obnova:
/data/ispadmin_cert/acme/acme.sh --apache --renewAll --home /data/ispadmin_cert/acme --certhome /data/ispadmin_cert
- Vynucená ruční obnova:
/data/ispadmin_cert/acme/acme.sh --apache --renewAll --home /data/ispadmin_cert/acme --certhome /data/ispadmin_cert --force