HTTPS na web serveru

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).

Odkazy