OpenSSL x509 コマンドリファレンス:主要オプションと活用例
OpenSSL は、暗号化関連のタスクを実行するための強力なツールキットです。その中でも openssl x509
コマンドは、X.509 証明書を処理するための最も重要なコマンドの一つです。本記事では、openssl x509
コマンドの主要なオプションを網羅的に解説し、具体的な活用例を通して、その強力な機能を最大限に引き出す方法を説明します。
1. X.509 証明書とは
X.509 証明書は、公開鍵暗号基盤 (PKI) において、公開鍵とその鍵の所有者 (例えば、ウェブサイト、個人、組織など) を結びつけるデジタルドキュメントです。信頼できる認証局 (CA) によって署名され、ウェブサイトの認証、電子メールの暗号化、デジタル署名など、様々なセキュリティ関連のタスクに使用されます。
X.509 証明書には、以下のような情報が含まれています。
- バージョン番号: 証明書の形式バージョン。
- シリアル番号: 発行 CA によって割り当てられた一意の識別子。
- 署名アルゴリズム ID: 証明書の署名に使用された暗号化アルゴリズム (例: SHA256withRSA)。
- 発行者名: 証明書を発行した CA の識別名 (DN)。
- 有効期間: 証明書の有効期間の開始日と終了日。
- 件名名: 証明書が適用されるエンティティの識別名 (DN)。
- 件名の公開鍵情報: 件名の公開鍵と関連するアルゴリズム。
- 発行者の固有 ID: 発行者のオプションの一意の識別子。
- 件名の固有 ID: 件名のオプションの一意の識別子。
- 拡張: 証明書に追加情報を提供する拡張機能のコレクション (例: サブジェクト代替名、キーの使用法)。
- 証明書の署名: 発行者の秘密鍵で暗号化されたハッシュ値。証明書の完全性を保証します。
- 署名アルゴリズム パラメータ: 署名アルゴリズムに関連するパラメータ。
2. openssl x509
コマンドの基本的な構文
openssl x509
コマンドの基本的な構文は以下の通りです。
bash
openssl x509 [オプション] [入力ファイル]
openssl x509
: コマンド自体。[オプション]
: コマンドの動作を制御するオプション。[入力ファイル]
: 処理する X.509 証明書ファイルへのパス。入力ファイルを指定しない場合、標準入力から読み込まれます。
3. 主要オプションの詳細解説と活用例
以下に、openssl x509
コマンドでよく使用される主要なオプションを、詳細な説明と具体的な活用例とともに示します。
3.1. ファイル入出力関連オプション
-in <ファイル名>
: 入力ファイルを指定します。デフォルトでは標準入力から読み込みます。- 例:
openssl x509 -in certificate.pem
- 例:
-out <ファイル名>
: 出力ファイルを指定します。デフォルトでは標準出力に出力します。- 例:
openssl x509 -in certificate.pem -out certificate.txt
- 例:
-inform <フォーマット>
: 入力ファイルの形式を指定します。サポートされる形式はDER
,PEM
,NETSCAPE
です。デフォルトはPEM
です。- 例:
openssl x509 -in certificate.der -inform DER
- 例:
-outform <フォーマット>
: 出力ファイルの形式を指定します。サポートされる形式はDER
,PEM
,NETSCAPE
です。デフォルトはPEM
です。- 例:
openssl x509 -in certificate.pem -out certificate.der -outform DER
- 例:
3.2. 情報表示関連オプション
-text
: 証明書の内容をテキスト形式で表示します。最も基本的なオプションで、証明書の詳細な情報を確認する際に使用します。- 例:
openssl x509 -in certificate.pem -text
- 例:
-noout
: 証明書自体の内容の出力を抑制します。他のオプション (例えば-subject
,-issuer
など) と組み合わせて使用し、特定の情報のみを表示する場合に便利です。- 例:
openssl x509 -in certificate.pem -noout -subject
- 例:
-subject
: 証明書の Subject (件名) を表示します。- 例:
openssl x509 -in certificate.pem -noout -subject -nameopt RFC2253
- 例:
-issuer
: 証明書の Issuer (発行者) を表示します。- 例:
openssl x509 -in certificate.pem -noout -issuer -nameopt RFC2253
- 例:
-serial
: 証明書のシリアル番号を 16 進数で表示します。- 例:
openssl x509 -in certificate.pem -noout -serial
- 例:
-dates
: 証明書の有効期間の開始日と終了日を表示します。- 例:
openssl x509 -in certificate.pem -noout -dates
- 例:
-purpose
: 証明書の用途を表示します。証明書の拡張機能 (例えば、extendedKeyUsage
) に基づいて、証明書が使用できる用途 (例えば、SSL Client Authentication, SSL Server Authentication) を判断します。- 例:
openssl x509 -in certificate.pem -noout -purpose
- 例:
-modulus
: 証明書の公開鍵の modulus を表示します。- 例:
openssl x509 -in certificate.pem -noout -modulus
- 例:
-fingerprint
: 証明書のフィンガープリント (ハッシュ値) を表示します。デフォルトは SHA1 ですが、-sha256
,-sha512
などのオプションで変更できます。- 例:
openssl x509 -in certificate.pem -noout -fingerprint -sha256
- 例:
-hash
: 証明書の Subject Name のハッシュ値を表示します。証明書の Subject Name をキーとして、証明書をディレクトリに配置する際に使用されます。- 例:
openssl x509 -in certificate.pem -noout -hash
- 例:
-email
: 証明書の Subject Alternative Name (SAN) 拡張に含まれる電子メールアドレスを表示します。- 例:
openssl x509 -in certificate.pem -noout -email
- 例:
-nameopt <オプション>
: 名前 (Subject Name, Issuer Name) の表示形式を制御します。RFC2253
,oneline
,multiline
などのオプションを指定できます。- 例:
openssl x509 -in certificate.pem -noout -subject -nameopt RFC2253
(RFC2253 形式で Subject Name を表示)
- 例:
3.3. 証明書検証関連オプション
-verify
: 証明書を検証します。ルート CA 証明書が信頼されているかどうかを確認します。- 例:
openssl x509 -in certificate.pem -verify
- 例:
-CAfile <ファイル名>
: 信頼できる CA 証明書を含むファイル (通常は PEM 形式) を指定します。証明書の検証時に、このファイルに含まれる CA 証明書をルートとして使用します。- 例:
openssl x509 -in certificate.pem -verify -CAfile ca-bundle.pem
- 例:
-CApath <ディレクトリ>
: 信頼できる CA 証明書を含むディレクトリを指定します。このディレクトリ内の各証明書は、ハッシュ値に基づいた名前で保存されている必要があります。c_rehash
コマンドを使用して、ディレクトリ内の証明書を適切な形式に変換できます。- 例:
openssl x509 -in certificate.pem -verify -CApath /etc/ssl/certs
- 例:
-checkend <秒数>
: 証明書の有効期限切れまでの秒数を指定します。指定された秒数以内に有効期限が切れる場合、エラーを返します。- 例:
openssl x509 -in certificate.pem -checkend 86400
(24 時間以内に有効期限が切れるかどうかを確認)
- 例:
-trustCA
: CA 証明書自体を信頼するように指定します。通常、自己署名証明書を検証する際に使用します。- 例:
openssl x509 -in self-signed.pem -trustCA -verify
- 例:
3.4. 証明書変換関連オプション
-x509toreq
: 証明書から証明書署名要求 (CSR) を生成します。秘密鍵は必要ありません。- 例:
openssl x509 -in certificate.pem -x509toreq -out certificate.csr
- 例:
-req
: CSR を入力として処理します。通常、CSR の内容を表示したり、CSR から証明書を作成したりする際に使用します。- 例:
openssl x509 -in certificate.csr -req -text
(CSR の内容をテキスト形式で表示)
- 例:
3.5. その他のオプション
-days <日数>
: 自己署名証明書を作成する際の有効期間を日数で指定します。-signkey
オプションと組み合わせて使用します。- 例:
openssl x509 -req -in certificate.csr -signkey private.key -out certificate.pem -days 365
(CSR から 365 日間有効な自己署名証明書を作成)
- 例:
-signkey <ファイル名>
: 自己署名証明書を作成する際に使用する秘密鍵ファイルを指定します。- 例:
openssl x509 -req -in certificate.csr -signkey private.key -out certificate.pem -days 365
- 例:
-addtrust <OID>
: 証明書のextendedKeyUsage
拡張に、指定された OID (Object Identifier) を追加します。- 例:
openssl x509 -in certificate.pem -addtrust 1.3.6.1.5.5.7.3.1
(SSL Server Authentication 用途を追加)
- 例:
-addreject <OID>
: 証明書のextendedKeyUsage
拡張から、指定された OID を削除します。- 例:
openssl x509 -in certificate.pem -addreject 1.3.6.1.5.5.7.3.1
(SSL Server Authentication 用途を削除)
- 例:
-extensions <セクション名>
: OpenSSL の設定ファイル (openssl.cnf
) の指定されたセクションにある拡張機能を使用して証明書を作成します。自己署名証明書を作成する際に、subjectAltName
などの拡張機能を追加する場合に便利です。- 例:
openssl x509 -req -in certificate.csr -signkey private.key -out certificate.pem -days 365 -extensions v3_ca
(OpenSSL 設定ファイルのv3_ca
セクションにある拡張機能を使用)
- 例:
4. 活用例:具体的なシナリオ別
以下に、openssl x509
コマンドの具体的な活用例を、シナリオ別に示します。
4.1. 証明書の内容を確認する
“`bash
証明書の内容をテキスト形式で詳細に表示
openssl x509 -in certificate.pem -text
証明書の Subject Name を表示 (RFC2253 形式)
openssl x509 -in certificate.pem -noout -subject -nameopt RFC2253
証明書の Issuer Name を表示
openssl x509 -in certificate.pem -noout -issuer
証明書のシリアル番号を表示
openssl x509 -in certificate.pem -noout -serial
証明書の有効期間を表示
openssl x509 -in certificate.pem -noout -dates
証明書の SHA256 フィンガープリントを表示
openssl x509 -in certificate.pem -noout -fingerprint -sha256
“`
4.2. 証明書の検証を行う
“`bash
証明書を検証 (デフォルトの CA 証明書を使用)
openssl x509 -in certificate.pem -verify
証明書を検証 (特定の CA 証明書ファイルを使用)
openssl x509 -in certificate.pem -verify -CAfile ca-bundle.pem
証明書を検証 (特定の CA 証明書ディレクトリを使用)
openssl x509 -in certificate.pem -verify -CApath /etc/ssl/certs
証明書の有効期限が 1 日以内に切れるかどうかを確認
openssl x509 -in certificate.pem -checkend 86400
“`
4.3. 証明書の形式を変換する
“`bash
PEM 形式の証明書を DER 形式に変換
openssl x509 -in certificate.pem -out certificate.der -outform DER
DER 形式の証明書を PEM 形式に変換
openssl x509 -in certificate.der -inform DER -out certificate.pem -outform PEM
“`
4.4. 証明書から CSR を生成する
“`bash
証明書から CSR を生成
openssl x509 -in certificate.pem -x509toreq -out certificate.csr
“`
4.5. CSR の内容を確認する
“`bash
CSR の内容をテキスト形式で表示
openssl x509 -in certificate.csr -req -text
“`
4.6. 自己署名証明書を作成する (OpenSSL 設定ファイルを使用)
まず、OpenSSL 設定ファイル (openssl.cnf
) を編集し、以下のセクションを追加または修正します。
“`
[req]
distinguished_name = req_distinguished_name
x509_extensions = v3_ca
[req_distinguished_name]
countryName = Country Name (2 letter code)
countryName_default = JP
stateOrProvinceName = State or Province Name (full name)
stateOrProvinceName_default = Tokyo
localityName = Locality Name (eg, city)
localityName_default = Shibuya
organizationName = Organization Name (eg, company)
organizationName_default = Example Inc.
commonName = Common Name (e.g. server FQDN or YOUR name)
commonName_default = example.com
[v3_ca]
subjectAltName = DNS:example.com, DNS:www.example.com, IP:127.0.0.1
basicConstraints = CA:TRUE
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always, issuer:always
“`
次に、以下のコマンドを実行して自己署名証明書を作成します。
“`bash
秘密鍵を生成
openssl genrsa -out private.key 2048
CSR を生成 (上記の OpenSSL 設定ファイルを使用)
openssl req -new -key private.key -out certificate.csr -config openssl.cnf
自己署名証明書を作成 (上記の OpenSSL 設定ファイルを使用)
openssl x509 -req -in certificate.csr -signkey private.key -out certificate.pem -days 365 -extensions v3_ca -extfile openssl.cnf
“`
この例では、subjectAltName
拡張に複数の DNS 名と IP アドレスを追加しています。
5. 注意点とトラブルシューティング
- ファイル形式:
openssl x509
コマンドは、PEM 形式がデフォルトです。DER 形式のファイルを処理する場合は、-inform DER
オプションを必ず指定してください。 - CA 証明書: 証明書の検証を行う場合、適切な CA 証明書 (または CA 証明書ディレクトリ) を指定する必要があります。
-CAfile
または-CApath
オプションを使用します。 - 権限: 証明書ファイルや秘密鍵ファイルへの適切なアクセス権限が必要です。
- OpenSSL 設定ファイル: 自己署名証明書を作成する際に、OpenSSL 設定ファイルを使用すると、拡張機能を簡単に追加できます。
- エラーメッセージ: エラーメッセージをよく読んで、問題の原因を特定してください。例えば、”unable to load certificate” というエラーメッセージは、証明書ファイルの形式が正しくないか、ファイルが存在しないことを示しています。
6. まとめ
openssl x509
コマンドは、X.509 証明書を処理するための非常に強力なツールです。本記事で解説した主要なオプションと活用例を理解することで、証明書の詳細な情報の確認、検証、形式変換など、様々なタスクを効率的に実行できます。OpenSSL のドキュメントやオンラインリソースを参考に、さらに深く学習し、openssl x509
コマンドを使いこなせるようにしましょう。