サーバー認証
まずはじめに、サーバー認証を行いHTTPSで通信できるようにする。
サーバー認証に使用するファイルの保存場所を作成する
1 | mkdir /etc/nginx/server_certificates |
CA(Certification Authority)鍵を作成する
1 | openssl genrsa -des3 -out server.key 4096 |
CA(Certification Authority)証明書を作成する
1 | openssl req -new -x509 -days 365 -key server.key -out server.crt |
パスワードファイルを作成する
CA鍵のパスワードをNginxに渡すためパスワードファイル/etc/nginx/server_certificates/ssl_pass_file.txtを作成する。
1 | p4ssw0rd |
NginXの設定
設定ファイル/etc/nginx/conf.d/default.confに以下を追記する
1 | ssl_protocols TLSv1 TLSv1.1 TLSv1.2; |
クライアント認証
クライアント認証に使用するファイルの保存場所を作成する
1 | mkdir /etc/nginx/client_certificates |
CA(Certification Authority)鍵を作成する
1 | openssl genrsa -des3 -out ca.key 4096 |
CA(Certification Authority)証明書を作成する
1 | openssl req -new -x509 -days 365 -key ca.key -out ca.crt |
クライアント証明書を作成する
1 | openssl genrsa -des3 -out user.key 4096 |
クライアント証明書に署名する
1 | openssl req -new -key user.key -out user.csr |
CSR(Certificate Signing Request)に署名する
1 | openssl x509 -req -days 365 -in user.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out user.crt |
PKCS(Public Key Cryptography Standards)を作成する
1 | openssl pkcs12 -export -out user.pfx -inkey user.key -in user.crt -certfile ca.crt |
NginXの設定
設定ファイル/etc/nginx/conf.d/default.confに以下を追記する
1 | ssl_client_certificate "/etc/nginx/client_certificates/ca.crt"; |
最終的な設定ファイルは以下のようになる
1 | server { |
確認
クライアント証明書をインポートしていない場合
オレオレ認証なので–insecureオプションを付与してcurlコマンドを実行する。
1 | curl --insecure https://localhost/ |
サーバーログにはHTTPステータスコード400のエラーが記録される。
1 | nginx01 | 192.168.64.1 - - [07/Mar/2022:02:57:45 +0000] "GET / HTTP/1.1" 400 237 "-" "curl/7.74.0" "-" |
クライアント証明書をインポートした場合
1 | curl --insecure --key ./client_certificates/user.key --cert ./client_certificates/user.crt https |