プライベート認証局の環境
プライベート認証局 (ルート CA・中間 CA) を構築するにあたり、使用する OpenSSL は以下の環境のものを使用する。
作成ディレクトリ | /etc/pki/CA |
設定ファイル | /etc/pki/tls/openssl.cnf |
OpenSSL バージョン | 3.2.2 |
OS | Red Hat Enterprise Linux 9.5 |
プライベート認証局 (ルート CA・中間 CA) の構築
ルート CA 証明書の発行 (ECC 証明書)
初めにプライベート認証局 (ルート CA) 用の秘密鍵を作成する。この時、秘密鍵は暗号化して保護する。また、 RSA ではなく ECC の証明書を発行する。
有効期限 | 約20年 (7,305日) |
デジタル署名方式 | ECDSA |
ECC の鍵長 | NIST P-384 |
秘密鍵の暗号方式 | AES256 |
Issure DN | C=JP, O=Home Lab, CN=RHEL ROOT CA |
Subject DN | C=JP, O=Home Lab, CN=RHEL ROOT CA |
X.509 エンコーディング形式 | PEM (Base64) |
基本制約 | 【critical】CA:true |
鍵用途 | 【critical】digitalSignature, cRLSign, keyCertSign |
署名アルゴリズム | SHA384 |
# mkdir -p /etc/pki/CA/private
# cd /etc/pki/CA
# openssl ecparam -list_curves
secp224r1 : NIST/SECG curve over a 224 bit prime field
secp256k1 : SECG curve over a 256 bit prime field
secp384r1 : NIST/SECG curve over a 384 bit prime field
secp521r1 : NIST/SECG curve over a 521 bit prime field
prime256v1: X9.62/SECG curve over a 256 bit prime field
brainpoolP256r1: RFC 5639 curve over a 256 bit prime field
brainpoolP256t1: RFC 5639 curve over a 256 bit prime field
brainpoolP320r1: RFC 5639 curve over a 320 bit prime field
brainpoolP320t1: RFC 5639 curve over a 320 bit prime field
brainpoolP384r1: RFC 5639 curve over a 384 bit prime field
brainpoolP384t1: RFC 5639 curve over a 384 bit prime field
brainpoolP512r1: RFC 5639 curve over a 512 bit prime field
brainpoolP512t1: RFC 5639 curve over a 512 bit prime field
# openssl ecparam -genkey -name secp384r1 -out private/rtcakey.pem
# ll private/
total 4
-rw-------. 1 root root 359 Dec 30 13:13 rtcakey.pem
# openssl ec -text -in private/rtcakey.pem
read EC key
Private-Key: (384 bit)
priv:
32:b6:bc:9a:31:68:30:(略)
pub:
04:05:7c:3c:c2:7b:80:(略)
ASN1 OID: secp384r1
NIST CURVE: P-384
writing EC key
-----BEGIN EC PRIVATE KEY-----
MIGkAgEBBDAytryaMWgww/(略)
-----END EC PRIVATE KEY-----
作成した CA 証明書用の ECC 秘密鍵を AES256 で暗号化する。作成後に暗号化前ファイルを削除する。
# openssl ec -aes256 -in private/rtcakey.pem -out private/enc_rtcakey.pem
read EC key
writing EC key
Enter pass phrase for PEM:
Verifying - Enter pass phrase for PEM:
# cat private/enc_rtcakey.pem
-----BEGIN EC PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-256-CBC,7C2D00C0316BD9A6D0CCB0368BA819A5
8S8/17N6XwD9O+MukFbxDCCDkpS(略)
-----END EC PRIVATE KEY-----
# rm private/rtcakey.pem
rm: remove regular file 'private/rtcakey.pem'? y
ルート CA 証明書用の CSR を発行する。この時、 Extension 属性を合わせて付与する。
# openssl req -new -key private/enc_rtcakey.pem -out rtcacert.csr \
-subj="/C=JP/O=Home Lab/CN=RHEL ROOT CA" \
-addext="basicConstraints=critical, CA:true" \
-addext="keyUsage=critical, digitalSignature, cRLSign, keyCertSign"
Enter pass phrase for private/enc_rtcakey.pem:
# openssl req -text -in rtcacert.csr
Certificate Request:
Data:
Version: 1 (0x0)
Subject: C=JP, O=Home Lab, CN=RHEL ROOT CA
Subject Public Key Info:
Public Key Algorithm: id-ecPublicKey
Public-Key: (384 bit)
pub:
04:05:7c:3c:c2:7b:80:26:(略)
ASN1 OID: secp384r1
NIST CURVE: P-384
Attributes:
Requested Extensions:
X509v3 Basic Constraints: critical
CA:TRUE
X509v3 Key Usage: critical
Digital Signature, Certificate Sign, CRL Sign
Signature Algorithm: ecdsa-with-SHA256
Signature Value:
30:66:02:31:00:e2:c1:83:05:(略)
-----BEGIN CERTIFICATE REQUEST-----
MIIBYjCB6AIBADA3MQswCQYDVQQGEw(略)
-----END CERTIFICATE REQUEST-----
CSR 発行後に自己署名を行い、ルート CA 証明書を発行する。内容が上記表の設定になっていることを確認する。
※長いので「\」で改行してコマンド入力
# openssl x509 -req -in rtcacert.csr -out rtcacert.pem \
-signkey private/enc_rtcakey.pem \
-copy_extensions copy -days 7305 -sha384
Enter pass phrase for private/enc_rtcakey.pem:
Certificate request self-signature ok
subject=C=JP, O=Home Lab, CN=RHEL ROOT CA
# openssl x509 -text -in rtcacert.pem
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
61:ee:5a:13:d0:9e:c0:f5:(略)
Signature Algorithm: ecdsa-with-SHA384
Issuer: C=JP, O=Home Lab, CN=RHEL ROOT CA
Validity
Not Before: Dec 30 10:09:23 2024 GMT
Not After : Dec 30 10:09:23 2044 GMT
Subject: C=JP, O=Home Lab, CN=RHEL ROOT CA
Subject Public Key Info:
Public Key Algorithm: id-ecPublicKey
Public-Key: (384 bit)
pub:
04:05:7c:3c:c2:7b:80:(略)
ASN1 OID: secp384r1
NIST CURVE: P-384
X509v3 extensions:
X509v3 Basic Constraints: critical
CA:TRUE
X509v3 Key Usage: critical
Digital Signature, Certificate Sign, CRL Sign
X509v3 Subject Key Identifier:
05:47:31:30:98:9D:72:2E:EB:EF:D7:68:B8:40:8C:62:9F:B9:70:3F
Signature Algorithm: ecdsa-with-SHA384
Signature Value:
30:65:02:30:22:59:65:fd:(略)
-----BEGIN CERTIFICATE-----
MIIB7zCCAXWgAwIBAgIUYe5aE9Cew(略)
-----END CERTIFICATE-----
中間 CA 証明書の発行 (ECC 証明書)
中間 CA 用の秘密鍵を作成する。証明書は ECC 証明書を発行する。
有効期限 | 約15年 (5,478日) |
デジタル署名方式 | ECDSA |
ECC の鍵長 | NIST P-256 |
秘密鍵の暗号方式 | なし |
Issure DN | C=JP, O=Home Lab, CN=RHEL ROOT CA |
Subject DN | C=JP, O=Home Lab, CN=RHEL INTERMEDIATE CA |
X.509 エンコーディング形式 | PEM (Base64) |
基本制約 | 【critical】CA=true |
鍵用途 | 【critical】Digital Signature, Certificate Sign, CRL Sign |
拡張鍵用途 | 【critical】serverAuth |
CRL 配布ポイント | http://pki.net.home/ca.crl |
署名アルゴリズム | SHA384 |
# openssl ecparam -genkey -name prime256v1 -out private/imcakey.pem
# openssl ec -text -in private/imcakey.pem
read EC key
Private-Key: (256 bit)
priv:
fe:8c:49:8b:18:53:e0:(略)
pub:
04:1d:5d:e5:e3:9d:34:(略)
ASN1 OID: prime256v1
NIST CURVE: P-256
writing EC key
-----BEGIN EC PRIVATE KEY-----
MHcCAQEEIP6MSYsYU+Cd7Kqa(略)
-----END EC PRIVATE KEY-----
次に、中間 CA 用の CSR を発行する。この時、 Extension 属性を合わせて付与する。
※長いので「\」で改行してコマンド入力
# openssl req -new -key private/imcakey.pem -out imcacert.csr \
-subj="/C=JP/O=Home Lab/CN=RHEL INTERMEDIATE CA" \
-addext="basicConstraints=critical, CA:true" \
-addext="keyUsage=critical, digitalSignature, cRLSign, keyCertSign" \
-addext="extendedKeyUsage=critical, serverAuth" \
-addext="crlDistributionPoints=URI:http://pki.net.home/ca.crl"
# openssl req -text -in imcacert.csr
Certificate Request:
Data:
Version: 1 (0x0)
Subject: C=JP, O=Home Lab, CN=RHEL INTERMEDIATE CA
Subject Public Key Info:
Public Key Algorithm: id-ecPublicKey
Public-Key: (256 bit)
pub:
04:1d:5d:e5:e3:9d:34:(略)
ASN1 OID: prime256v1
NIST CURVE: P-256
Attributes:
Requested Extensions:
X509v3 Basic Constraints: critical
CA:TRUE
X509v3 Key Usage: critical
Digital Signature, Certificate Sign, CRL Sign
X509v3 Extended Key Usage: critical
TLS Web Server Authentication
X509v3 CRL Distribution Points:
Full Name:
URI:http://pki.net.home/ca.crl
Signature Algorithm: ecdsa-with-SHA256
Signature Value:
30:45:02:21:00:98:09:97:(略)
-----BEGIN CERTIFICATE REQUEST-----
MIIBcjCCARgCAQAwPzELMAkGA1UEBh(略)
-----END CERTIFICATE REQUEST-----
CSR 発行後にルート CA で署名を行い、中間 CA 証明書を発行する。この時、 ルート CA 証明書、ルート CA の秘密鍵を指定する。また、CSR の Extension をコピーし、署名は SHA384 を指定している。
※長いので「\」で改行してコマンド入力
# openssl x509 -req -in imcacert.csr -out imcacert.pem \
-CA rtcacert.pem -CAkey private/enc_rtcakey.pem \
-days 5478 -copy_extensions copy -sha384
Certificate request self-signature ok
subject=C=JP, O=Home Lab, CN=RHEL INTERMEDIATE CA
Enter pass phrase for private/enc_rtcakey.pem:
# openssl x509 -text -in imcacert.pem
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
1f:6e:1d:7c:44:6b:48:30:40:58:d8:(略)
Signature Algorithm: ecdsa-with-SHA384
Issuer: C=JP, O=Home Lab, CN=RHEL ROOT CA
Validity
Not Before: Dec 30 10:27:51 2024 GMT
Not After : Dec 30 10:27:51 2039 GMT
Subject: C=JP, O=Home Lab, CN=RHEL INTERMEDIATE CA
Subject Public Key Info:
Public Key Algorithm: id-ecPublicKey
Public-Key: (256 bit)
pub:
04:1d:5d:e5:e3:9d:34:4a:2d:(略)
ASN1 OID: prime256v1
NIST CURVE: P-256
X509v3 extensions:
X509v3 Basic Constraints: critical
CA:TRUE
X509v3 Key Usage: critical
Digital Signature, Certificate Sign, CRL Sign
X509v3 Extended Key Usage: critical
TLS Web Server Authentication
X509v3 CRL Distribution Points:
Full Name:
URI:http://pki.net.home/ca.crl
X509v3 Subject Key Identifier:
2F:41:28:23:67:C3:A0:83:30:91:(略)
X509v3 Authority Key Identifier:
05:47:31:30:98:9D:72:2E:EB:EF:(略)
Signature Algorithm: ecdsa-with-SHA384
Signature Value:
30:64:02:30:7b:8d:c0:92:c8:(略)
-----BEGIN CERTIFICATE-----
MIICQTCCAcigAwIBAgIUH24dfERrSDBAW(略)
-----END CERTIFICATE-----
中間 CA 証明書の内容が上記表の設定になっていることを確認する。
サーバ証明書発行の準備
OpenSSL の設定ファイルを確認・変更する。場所は [ CA_default ] の部分となる。
- 「dir」が今回作成したパスと一致していること。
- 「certificate」を中間 CA 証明書に合わせる(ファイル名を変更しても良い)
- 「policy」を変更する(サブジェクト DN の「C, ST, O」を必須からオプションに変更)
# cp -a /etc/pki/tls/openssl.cnf /etc/pki/tls/openssl.cnf.bak
# vim /etc/pki/tls/openssl.cnf
[ CA_default ]
dir = /etc/pki/CA
#certificate = $dir/cacert.pem # The CA certificate
certificate = $dir/imcacert.pem
#private_key = $dir/private/cakey.pem # The private key
private_key = $dir/private/imcakey.pem
#policy = policy_match
policy = policy_anything
サーバ証明書を発行するための管理ファイル等を作成する。
# cd /etc/pki/CA
# touch index.txt
# mkdir newcerts
# mkdir crl
# echo '00' > crlnumber
サーバ証明書の発行 (ECC 証明書)
プライベート認証局 (CA) の証明書と同様に、サーバ証明書用の秘密鍵を発行する。
有効期限 | 1年 (365日) |
デジタル署名方式 | ECDSA |
ECC の鍵長 | NIST P-256 |
Subject DN | C=JP, O=Home Lab, CN=rhel-m01.net.home |
シリアル番号 | 自動生成 |
シリアル番号情報ファイル | /etc/pki/CA/serial |
X.509 エンコーディング形式 | PEM (Base64) |
X.509v3 拡張設定ファイル | rhel-m01_ext.txt |
基本制約 | CA:FALSE |
鍵用途 | 【critical】digitalSignature |
拡張鍵用途 | serverAuth |
サブジェクトの別名 (SAN) ※必須 | 【DNS】rhel-m01.net.home |
CRL 配布ポイント | http://pki.net.home/sv.crl |
署名アルゴリズム | SHA256 |
# mkdir -p /etc/pki/CA/server/private
# cd /etc/pki/CA/server
# openssl ecparam -genkey -name prime256v1 -out private/rhel-m01_key.pem
サブジェクト以外の情報は、サーバ証明書の発行時に再度使い回せるように設定ファイルを作成する。
# vim rhel-m01_ext.txt
basicConstraints = CA:FALSE
keyUsage = critical, digitalSignature
extendedKeyUsage = serverAuth
subjectAltName = DNS:rhel-m01.net.home
crlDistributionPoints = URI:http://pki.net.home/sv.crl
サーバ証明書の CSR を発行する。この時、サブジェクトのみ指定する。
# openssl req -new -key private/rhel-m01_key.pem -out rhel-m01_csr.pem \
-subj="/C=JP/O=Home Lab/CN=rhel-m01.net.home"
# openssl req -text -in rhel-m01_csr.pem
Certificate Request:
Data:
Version: 1 (0x0)
Subject: C=JP, O=Home Lab, CN=rhel-m01.net.home
Subject Public Key Info:
Public Key Algorithm: id-ecPublicKey
Public-Key: (256 bit)
pub:
04:cd:10:5d:3a:72:(略)
ASN1 OID: prime256v1
NIST CURVE: P-256
Attributes:
(none)
Requested Extensions:
Signature Algorithm: ecdsa-with-SHA256
Signature Value:
30:45:02:20:67:b1:bc:19:(略)
-----BEGIN CERTIFICATE REQUEST-----
MIH3MIGeAgEAMDwxCzAJBgNVBAY(略)
-----END CERTIFICATE REQUEST-----
CSR をプライベート認証局 の中間 CA で署名し、サーバ証明書を発行する。この時、 上記ファイルを指定して各種情報を付与する。
# openssl ca -create_serial -in rhel-m01_csr.pem \
-extfile rhel-m01_ext.txt -days 365
Using configuration from /etc/pki/tls/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number:
1a:fa:63:5e:78:82:9e:1b:32:3f:(略)
Validity
Not Before: Dec 30 12:19:44 2024 GMT
Not After : Dec 30 12:19:44 2025 GMT
Subject:
countryName = JP
organizationName = Home Lab
commonName = rhel-m01.net.home
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
X509v3 Key Usage: critical
Digital Signature
X509v3 Extended Key Usage:
TLS Web Server Authentication
X509v3 Subject Alternative Name:
DNS:rhel-m01.net.home
X509v3 CRL Distribution Points:
Full Name:
URI:http://pki.net.home/sv.crl
Certificate is to be certified until Dec 30 12:19:44 2025 GMT (365 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
1a:fa:63:5e:78:82:9e:1b:32:3f:(略)
Signature Algorithm: ecdsa-with-SHA256
Issuer: C=JP, O=Home Lab, CN=RHEL INTERMEDIATE CA
Validity
Not Before: Dec 30 12:19:44 2024 GMT
Not After : Dec 30 12:19:44 2025 GMT
Subject: C=JP, O=Home Lab, CN=rhel-m01.net.home
Subject Public Key Info:
Public Key Algorithm: id-ecPublicKey
Public-Key: (256 bit)
pub:
04:cd:10:5d:3a:72:c9:9d:(略)
ASN1 OID: prime256v1
NIST CURVE: P-256
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
X509v3 Key Usage: critical
Digital Signature
X509v3 Extended Key Usage:
TLS Web Server Authentication
X509v3 Subject Alternative Name:
DNS:rhel-m01.net.home
X509v3 CRL Distribution Points:
Full Name:
URI:http://pki.net.home/sv.crl
X509v3 Subject Key Identifier:
D7:66:2E:5F:F5:E7:83:FD:7C:(略)
X509v3 Authority Key Identifier:
2F:41:28:23:67:C3:A0:83:30:(略)
Signature Algorithm: ecdsa-with-SHA256
Signature Value:
30:45:02:21:00:e9:80:d2:83:b8:d7:eb:(略)
-----BEGIN CERTIFICATE-----
MIICPDCCAeKgAwIBAgIUGvpjXniCnhsyPz7MvoZ1LG(略)
-----END CERTIFICATE-----
Database updated
作成されたサーバ証明書と管理ファイルを確認する。
# cd /etc/pki/CA
# cat serial
1AFA635E78829E1B323F3ECCBE86752C67AC4DB3
# cat index.txt
V 251230121944Z 1AFA635E78829E1B323F3ECCBE86752C67AC4DB2 unknown /C=JP/O=Home Lab/CN=rhel-m01.net.home
# ll newcerts/
total 4
-rw-r--r--. 1 root root 2773 Dec 30 21:19 1AFA635E78829E1B323F3ECCBE86752C67AC4DB2.pem
サーバ証明書チェーンの作成
発行したサーバ証明書とプライベート認証局の中間 CA 証明書、ルート CA 証明書をそれぞれ結合してチェーン証明書を作成する。この時、順番が「サーバ証明書」「中間 CA 証明書」「ルート CA 証明書」の順番になるように連結する。
※発行したサーバ証明書は「—–BEGIN CERTIFICATE—–」から「—–END CERTIFICATE—–」以外の部分は削除する。
# cp newcerts/1AFA635E78829E1B323F3ECCBE86752C67AC4DB2.pem rhel-m01_chain.pem
# vim rhel-m01_chain.pem
-----BEGIN CERTIFICATE-----
MIICPDCCAeKgAwIBAg(略)
-----END CERTIFICATE-----
# cat imcacert.pem >> rhel-m01_chain.pem
# cat rtcacert.pem >> rhel-m01_chain.pem
# mv rhel-m01_chain.pem server/
最終的に以下の様になる。
# cat server/rhel-m01_chain.pem
-----BEGIN CERTIFICATE-----
MIICPDCCAeKgAwIBAgIUGvpjXni(略 サーバ証明書)
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE REQUEST-----
MIIBcjCCARgCAQAwPzELMAkGA1U(略 中間 CA 証明書)
-----END CERTIFICATE REQUEST-----
-----BEGIN CERTIFICATE-----
MIIB7zCCAXWgAwIBAgIUYe5aE9C(略 ルート CA 証明書)
-----END CERTIFICATE-----
証明書失効リスト (CRL)
サーバ証明書の失効
発行したサーバ証明書を失効させる。失効させるサーバ証明書は対象の証明書ファイルを指定する。失効後に CRL ファイルを生成する。
# cd /etc/pki/CA
# echo '00' > crlnumber ※未作成の場合
# cat index.txt
V 251230121944Z 1AFA635E78829E1B323F3ECCBE86752C67AC4DB2 unknown /C=JP/O=Home Lab/CN=rhel-m01.net.home
# openssl ca -revoke newcerts/1AFA635E78829E1B323F3ECCBE86752C67AC4DB2.pem
Using configuration from /etc/pki/tls/openssl.cnf
Revoking Certificate 1AFA635E78829E1B323F3ECCBE86752C67AC4DB2.
Database updated
# cat index.txt
R 251230121944Z 241231055950Z 1AFA635E78829E1B323F3ECCBE86752C67AC4DB2 unknown /C=JP/O=Home Lab/CN=rhel-m01.net.home
証明書失効リストの生成
サーバ証明書を失効させたため、証明書失効リスト (CRL) を生成する。
# openssl ca -gencrl -out sv.crl
Using configuration from /etc/pki/tls/openssl.cnf
# openssl crl -text -in sv.crl
Certificate Revocation List (CRL):
Version 2 (0x1)
Signature Algorithm: ecdsa-with-SHA256
Issuer: C=JP, O=Home Lab, CN=RHEL INTERMEDIATE CA
Last Update: Dec 31 06:48:34 2024 GMT
Next Update: Jan 30 06:48:34 2025 GMT
CRL extensions:
X509v3 CRL Number:
1
Revoked Certificates:
Serial Number: 1AFA635E78829E1B323F3ECCBE86752C67AC4DB2
Revocation Date: Dec 31 05:59:50 2024 GMT
Signature Algorithm: ecdsa-with-SHA256
Signature Value:
30:45:02:21:00:9f:11:42:(略)
-----BEGIN X509 CRL-----
MIIBADCBpwIBATAKBggqhkjOPQQD(略)
-----END X509 CRL-----
証明書の検証
失効状態を確認するために、CA の ルート証明書と中間証明書を連結したチェーン証明書を作成する。この時、順番が「中間 CA 証明書」「ルート CA 証明書」の順番になるように連結する。
# cat imcacert.pem > ca_chain.pem
# cat rtcacert.pem >> ca_chain.pem
# cat ca_chain.pem
-----BEGIN CERTIFICATE-----
MIICQTCCAcigAwIBAgIUH24dfER(略)
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIB7zCCAXWgAwIBAgIUYe5aE9C(略)
-----END CERTIFICATE-----
チェーン CA 証明書を作成後にサーバ証明書を検証する。
# openssl verify -crl_check -purpose sslserver -issuer_checks -verbose -CAfile ca_chain.pem -CRLfile sv.crl newcerts/1AFA635E78829E1B323F3ECCBE86752C67AC4DB2.pem
C=JP, O=Home Lab, CN=rhel-m01.net.home
error 23 at 0 depth lookup: certificate revoked
error newcerts/1AFA635E78829E1B323F3ECCBE86752C67AC4DB2.pem: verification failed
失効前の場合は以下の様になる。
# openssl verify -crl_check -purpose sslserver -issuer_checks -verbose -CAfile ca_chain.pem -CRLfile sv.crl newcerts/1AFA635E78829E1B323F3ECCBE86752C67AC4DB2.pem
newcerts/1AFA635E78829E1B323F3ECCBE86752C67AC4DB2.pem: OK
NGINX Webサーバの HTTPS 設定
発行したチェーンのサーバ証明書を NGINX Web サーバに設定し、HTTPS 接続を可能に設定する。
基本的にはTLS設定のコメントアウト解除、及びサーバ証明書とサーバ証明書の秘密鍵を設定、ファイル配置すれば良い。また、合わせて CRL ファイルも設置する。
# mkdir -p /etc/pki/nginx/private
# cd /etc/pki/CA/server
# cp rhel-m01_chain.pem /etc/pki/nginx/server.crt
# cp private/rhel-m01_key.pem /etc/pki/nginx/private/server.key
# cp /etc/pki/CA/sv.crl /usr/share/nginx/html/
# dnf install nginx ※インストールしていない場合
# cp -a /etc/nginx/nginx.cnf /etc/nginx/nginx.cnf.bak
# vim /etc/nginx/nginx.cnf ※以下の部分を全てコメントアウト解除する
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name _;
root /usr/share/nginx/html;
ssl_certificate "/etc/pki/nginx/server.crt";
ssl_certificate_key "/etc/pki/nginx/private/server.key";
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_ciphers PROFILE=SYSTEM;
ssl_prefer_server_ciphers on;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
firewalld で「HTTP」「HTTPS」を許可していない場合は許可設定する。
# firewall-cmd --permanent --add-service https --add-service http
success
# firewall-cmd --reload
success
# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens160
sources:
services: cockpit dhcpv6-client http https ssh
ports:
protocols:
forward: yes
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
nginx を起動して HTTP/HTTPS 接続できるか Web ブラウザで確認する。
また、Web ブラウザに プライベート CA 証明書を信頼できる認証機関として登録する。
# systemctl enable nginx
Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service → /usr/lib/systemd/system/nginx.service.
# systemctl start nginx
# ss -tanl
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 511 0.0.0.0:80 0.0.0.0:*
LISTEN 0 511 0.0.0.0:443 0.0.0.0:*
LISTEN 0 128 [::]:22 [::]:*
LISTEN 0 511 [::]:80 [::]:*
LISTEN 0 511 [::]:443 [::]:*
curl で接続確認する場合は以下。チェーン CA 証明書を指定してサーバ証明書を検証している。
# curl -Iv --cacert ca_chain.pem https://rhel-m01.net.home/
* Trying fd00:0:0:d8::1:443...
* Connected to rhel-m01.net.home (fd00:0:0:d8::1) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* CAfile: ca_chain.pem
* TLSv1.0 (OUT), TLS header, Certificate Status (22):
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.2 (IN), TLS header, Certificate Status (22):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS header, Finished (20):
* TLSv1.2 (IN), TLS header, Unknown (23):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.2 (IN), TLS header, Unknown (23):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (IN), TLS header, Unknown (23):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.2 (IN), TLS header, Unknown (23):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.2 (OUT), TLS header, Finished (20):
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.2 (OUT), TLS header, Unknown (23):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
* ALPN, server accepted to use h2
* Server certificate:
* subject: C=JP; O=Home Lab; CN=rhel-m01.net.home
* start date: Dec 30 12:19:44 2024 GMT
* expire date: Dec 30 12:19:44 2025 GMT
* subjectAltName: host "rhel-m01.net.home" matched cert's "rhel-m01.net.home"
* issuer: C=JP; O=Home Lab; CN=RHEL INTERMEDIATE CA
* SSL certificate verify ok.
* Using HTTP2, server supports multi-use
* Connection state changed (HTTP/2 confirmed)
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
* TLSv1.2 (OUT), TLS header, Unknown (23):
* TLSv1.2 (OUT), TLS header, Unknown (23):
* TLSv1.2 (OUT), TLS header, Unknown (23):
* Using Stream ID: 1 (easy handle 0x556107fca680)
* TLSv1.2 (OUT), TLS header, Unknown (23):
> HEAD / HTTP/2
> Host: rhel-m01.net.home
> user-agent: curl/7.76.1
> accept: */*
>
* TLSv1.2 (IN), TLS header, Unknown (23):
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* TLSv1.2 (IN), TLS header, Unknown (23):
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* old SSL session ID is stale, removing
* TLSv1.2 (IN), TLS header, Unknown (23):
* Connection state changed (MAX_CONCURRENT_STREAMS == 128)!
* TLSv1.2 (OUT), TLS header, Unknown (23):
* TLSv1.2 (IN), TLS header, Unknown (23):
* TLSv1.2 (IN), TLS header, Unknown (23):
< HTTP/2 200
HTTP/2 200
< server: nginx/1.20.1
server: nginx/1.20.1
< date: Tue, 31 Dec 2024 07:42:46 GMT
date: Tue, 31 Dec 2024 07:42:46 GMT
< content-type: text/html
content-type: text/html
< content-length: 5909
content-length: 5909
< last-modified: Mon, 09 Aug 2021 11:43:42 GMT
last-modified: Mon, 09 Aug 2021 11:43:42 GMT
< etag: "611114ee-1715"
etag: "611114ee-1715"
< accept-ranges: bytes
accept-ranges: bytes
<
* Connection #0 to host rhel-m01.net.home left intact
【参考URL】
楕円曲線暗号の秘密鍵にパスフレーズを追加する【openssl】
OpenSSL ECDSA署名検証の仕組みおさらい
opensslでSANを含んだオレオレ証明書を作ってみる