HTTPS na web serveru
- Možnosti při generování certifikátů:
- Root CA + Sub CA + koncový (podpis Sub CA)
- Root CA + koncový (podpis Root CA)
- Self-signed
Certifikát Root CA (kořenová certifikační autorita)
openssl.exe genpkey -out rootca.key -algorithm EC -pkeyopt ec_paramgen_curve:P-256 -aes256 openssl.exe req -x509 -new -key rootca.key -days 1825 -out rootca.crt -config "" ^ -subj "/C=CZ/O=Krakatoa/CN=Krakatoa Root CA" ^ -addext "authorityKeyIdentifier=keyid:always,issuer" ^ -addext "basicConstraints=critical,CA:true" ^ -addext "keyUsage=critical,keyCertSign" ^ -addext "extendedKeyUsage=clientAuth,serverAuth" ^ -addext "subjectKeyIdentifier=hash" pause
Vygeneruje privátní klíč rootca.key algoritmem EC 256 bitů (P-256 = secp256r1) (EC 384 bitů = P-384 = secp384r1) (EC 521 bitů = P-521 = secp521r1).
Algoritmus RSA se nastavuje pomocí -algorithm RSA -pkeyopt rsa_keygen_bits:4096 (kde 4096 je počet bitů, např. 2048, 3072, 4096, 8192, 16384).
Heslo zašifruje algoritmem aes256 (aes-256-cbc).
Vygeneruje certifikát rootca.crt kořenové certifikační autority s uvedenými parametry. Podpisový algoritmus hash je defaultně -sha256 (zadávat se nemusí, další možnosti -sha384 a -sha512).
Certifikát Sub CA (zprostředkující certifikační autorita)
openssl.exe genpkey -out subca.key -algorithm EC -pkeyopt ec_paramgen_curve:P-256 -aes256 openssl.exe req -x509 -new -key subca.key -out subca.crt -days 365 -CA rootca.crt -CAkey rootca.key -config "" ^ -subj "/C=CZ/O=Krakatoa/CN=Krakatoa Sub CA" ^ -addext "authorityKeyIdentifier=keyid:always,issuer" ^ -addext "basicConstraints=critical,CA:true,pathlen:0" ^ -addext "keyUsage=critical,keyCertSign" ^ -addext "extendedKeyUsage=clientAuth,serverAuth" ^ -addext "subjectKeyIdentifier=hash" pause
Vygeneruje privátní klíč subca.key.
Vygeneruje certifikát subca.crt zprostředkující certifikační autority a podepsaný kořenovou certifikační autoritou.
Certifikát podepsaný CA (certifikát koncové entity)
openssl.exe req -x509 -new -newkey EC -pkeyopt ec_paramgen_curve:P-256 -noenc -keyout server.key -out server.crt -days 365 -CA subca.crt -CAkey subca.key -config "" ^ -subj "/C=CZ/O=Krakatoa/CN=localhost" ^ -addext "subjectAltName=DNS:localhost,DNS:test.localhost,IP:127.0.0.1,IP:::1" ^ -addext "authorityKeyIdentifier=keyid:always,issuer" ^ -addext "basicConstraints=critical,CA:false" ^ -addext "keyUsage=critical,digitalSignature,keyEncipherment" ^ -addext "extendedKeyUsage=clientAuth,serverAuth" ^ -addext "subjectKeyIdentifier=hash" pause
Vygeneruje privátní klíč server.key algoritmem EC 256 bitů bez hesla. RSA se nastavuje -newkey rsa:4096, kde 4096 je velikost v bitech.
Vygeneruje certifikát server.crt koncové entity s uvedenými parametry a podepsaný zprostředkující certifikační autoritou.
Pokud nebude použita zprostředkující certifikační autorita (-CA subca.crt -CAkey subca.key) tak se certifikát podepíše kořenovou certifikační autoritou (-CA rootca.crt -CAkey rootca.key).
Certifikát je vygenerován pro doménu localhost, doménu test.localhost, IPv4 127.0.0.1 a IPv6 ::1. V případě potřeby jde použít zástupný znak *, například: DNS:*.localhost
Certifikát podepsaný sám sebou (self-signed)
openssl.exe req -x509 -new -newkey EC -pkeyopt ec_paramgen_curve:P-256 -noenc -keyout server.key -out server.crt -days 365 -config "" ^ -subj "/C=CZ/O=Krakatoa/CN=localhost" ^ -addext "subjectAltName=DNS:localhost,DNS:test.localhost,IP:127.0.0.1,IP:::1" ^ -addext "authorityKeyIdentifier=keyid:always,issuer" ^ -addext "basicConstraints=critical,CA:true" ^ -addext "keyUsage=critical,digitalSignature,keyEncipherment" ^ -addext "extendedKeyUsage=clientAuth,serverAuth" ^ -addext "subjectKeyIdentifier=hash" pause
Vygeneruje privátní klíč server.key algoritmem EC 256 bitů bez hesla.
Vygeneruje certifikát server.crt podepsaný sám sebou.
V případě CA:true se vygeneruje certifikát s vlastnostmi certifikační autority, v případě CA:false se vygeneruje certifikát s vlastnostmi koncové entity.
Nastavení Apache
Listen 443 <VirtualHost *:443> DocumentRoot "../www" ServerName localhost SSLEngine on SSLCertificateFile "conf/server.crt" SSLCertificateKeyFile "conf/server.key" SSLCACertificateFile "conf/subca.crt" Protocols h2 http/1.1 AddOutputFilterByType BROTLI_COMPRESS text/html text/plain text/xml text/css text/javascript application/javascript </VirtualHost> SSLProtocol TLSv1.3 #SSLCipherSuite TLSv1.3 TLS_AES_128_GCM_SHA256 #SSLCipherSuite TLSv1.3 TLS_AES_256_GCM_SHA384 #SSLCipherSuite TLSv1.3 TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256 #SSLHonorCipherOrder on #SSLHonorCipherOrder off SSLSessionTickets off SSLSessionCache "shmcb:logs/ssl_scache(512000)"
Spojení bude šifrované TLS 1.3, HTTP2, nastavené typy komprimované pomocí brotli.
SSLCipherSuite nastavuje dostupnou sadu šifrování. Ta uvedená s více šiframi je defaultní pro OpenSSL, preferovaná šifra je na prvním místě.
SSLHonorCipherOrder off upřednostňuje pořadí v klientově sadě šifrování, on v šifrovací sadě na serveru, defaultní hodnota je off.
SSLCACertificateFile použít v případě, že se používá zprostředkující certifikační autorita a ta není přidána mezi důvěryhodné v prohlížeči nebo mezi zprostředkující certifikační autority ve Windows.
Jak přidat certifikát mezi důvěryhodné certifikáty
Pokud je spojení šifrované (https) a chceme, aby bylo označeno i za zabezpečené spojení, tak je potřeba přidat certifikát mezi důvěryhodné certifikáty.
Jak přidat certifikát mezi důvěryhodné certifikáty systému Windows
Přes Správu certifikátů uživatelů (certmgr.msc). Kořenové certifikáty se přidávají mezi Důvěryhodné kořenové certifikační autority pravým klikem na myši na Certifikáty, Všechny úkoly, Importovat. Zprostředkující certifikáty se přidávají mezi Zprostředkující certifikační autority pravým klikem na myši na Certifikáty, Všechny úkoly, Importovat.
Totéž jde provést pomocí cmd.
pushd "%~dp0" certutil -addstore Root rootca.crt pause
pushd "%~dp0" certutil -delstore Root "Krakatoa Root CA" pause
pushd "%~dp0" certutil -addstore CA subca.crt pause
pushd "%~dp0" certutil -delstore CA "Krakatoa Sub CA" pause
Jak přidat certifikát mezi důvěryhodné certifikáty v prohlížeči
Chrome a Edge používají certifikáty systémové uvedené ve Správě certifikátů uživatelů (certmgr.msc). Spravovat certifikáty v Chrome jde v Nastavení / Ochrana soukromí a zabezpečení / Zabezpečení / Spravovat certifikáty zařízení. Spravovat certifikáty v Edge jde v Nastavení / Ochrana osobních údajů, vyhledávání a služby / Spravovat certifikáty.
Firefox ve výchozím nastavení nepoužívá systémové certifikáty uvedené ve Správě certifikátů uživatelů (certmgr.msc). Jde to ale povolit pomocí about:config security.enterprise_roots.enabled true. Důvěryhodné certifikáty se ve Firefoxu přidávají v Nastavení / Soukromí a zabezpečení / Zobrazit certifikáty / Autority / Importovat. Ve Firefoxu jde přidat mezi důvěryhodné certifikáty jen CA certifikát (CA:true).
Zprostředkující certifikát
Zprostředkující certifikát se přidává ve Správě certifikátů uživatelů (certmgr.msc) (funkční pro Chrome, Edge, Firefox se security.enterprise_roots.enabled true) nebo v prohlížeči (Firefox) nebo v nastavení Apache (SSLCACertificateFile "conf/subca.crt") (funkční vždy).