2026年6月1日
2026年6月1日
NginxでMTLSクライアント証明書認証を設定する方法
はじめに
HTTPS接続ではサーバーがクライアントを認証するだけでなく、逆も成り立つことが要求されるケースがあります。特に金融や医療分野などのセキュリティ要件の高いシステムでは、クライアントからの接続を確実に認証することが求められます。この記事では、Nginxを使用してMTLS(Mutual Transport Layer Security)クライアント証明書認証を設定する方法を解説します。
症状・背景
このテーマが必要になる主な場面:
- セキュリティ要件の高いシステムで、接続先がサーバーとクライアント両方を厳密に確認する必要がある場合。
- ローカルネットワーク内での信頼関係のあるクライアントからの接続認証が必要な場合。
手順・設定方法
ステップ1: 実行可能なSSL証明書とプライベートキーの準備
# 既存のSSL証明書とプライベートキーを使用する場合
cp /path/to/ssl_certificate.crt /etc/nginx/certs/
cp /path/to/private.key /etc/nginx/certs/
# 新規で生成する場合は使用しない
ステップ2: Nginxコンフィグレーションファイルの編集
# /etc/nginx/sites-available/default を編集する
nano /etc/nginx/sites-available/default
# 以下のように追加または修正
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/nginx/certs/ssl_certificate.crt;
ssl_certificate_key /etc/nginx/certs/private.key;
ssl_client_certificate /etc/nginx/certs/client_ca.pem;
ssl_verify_client on;
}
ステップ3: クライアント証明書の検証と認証
# 有効なCAから発行されたクライアント証明書を用意する
cp /path/to/client_ca.pem /etc/nginx/certs/
# 設定ファイルに追加または修正
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/nginx/certs/ssl_certificate.crt;
ssl_certificate_key /etc/nginx/certs/private.key;
ssl_client_certificate /etc/nginx/certs/client_ca.pem;
ssl_verify_client on;
}
ステップ4: Nginxの再起動と確認
# Nginxを再起動して設定を適用する
systemctl restart nginx
# クライアントからの接続試験を行う
openssl s_client -connect example.com:443 -CAfile /etc/nginx/certs/client_ca.pem -cert /path/to/client_certificate.crt -key /path/to/private.key
注意事項
- MTLS設定はサーバーとクライアント両方で厳密に管理することが必要です。
- クライアント証明書の発行は信頼できるCAを使用することを確認してください。
- 設定変更後は、Nginxのログファイルを定期的にチェックして問題を把握します。
まとめ
1. SSL証明書とプライベートキーの準備: 必要な証明書とキーをサーバーに配置します。
2. Nginxコンフィグレーションファイルの編集: ssl_certificate、ssl_certificate_key、ssl_client_certificate、ssl_verify_clientを設定します。
3. クライアント証明書の検証と認証: 有効なCAから発行されたクライアント証明書を使用し、サーバー側で認証を行います。
4. Nginxの再起動と確認: テスト用にSSL接続を試みます。
関連記事: