SSLクライアント認証に関係する中間証明局とnginxの設定
SSLクライアント認証に関係する中間証明局とnginxの設定
火, 11月 12, 2024
やりたいこと
- クライアント認証向けに自己CAで署名したクライアント証明書を作成する
- nginxでクライアント認証周りの設定をする
自己CAと署名
- CAの秘密鍵:
ca.key
- CA証明書:
ca.crt
を作成する.
中間CAの秘密鍵を作成.
openssl genrsa -out ca.key 4096
自己署名中間CA証明書を作成.
openssl req -new -x509 -days 365 -key ca.key -out ca.crt
有効期限を365日としている.関連した情報を聞かれるので回答する.
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:XXX
Locality Name (eg, city) []:XXX
Organization Name (eg, company) [Internet Widgits Pty Ltd]:XXX
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:xxx.xxx.xxx
Email Address []:xxx@xxx.xxx
クライアント証明書の作成
この辺は以前のポストも参照.
- クライアント秘密鍵:
client.key
- クライアント証明書要求:
client.csr
- クライアント証明書:
client.crt
を作成する.
クライアント秘密鍵を作成する.
openssl genrsa -out client.key 4096
クライアント証明書要求を作成する.
openssl req -new -key client.key -out client.csr
関連した情報を聞かれるので回答する.
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:Tokyo
Locality Name (eg, city) []:Shibuya
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Example, Inc.
Organizational Unit Name (eg, section) []:Customer Support
Common Name (e.g. server FQDN or YOUR name) []:
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
クライアント証明書を作成する.
openssl x509 -req -days 365 -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt
有効期限を365日としている.
ブラウザなどへインポートするために,クライアント証明書とクライアント秘密鍵をPKCS#12ファイルへまとめる.
openssl pkcs12 -export -out client.p12 -inkey client.key -in client.crt -certfile ca.crt
nginxでのクライアント認証の設定
以下での運用を想定.
- バーチャルホスト
- サーバー証明書はLet’s Encryptで発行
- 先ほど作成した
ca.crt
は/etc/nginx/client_certificates
に保存
server {
listen 80;
server_name xxx.xxx.xxx;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305;
server_name xxx.xxx.xxx;
root /var/www/web;
index index.html index.htm;
ssl_certificate "/etc/letsencrypt/live/xxx.xxx.xxx/fullchain.pem";
ssl_certificate_key "/etc/letsencrypt/live/xxx.xxx.xxx/privkey.pem";
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_client_certificate "/etc/nginx/client_certificates/ca.crt";
ssl_verify_client on;
ssl_verify_depth 2;
location / {
try_files $uri $uri/ =404;
}
}
確認
client.p12
をブラウザに読み込み,クライアント認証によりアクセスできることを確認する.
必要に応じて,.mobileconfig
を作成してiOSデバイスへの読み込みなどをおこなう(参照:iOS | WebページのためのSSLクライアント認証の設定).
最終更新日