OpenSSL x509 SAN (Subject Alternative Name) の設定と確認:徹底解説
SSL/TLS証明書は、ウェブサイトやサービスが安全な接続を確立するために不可欠な要素です。その中でも、Subject Alternative Name (SAN) は、証明書が複数のドメイン名、IPアドレス、その他の識別子を保護するために不可欠な拡張機能です。この記事では、OpenSSLを使用してx509証明書にSANを設定し、その設定を確認する方法について、詳細な手順と具体的な例を交えながら解説します。
1. SAN (Subject Alternative Name) とは何か?
SAN (Subject Alternative Name) は、X.509証明書の拡張フィールドの一つであり、証明書が有効である複数のホスト名(ドメイン名)、IPアドレス、またはその他の識別子を列挙するために使用されます。従来のCommon Name (CN) フィールドは一つのホスト名しか指定できませんでしたが、SANを使用することで、一つの証明書で複数のホストをカバーすることが可能になります。
1.1 SANの重要性
- 柔軟性と効率性: 一つの証明書で複数のドメイン名、サブドメイン名、IPアドレスをカバーできるため、証明書の管理が簡素化され、コストを削減できます。
- セキュリティの向上: すべての関連ドメイン名が証明書に明示的に含まれているため、中間者攻撃のリスクを軽減できます。
- ブラウザの互換性: 近年のブラウザは、SANフィールドをより重視する傾向にあり、SANフィールドのない証明書に対して警告を表示する場合があります。
- 様々な用途への対応: ウェブサイトの保護だけでなく、メールサーバ、VPNサーバ、その他のネットワークサービスなど、様々な用途でSANを活用できます。
1.2 SANの種類
SANには、様々なタイプが存在します。以下に代表的なものを紹介します。
- dNSName: 最も一般的なタイプであり、ドメイン名またはサブドメイン名を指定するために使用されます (例:
www.example.com
,mail.example.com
)。 - iPAddress: IPアドレスを指定するために使用されます (例:
192.168.1.1
,2001:db8::1
)。 - email: メールアドレスを指定するために使用されます (例:
[email protected]
)。 - URI: Uniform Resource Identifier (URI) を指定するために使用されます (例:
https://example.com/api
)。 - otherName: 特定の組織やアプリケーション固有の識別子を指定するために使用されます。
2. OpenSSLによるSANの設定
OpenSSLは、SSL/TLSプロトコルを実装するための強力なオープンソースツールキットです。これを使用して、証明書署名要求 (CSR) を作成し、SANを証明書に追加することができます。
2.1 OpenSSLのインストール
まず、OpenSSLがシステムにインストールされていることを確認してください。ほとんどのLinuxディストリビューションでは、パッケージマネージャーを使用して簡単にインストールできます。
- Debian/Ubuntu:
sudo apt-get update && sudo apt-get install openssl
- CentOS/RHEL:
sudo yum install openssl
- macOS:
brew install openssl
2.2 設定ファイルの作成 (openssl.cnf)
SANを設定するための最も一般的な方法は、OpenSSL設定ファイル (openssl.cnf
) を使用することです。このファイルで、証明書の生成に関する様々な設定を定義します。
-
openssl.cnf
ファイルの場所の確認:まず、OpenSSL設定ファイルの場所を確認します。通常、
/etc/ssl/openssl.cnf
または/usr/lib/ssl/openssl.cnf
にあります。コマンドラインでopenssl version -d
を実行すると、OpenSSLの設定ディレクトリが表示されます。
2. 設定ファイルの編集または作成:既存の
openssl.cnf
ファイルを編集するか、新しいファイルを作成します。新しいファイルを作成する場合は、既存のファイルをコピーして、必要な変更を加えることをお勧めします。bash
sudo cp /etc/ssl/openssl.cnf /etc/ssl/openssl.cnf.bak # バックアップを作成
sudo nano /etc/ssl/openssl.cnf -
設定ファイルの修正:
openssl.cnf
ファイルに以下のセクションを追加または修正します。-
[req]
セクション: CSR (Certificate Signing Request) の作成に関する設定を定義します。[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req
prompt = nodistinguished_name = req_distinguished_name
: 識別名のセクションを指定します。req_extensions = v3_req
: 拡張設定のセクションを指定します。prompt = no
: 対話型の入力を無効にします(自動化に役立ちます)。
-
[req_distinguished_name]
セクション: 識別名 (DN) のフィールドを定義します。[req_distinguished_name]
C = US
ST = California
L = San Francisco
O = Example Company
OU = IT Department
CN = example.comC
: 国コード (2文字)ST
: 都道府県L
: 市町村O
: 組織名OU
: 組織単位名CN
: Common Name (証明書の主要なドメイン名)
重要:
CN
は必須フィールドですが、SANを使用する場合は、ブラウザによっては無視される場合があります。 -
[v3_req]
セクション: 証明書の拡張設定を定義します。SANの設定はここで行います。[v3_req]
basicConstraints = CA:FALSE
keyUsage = digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth, clientAuth
subjectAltName = @alt_namesbasicConstraints = CA:FALSE
: この証明書がCA証明書ではないことを示します。keyUsage = digitalSignature, keyEncipherment
: 証明書のキーの使用目的を指定します。extendedKeyUsage = serverAuth, clientAuth
: 証明書の拡張キーの使用目的を指定します。subjectAltName = @alt_names
: SANの設定をalt_names
セクションから読み込むことを指定します。
-
[alt_names]
セクション: SANのエントリを定義します。[alt_names]
DNS.1 = example.com
DNS.2 = www.example.com
DNS.3 = mail.example.com
IP.1 = 192.168.1.10
IP.2 = 2001:db8::1DNS.n = <ドメイン名>
:n
は連番で、ドメイン名を指定します。IP.n = <IPアドレス>
:n
は連番で、IPアドレスを指定します。- 必要に応じて、
email
、URI
、otherName
などの他のタイプのSANエントリを追加できます。
-
2.3 証明書署名要求 (CSR) の作成
openssl.cnf
ファイルを編集したら、次のコマンドを使用してCSRを作成します。
bash
openssl req -new -keyout private.key -out csr.pem -config /etc/ssl/openssl.cnf
req -new
: 新しいCSRを作成することを指定します。-keyout private.key
: 秘密鍵をprivate.key
ファイルに保存することを指定します。-out csr.pem
: CSRをcsr.pem
ファイルに保存することを指定します。-config /etc/ssl/openssl.cnf
: 使用するOpenSSL設定ファイルを指定します。
このコマンドを実行すると、private.key
(秘密鍵) と csr.pem
(CSR) の2つのファイルが生成されます。private.key
は安全な場所に保管し、決して共有しないでください。
2.4 自己署名証明書の作成 (テスト用)
認証局 (CA) から署名された証明書を取得するには、CSRをCAに提出する必要があります。しかし、テスト目的で自己署名証明書を作成することもできます。
bash
openssl x509 -req -days 365 -in csr.pem -signkey private.key -out certificate.pem -extfile /etc/ssl/openssl.cnf -extensions v3_req
x509 -req
: CSRから証明書を作成することを指定します。-days 365
: 証明書の有効期間を365日に設定します。-in csr.pem
: 入力CSRファイルを指定します。-signkey private.key
: 秘密鍵を使用して証明書に署名することを指定します。-out certificate.pem
: 証明書をcertificate.pem
ファイルに保存することを指定します。-extfile /etc/ssl/openssl.cnf
: OpenSSL設定ファイルを指定します。-extensions v3_req
:v3_req
セクションの拡張設定を適用することを指定します。
注意: 自己署名証明書は、ブラウザやクライアントによって信頼されないため、本番環境では使用しないでください。
2.5 CA署名証明書の取得 (本番環境用)
本番環境で使用する証明書は、信頼できる認証局 (CA) から取得する必要があります。
- CSRをCAに提出:
csr.pem
ファイルをCAに提出し、証明書の発行を依頼します。 - 証明書のダウンロード: CAから署名された証明書 (
certificate.pem
など) をダウンロードします。 - 中間証明書のインストール: CAによっては、中間証明書 (intermediate certificate) をインストールする必要がある場合があります。中間証明書は、CAのウェブサイトからダウンロードできます。
3. SANの設定の確認
証明書が生成されたら、SANの設定が正しく行われていることを確認する必要があります。
3.1 OpenSSLコマンドによる確認
OpenSSLコマンドを使用して、証明書の内容を解析し、SANフィールドを確認することができます。
bash
openssl x509 -in certificate.pem -text -noout
このコマンドを実行すると、証明書の内容がテキスト形式で表示されます。Subject Alternative Name
セクションを探し、設定したドメイン名、IPアドレス、その他の識別子が正しく表示されていることを確認してください。
例:
Subject Alternative Name:
DNS:example.com, DNS:www.example.com, DNS:mail.example.com, IP Address:192.168.1.10, IP Address:2001:db8::1
3.2 ブラウザでの確認
ブラウザでウェブサイトにアクセスし、証明書情報を確認することもできます。
- ウェブサイトにアクセス: 保護されたウェブサイト (HTTPS) にアクセスします。
- 証明書情報の表示: ブラウザのアドレスバーにある鍵のアイコンをクリックし、証明書情報を表示します。
- SANフィールドの確認: 証明書の詳細情報に、
Subject Alternative Name
(SAN) フィールドが表示されます。設定したドメイン名、IPアドレス、その他の識別子が正しく表示されていることを確認してください。
3.3 コマンドラインツールでの確認 (例: curl
)
curl
コマンドを使用して、ウェブサイトの証明書情報を取得し、SANフィールドを確認することもできます。
bash
curl -v https://example.com 2>&1 | openssl x509 -text -noout
このコマンドは、example.com
の証明書情報を取得し、OpenSSLで解析して表示します。Subject Alternative Name
セクションを探し、設定したSANフィールドが正しく表示されていることを確認してください。
4. SAN設定のトラブルシューティング
SANの設定がうまくいかない場合は、以下の点を確認してください。
openssl.cnf
ファイルの構文:openssl.cnf
ファイルの構文が正しいことを確認してください。特に、[alt_names]
セクションのエントリが正しい形式で記述されていることを確認してください (例:DNS.1 = example.com
)。- CSRの生成: CSRを生成する際に、
-config
オプションで正しいopenssl.cnf
ファイルを指定していることを確認してください。 - 証明書の生成: 自己署名証明書を作成する場合は、
-extfile
および-extensions
オプションでopenssl.cnf
ファイルと拡張設定を指定していることを確認してください。 - CAの要件: CAによっては、SANの設定に関する特定の要件がある場合があります。CAのドキュメントを確認し、要件に従っていることを確認してください。
- 証明書の有効期間: 証明書の有効期間が切れていないことを確認してください。
- 中間証明書: CAによっては、中間証明書をインストールする必要がある場合があります。中間証明書が正しくインストールされていることを確認してください。
- ブラウザのキャッシュ: ブラウザのキャッシュをクリアし、再度ウェブサイトにアクセスしてみてください。
- DNSの設定: ドメイン名が正しくDNSに登録されていることを確認してください。
5. SAN設定のベストプラクティス
- すべての関連ドメイン名をSANに含める: 保護するすべてのドメイン名、サブドメイン名をSANに含めるようにしてください。
- ワイルドカード証明書の利用: 複数のサブドメインをカバーする場合は、ワイルドカード証明書 (例:
*.example.com
) の利用を検討してください。ただし、ワイルドカード証明書はセキュリティ上のリスクがあるため、慎重に検討する必要があります。 - 有効期間の短い証明書の利用: 証明書の有効期間は短く設定することをお勧めします。これにより、秘密鍵が漏洩した場合のリスクを軽減できます。
- 証明書の自動更新: Let’s Encryptなどのツールを使用して、証明書の自動更新を設定することをお勧めします。これにより、証明書の期限切れによるサービス停止を防ぐことができます。
- 秘密鍵の保護: 秘密鍵は安全な場所に保管し、アクセス制限を設けてください。
6. まとめ
SAN (Subject Alternative Name) は、SSL/TLS証明書において、複数のドメイン名、IPアドレス、その他の識別子を保護するために不可欠な拡張機能です。OpenSSLを使用することで、x509証明書にSANを簡単に設定し、その設定を確認することができます。この記事で解説した手順とベストプラクティスに従って、安全で信頼性の高いSSL/TLS環境を構築してください。
この記事は、OpenSSL x509 SAN (Subject Alternative Name) の設定と確認に関する詳細な情報を提供することを目的としています。この情報が、読者の皆様のSSL/TLS環境の構築と管理に役立つことを願っています。