技術部ネットワーク課の二之宮です。
はじめに
コマンドを 1つ実行するだけで生成可能な CSR(certificate signing request:証明書署名要求)ですが、その中身を理解するために、少しだけ深掘りしてみました。
- はじめに
- CSR とは
- CSR 作成の実際
- 生成された CSR
- CSR 生成コマンドとオプション
- 「-sha256」オプション
- 「-newkey rsa:2048」オプション
- 証明書署名要求の中身‥所有者識別情報
- 証明書署名要求の中身‥公開鍵
- 証明書署名要求の中身‥追加の情報
- 証明書署名要求の中身‥署名
- おわりに
- 参考文献
CSR とは
サーバー証明書の発行を認証局に依頼する申請書のようなものです。
CSR には「証明書の適用対象となる情報」と「公開鍵」が含まれており、秘密鍵で署名されています。
認証局は、CSR の情報を審査し、その正当性を確認したうえで、CSR を基にサーバー証明書を生成して、認証局の秘密鍵で署名を行います。
CSR 作成の実際
今回は、*.synapse.kagoshima.jp というワイルドカード証明書の CSR を生成することを例に説明します。
実際に CSR を作成する openssl コマンドを実行すると、このようになります。
# openssl req -new -sha256 -subj "/C=JP/ST=Kagoshima/L=Kagoshima/O=SYNAPSE Co.,Ltd./OU=Operation Team/CN=*.synapse.kagoshima.jp" -out synapse.kagoshima.jp.csr -newkey rsa:2048 -nodes -keyout synapse.kagoshima.jp.key ............+......+.......+..+...+....+++++++++++++++++++++++++++++++++++++++*..+++++++++++++++++++++++++++++++++++++++*...........+...+.......+......+.....+...............+.........+...+...+.+...+............+......+...+..+..........+..+.+......+...+............+...+.....+...+.............+.....+......+.+..+.+.....+................+.....+.............+.....+...+.........+...+.......+......+..+...+...+..........+.....+......+.+..+............+.+...............+...+..+...+....+...............+........+...+.......+...++++++..+...........+...+....+.....+.+..............+...+..................+.+.....+...+............+.+.........+......+++++++++++++++++++++++++++++++++++++++*....+...+..+++++++++++++++++++++++++++++++++++++++*...+...+....+..+....+......+......+..+..........+...........+.+...+.................+.+..+...+.......+......+......+.........+...........+.+..+......+......+.+.........+...+.....+...+.......+...........+.....................+.........+.......+...+......+......+..+......+.........+...+............+...+...+......+....++++++-----
そして、CSR ファイルが生成されます。
# ls synapse.kagoshima.jp.csr synapse.kagoshima.jp.csr
同時に、秘密鍵ファイルも作成されます。
# ls synapse.kagoshima.jp.key synapse.kagoshima.jp.key
生成された CSR
cat コマンドで、PEM ( Privacy-Enhanced Mail ) 形式で Base64 エンコードされた CSR を見ることができます。
# cat synapse.kagoshima.jp.csr -----BEGIN CERTIFICATE REQUEST----- MIIC0DCCAbgCAQAwgYoxCzAJBgNVBAYTAkpQMRIwEAYDVQQIDAlLYWdvc2hpbWEx EjAQBgNVBAcMCUthZ29zaGltYTEZMBcGA1UECgwQU1lOQVBTRSBDby4sTHRkLjEX MBUGA1UECwwOT3BlcmF0aW9uIFRlYW0xHzAdBgNVBAMMFiouc3luYXBzZS5rYWdv ~途中省略~ TmVpTWapDt47mRhZI0C9b3We0qaOaIR75fqjA+9SshYOF1acau60fa264s95gtBU Pc/Bu8hCEMw2vrJIsmBmD37dD9W/42bbNwbT6xLNx/0TSdN88OvB+6meNNATlccu dUyQHg== -----END CERTIFICATE REQUEST-----
CSR 生成コマンドとオプション
CSR の生成には以下の長~いコマンドを使用しました。
(「CSR 作成の実際」で示したコマンドと同じものです。)
# openssl req -new -sha256 -subj "/C=JP/ST=Kagoshima/L=Kagoshima/O=SYNAPSE Co.,Ltd./OU=Operation Team/CN=*.synapse.kagoshima.jp" -out synapse.kagoshima.jp.csr -newkey rsa:2048 -nodes -keyout synapse.kagoshima.jp.key
このコマンドは、分解すると、以下のようなコマンドとオプション(パラメータ)で構成されています。
openssl
OpenSSL コマンド。req
CSR を生成するためのサブコマンド。-new
CSR を生成するためのオプション。-sha256
CSR の署名に使用するハッシュ関数を指定するオプション。 後ほど詳述します。-subj "/C=JP/‥/CN=*.synapse.kagoshima.jp“
CSR の識別情報を指定するオプション。-out synapse.kagoshima.jp.csr
CSR のファイル名を指定するオプション。-newkey rsa:2048
暗号アルゴリズムと秘密鍵のサイズを指定するオプション。 後ほど詳述します。-noenc
秘密鍵の暗号化とパスフレーズの保護を行わないようにするオプション。-keyout synapse.kagoshima.jp.key
秘密鍵のファイル名を指定するオプション。
「-sha256」オプション
CSR の署名に使用するハッシュ関数に SHA-256 を使用することを指定するオプションです。
CSR には公開鍵と識別情報、署名が含まれますが、この署名の処理に使用されるハッシュ関数を指定します。
CSR は、SHA-256 関数で算出されたハッシュ値を、秘密鍵を使用して暗号アルゴリズムで処理することで署名が行われます。
「-newkey rsa:2048」オプション
秘密鍵の生成に使用する暗号アルゴリズムとサイズを指定するオプションです。
「-newkey rsa:2048」の場合は「RSA 暗号アルゴリズム」を使用して「2,048 ビット」の秘密鍵(とペアとなる公開鍵)を生成します。
証明書署名要求の中身‥所有者識別情報
# openssl req -in synapse.kagoshima.jp.csr -text -noout Certificate Request: Data: Version: 1 (0x0) Subject: C=JP, ST=Kagoshima, L=Kagoshima, O=SYNAPSE Co.,Ltd., OU=Operation Team, CN=*.synapse.kagoshima.jp
Version: 1 (0x0)
X.509 証明書の書式のバージョン。Subject: ‥
所有者識別情報。
証明書署名要求の中身‥公開鍵
Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:9f:d5:b9:8a:29:7d:d3:59:bf:0b:8f:dd:0e:91: e9:ea:6b:78:b7:1b:05:f3:6c:66:48:99:67:e6:89: 1f:a1:59:d0:2e:62:87:4a:d2:16:11:e8:4a:d0:54: ~途中省略~ 2c:f7:f7:4a:70:08:af:1f:87:45:8e:38:88:ec:cc: c1:8c:13:eb:62:c9:9b:95:a8:4d:b9:e3:81:67:d4: cb:db Exponent: 65537 (0x10001)
Public Key Algorithm: rsaEncryption
公開鍵の暗号化方式。RSA 暗号アルゴリズム。Public-Key: (2048 bit)
公開鍵のサイズ。Modulus:~
公開鍵。Exponent: 65537 (0x10001)
公開指数。鍵の演算で使用される。
証明書署名要求の中身‥追加の情報
Attributes: (none) Requested Extensions:
この項目は使用されていません。
証明書署名要求の中身‥署名
Signature Algorithm: sha256WithRSAEncryption Signature Value: 47:a7:42:ac:bb:d9:cf:68:27:bc:90:0a:38:39:c4:67:5d:fe: 76:12:47:5c:c2:47:98:cc:2a:85:a5:30:d5:78:b4:c0:ad:e2: 84:26:65:d8:cd:48:d6:1e:5d:53:ad:b5:fc:b3:08:46:67:48: ~途中省略~ b2:60:66:0f:7e:dd:0f:d5:bf:e3:66:db:37:06:d3:eb:12:cd: c7:fd:13:49:d3:7c:f0:eb:c1:fb:a9:9e:34:d0:13:95:c7:2e: 75:4c:90:1e
- Signature Algorithm: sha256WithRSAEncryption
秘密鍵の作成に使用された暗号アルゴリズム ( RSA ) と、ハッシュ関数 (sha256) 。
先述のとおり、署名は、所有者識別情報と公開鍵をハッシュ関数で処理して得られたハッシュ値を、秘密鍵を使用して RSA 暗号アルゴリズムで処理することで行われます。
おわりに
今回は、CSR のみを少しだけ深掘りしただけで終わってしまいましたので、次は、またの機会に、サーバー証明書を少しだけ、深掘りしてみたいと思います。
参考文献
- openssl - OpenSSL Documentation
https://docs.openssl.org/3.3/man1/openssl/ - openssl-req - OpenSSL Documentation
https://docs.openssl.org/3.3/man1/openssl-req/ - RFC 1421: Privacy Enhancement for Internet Electronic Mail
Part I: Message Encryption and Authentication Procedures
https://www.rfc-editor.org/rfc/rfc1421 - RFC 5280 - Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile 日本語訳
https://4judgement.github.io/rfc-translater/html/rfc5280.html