CSR (証明書署名要求) を生成する

Gehirn MCA では RSA と ECC の2種類の暗号アルゴリズムに対応しています。どちらのアルゴリズムでもまず秘密鍵を生成し、次にその秘密鍵を使って CSR (Certificate Signing Request 、証明書署名要求) を生成します。

秘密鍵の取り扱いについて
秘密鍵の取り扱いについて解説します。秘密鍵が漏洩した場合の対処についても説明します。

CSR に設定する情報について 

CSR には証明書の発行を受けるドメイン名や組織の情報を設定します。一般的には次の項目を設定します。 DV 証明書の場合は組織認証を行いませんのでコモンネームのみ設定します。

項目内容設定例
国名
Country Name
組織が所在する国名を ISO 3166-1 に定義される2桁のコードで設定します。日本の場合は JP です。JP
都道府県名
State or Province Name
組織が所在する都道府県名を設定します。Tokyo
市町村名
Locality Name
組織が所在する市町村名を設定します。Chiyoda-ku
組織名
Organization Name
組織名を設定します。 DUNS や帝国データバンクなどの第三者データベースで確認できる名称と一致する必要があります。Gehirn Inc.
部署名
Organizational Unit Name
現在では利用されていません。
コモンネーム
Common Name
通常はドメイン名を設定しますが、 HTTPS で証明書を利用する場合は空欄のままとすることもできます。www.gehirn.jp

申請内容と CSR の一致 

Gehirn MCA ではお客さまによる CSR の取り違いや意図しない証明書の発行を防ぐため、証明書の申請内容と CSR に設定された情報が一致することを検証しています。

CSR に設定されていない項目については検証を省略し、申請内容をそのまま利用します。また、 CSR ご提出時に検証レベルを「コモンネームのみ」 (API: ONLY_COMMON_NAME) に設定することでも検証を省略することができます。

ただし、コモンネームの検証を省略することはできず、 申請内容と完全に一致する必要があります

SAN (Subject Alternative Name 、サブジェクト代替名) 拡張について

証明書の発行を受けたドメイン名は証明書の SAN 拡張に記録されます。 CSR にも SAN 拡張を設定することはできますが必要ではありません。

CSR に SAN 拡張を設定した場合は、ほかの項目と同様に申請内容と一致することが検証されます。

OpenSSL コマンド例 

一般的に利用される OpenSSL のコマンドラインを用いて CSR を生成する方法を RSA と ECC のそれぞれ紹介します。

この例では1度のコマンドで CSR と秘密鍵を同時に生成します。コマンドの実行に成功すると次の2つのファイルが生成されます。

privkey.pem
PEM エンコードされた PKCS#8 形式の秘密鍵
request.pem
privkey.pem に対応する CSR

これらのファイルのうち request.pem の方をご提出ください。 privkey.pem は秘密鍵ですので限られた人のみがアクセスできる安全な場所に保管してください。また、紛失されないようご注意ください。

RSA の CSR を生成する 

2048 ビットの RSA 秘密鍵と対応する CSR を生成するコマンドの例です。このコマンド例では、 上記の設定例 に従い情報を設定しています。

OpenSSL の対話型コマンドでは、設定しない項目に「.」 (ドット) を回答することでデフォルト値によらず空欄のままにすることができます。このコマンド例でも設定しない項目には「.」を回答しています。

RSA 鍵の強度について

2048 ビットから 8192 ビットまでの秘密鍵をサポートしています。

$ # OpenSSL コマンドは設定しない項目に「.」 (ドット) を回答することで空欄のままにすることができます。
$ openssl req \
    -newkey rsa:2048 \
    -keyout ./privkey.pem \
    -nodes \
    -out ./request.pem
Generating a RSA private key
.........................................................+++++
.................................+++++
writing new private key to './privkey.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:Tokyo
Locality Name (eg, city) []:Chiyoda-ku
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Gehirn Inc.
Organizational Unit Name (eg, section) []:.
Common Name (e.g. server FQDN or YOUR name) []:www.gehirn.jp
Email Address []:.

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
$ # 生成された request.pem の内容を確認する
$ cat ./request.pem
-----BEGIN CERTIFICATE REQUEST-----
MIICpTCCAY0CAQAwYDELMAkGA1UEBhMCSlAxDjAMBgNVBAgMBVRva3lvMRMwEQYD
VQQHDApDaGl5b2RhLWt1MRQwEgYDVQQKDAtHZWhpcm4gSW5jLjEWMBQGA1UEAwwN
d3d3LmdlaGlybi5qcDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMhv
yrEdUzzdQtF8nJkRzSfLAc+V4VConoRC3hofrmULP9ISRVQaXAXXwB2Ch5TilORg
26CqnIEtA4vArcJDaU1+DwHNgLvY2MNJv2mM1OFJgD57MHeytQOSOSveTPa8rRrv
6O+/Y7e9zAemQ1SiKXcp/DaZLXbioWbf9o9NdHfOhJAcj8HhbXEEIbltV321BZKn
NJmPK6jE90G/Ctmpnhv6oOVJE1+fUHYohghnPSd09PaiSIqdWvn67SZOkG+GFpnq
+pA6Xwd0cqyeH+0I/hVFp4AQHhdk65hBQbFS0/Xf7X4uF7Mf9IyOX0abbBELScSv
q8j8s/JknZj4x498sysCAwEAAaAAMA0GCSqGSIb3DQEBCwUAA4IBAQAzBK3ZdRKt
0C5H+WeTamfu1R7gaX+AsBNDNvvtIpOcoUWCu7kLKkkQ9LHXniv5w7U/czVxOv1Z
87KVhWuT4nx2uM3SbWNBePXB1Jx4pXJFvUZMkCwBFa/s8id6H2ILEiK8LxIBT8jW
8M3jKdyRxY9YzXQD6HcEmuMExl/Kc7P8Lyziu4pSnoYOsif2eryOqWJG1cAo0EsY
meXE9dxWL3rcCkIXbCQqCBiRQw5e2Oe/flUVyBtyuMFROvJJxhGy+6UsnGFfUXcx
eHG7nmuSIU6T5nqV44EsgfoBDp444bsMXRG8TqqnTz9ZxwDPkTombiuzRPmLUSLh
CenZUjkQjsRH
-----END CERTIFICATE REQUEST-----

ECC の CSR を生成する 

P-256 楕円曲線を使用する ECC 秘密鍵と対応する CSR を生成するコマンドの例です。このコマンド例でも RSA の場合と同様に上記の設定例に従い情報を設定しています。

使用できる楕円曲線

次の楕円曲線に使用することができます。

  • P-256 (prime256v1)
  • P-384 (secp384r1)
$ # OpenSSL コマンドは設定しない項目に「.」 (ドット) を回答することで空欄のままにすることができます。
$ openssl req \
    -newkey ec:<(openssl ecparam -name prime256v1) \
    -keyout ./privkey.pem \
    -nodes \
    -out ./request.pem
Generating an EC private key
writing new private key to './privkey.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:Tokyo
Locality Name (eg, city) []:Chiyoda-ku
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Gehirn Inc.
Organizational Unit Name (eg, section) []:.
Common Name (e.g. server FQDN or YOUR name) []:www.gehirn.jp
Email Address []:.

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
$ # 生成された request.pem の内容を確認する
$ cat ./request.pem
-----BEGIN CERTIFICATE REQUEST-----
MIIBGzCBwgIBADBgMQswCQYDVQQGEwJKUDEOMAwGA1UECAwFVG9reW8xEzARBgNV
BAcMCkNoaXlvZGEta3UxFDASBgNVBAoMC0dlaGlybiBJbmMuMRYwFAYDVQQDDA13
d3cuZ2VoaXJuLmpwMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEZLYEwfpasE09
Ml3LV9vItn7UlesBvIYCePmsw2JS7SMF8TTUpsKC68/LBvGEuXIfPsRMEpsMlfMK
MKBsJEgkBKAAMAoGCCqGSM49BAMCA0gAMEUCIE1ywv92gisSGbQpbGiR5TdrGW3z
2lbgGTHYVbuBoXcoAiEAtoxP4a/mmSb7TBe9EI+8VR7LOyrgPWb0GyKGZPkGyXc=
-----END CERTIFICATE REQUEST-----