openssl req
CSR(Certificate Signing Request)は、証明書の発行を CA へ要求するためのデータである。主にSubject、 公開鍵、要求する拡張、秘密鍵で作成したCSR自身の署名が含まれる。
CSRの作成
Section titled “CSRの作成”既存の秘密鍵を使用する場合:
openssl req -new \ -key server.key \ -out server.csr-subj を指定していなければ、Subjectの入力を対話形式で求められる。
Debianでは、 -config を省略すると通常は /etc/ssl/openssl.cnf が使用される。この設定ファイルの [ req ] と distinguished_name によって、対話時の入力項目が決まる。
秘密鍵とCSRを同時に作成する
Section titled “秘密鍵とCSRを同時に作成する”openssl req \ -newkey rsa:2048 \ -noenc \ -keyout server.key \ -out server.csrこの方法では秘密鍵とCSRを一度に作成できる。鍵の生成条件を細かく確認しながら作業する場合は、先に openssl genpkey で秘密鍵を作成し、 -key で読み込む方が流れを把握しやすい。
CSRの確認
Section titled “CSRの確認”openssl req \ -in server.csr \ -text \ -verify \ -noout確認できる主な内容:
- Subject
- 公開鍵
- 署名アルゴリズム
- CSRに含まれる拡張要求
- CSR自身の署名が正しいか
-verify が確認するのはCSR自身の署名であり、 証明書チェーン ではない。
自己署名証明書の作成
Section titled “自己署名証明書の作成”openssl req -x509 -new \ -key ca.key \ -days 3650 \ -sha256 \ -out ca.crt-x509 を付けるとCSRではなく自己署名証明書が出力される。Root CA証明書や一時的な検証用証明書の作成に使用できる。
よく使うオプション
Section titled “よく使うオプション”CSRではなく自己署名証明書を作成する。
-x509このオプションを使用した場合、 -days、 -extensions、 -addext などは作成する証明書に対して適用される。
新しいCSRを作成する。
-new-key を指定すると、その秘密鍵に対応する公開鍵をCSRへ含める。 -key も -newkey も指定しない場合は、新しい秘密鍵が生成される。
-newkey
Section titled “-newkey”新しい秘密鍵を生成し、その鍵を使ってCSRまたは自己署名証明書を作成する。 -new も暗黙的に有効になる。
-newkey rsa:2048-keyout
Section titled “-keyout”-newkey などで新しく生成した秘密鍵の保存先を指定する。
-keyout server.key-noenc
Section titled “-noenc”新しく生成する秘密鍵を暗号化しない。
-noenc旧オプションの -nodes はOpenSSL 3.0以降で非推奨になっているため、 -noenc を使用する。
-x509 で作成する証明書の有効日数を指定する。
-days 3650-x509 を使用していないCSR作成時には無視される。既定値は30日。
-sha256
Section titled “-sha256”CSRまたは証明書への署名に SHA-256 を使用する。
-sha256これは署名時のハッシュ関数を選ぶ指定であり、秘密鍵の暗号化方式ではない。
CSRまたは自己署名証明書の署名に使用する秘密鍵を指定する。
-key ca.keyCSRまたは証明書の出力先を指定する。
-out server.csr省略すると標準出力へ出力される。
Subjectをコマンドラインで指定し、対話入力を省略する。
-subj "/C=JP/ST=Tokyo/L=Shinjuku/O=JEC/OU=CC/CN=www.example.com"代表的な属性:
| 属性 | 意味 |
|---|---|
C |
国コード |
ST |
都道府県・州 |
L |
市区町村 |
O |
組織名 |
OU |
部門名 |
CN |
Common Name |
-config
Section titled “-config”使用するOpenSSL設定ファイルを指定する。
-config /etc/ssl/openssl.cnf指定したファイルは、既定の設定ファイルへ追加されるのではなく、その代わりに読み込まれる。
対話形式でSubjectを入力する場合、設定ファイルには [ req ] と distinguished_name の定義が必要になる。拡張セクションだけのファイルを指定すると、 unable to find 'distinguished_name' in config などのエラーになる。
設定ファイルの構造と -extfile との違いは、 OpenSSL設定ファイル を参照。
-extensions
Section titled “-extensions”設定ファイル内のX.509拡張セクションを指定する。
-extensions root_ca-x509使用時:作成する証明書へ拡張を追加する- CSR作成時:CSRへ拡張要求を追加する
CSR作成時には -reqexts も同じ用途で使用できる。
-addext
Section titled “-addext”X.509拡張をコマンドラインから追加する。
-addext "subjectAltName=DNS:www.example.com,IP:192.168.1.1"複数の拡張を追加する場合は、 -addext を複数回指定する。同じ拡張を重複して指定することはできない。
CSRまたは証明書の内容を読みやすい形式で表示する。
-verify
Section titled “-verify”CSRに含まれる公開鍵を使い、CSR自身の署名を検証する。
-noout
Section titled “-noout”PEM形式 のCSRまたは証明書本体を出力しない。 -text などの表示結果だけを確認したい場合に使用する。
- Common Nameだけでなく、TLS接続に使用するDNS名やIPアドレスをSANへ指定する。
- CSRに含まれる拡張が、CAの発行する証明書へ自動的にコピーされるとは限らない。
-configへ拡張専用ファイルを指定すると、Subject入力に必要な設定が不足する場合がある。
OpenSSL公式ドキュメント
Section titled “OpenSSL公式ドキュメント”-
openssl-req CSRと自己署名証明書の作成、設定ファイル、Subject、拡張指定。
-
openssl-config OpenSSL設定ファイルの基本構文。
-
x509v3_config X.509拡張の設定形式。