【OpenSSL】A challenge password は秘密鍵のパスワードではありません。

A challenge password について

OpenSSL で CSR を作成する際に、「A challenge password」という入力項目があります。

ネットで検索すると、A challenge password が秘密鍵のパスワードと記載されていたりしますが、それは誤りです。

A challenge password:証明書を破棄する際に入力するパスワード。空欄可能。

「食べる!SSL!」より引用

上記のように、A challenge password はあくまで証明書を破棄する際のパスワードです。

そもそも、CSR には秘密鍵の情報は無いので、秘密鍵のパスワードを CSR に載せるはずがありませんし、以下の実際の CSR 本文を見てわかる通り、A challenge password の内容は平文で記載されます。秘密鍵のパスワードを平文で記載するなんてありえませんね。

Certificate Request:
Data:
Version: 0 (0x0)
Subject: C=JP, ST=Okinawa, L=Naha, O=TURNING POINT Co.,Ltd., CN=turninp.jp/emailAddress=information@turninp.jp
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
00:d3:ae:4e:e8:e9:8a:16:1c:59:53:e2:27:5a:dc:
24:d7:b7:b3:84:3a:a5:c1:ac:f0:18:f6:45:66:bf:
8d:5e:39:ba:e7:d7:1a:ad:70:01:6c:02:47:e2:68:
5e:2f:de:fc:4d:a6:a4:ab:99:be:93:77:e7:fa:2f:
77:b3:3e:44:0f:4d:db:2d:1d:a8:b4:73:90:3f:01:
a1:99:a0:5d:1f:75:a0:b9:0a:8c:bc:56:b5:3a:ba:
7d:5b:a3:9d:b3:39:39:9f:9c:e3:1e:8a:0b:bc:a3:
c7:92:79:51:64:6a:0c:0a:26:ed:4a:94:dc:a3:0a:
16:11:80:c7:28:0b:ad:1a:2b:9c:4a:35:6d:8f:1a:
d3:ff:e9:44:bf:98:a3:9c:7a:d5:7b:1d:3b:10:f0:
2a:4d:eb:ab:a1:2f:8b:0f:5c:0f:d5:b5:4e:c3:39:
51:91:62:c8:77:b6:4c:6a:a5:76:61:91:99:10:e0:
24:c0:14:fe:f7:74:01:90:89:2f:a9:40:ee:ef:2a:
6c:dd:f8:cd:54:ff:c3:c4:96:29:d5:30:22:02:22:
21:f6:82:13:72:37:8b:87:66:e2:ee:1d:e9:8b:da:
be:39:23:e3:c5:13:18:0d:ec:e2:21:b7:a1:6d:0e:
52:0c:76:e8:d7:ee:d2:58:52:79:0b:d2:ca:1b:ce:
30:59
Exponent: 65537 (0x10001)
Attributes:
challengePassword :P@ssw0rd
Signature Algorithm: sha256WithRSAEncryption
69:91:c2:a4:ed:9b:b3:05:b8:30:28:e6:d7:d0:69:7c:75:58:
5b:82:84:a6:1a:25:e4:e2:63:f3:d8:3e:8f:4b:8d:6e:ae:46:
2c:31:4c:08:ff:08:5f:9e:4b:86:86:67:25:b1:f6:50:ee:c7:
cb:0c:4d:0d:84:68:6f:4c:e7:98:58:45:72:86:b3:91:75:4e:
78:f5:b1:78:96:4f:1c:b5:9a:26:3f:34:31:36:0a:9a:5e:76:
91:3c:c4:95:85:71:ba:0b:c5:d7:7c:14:f8:21:8a:96:6c:a8:
73:95:52:e2:d5:a0:67:99:39:99:db:dd:8f:23:e3:70:30:de:
4e:a8:c3:45:87:28:c6:6c:36:71:c5:f5:86:0c:de:d7:6f:b3:
af:03:32:3f:99:d9:be:2f:49:c7:bd:24:64:aa:43:9d:56:24:
a3:ea:92:fc:a9:f6:e0:03:78:6d:30:98:2a:4f:3e:1d:6a:95:
e6:41:c9:d3:0e:c6:b1:e3:71:dc:4f:60:c1:6e:8d:30:82:ca:
6b:ec:75:d3:ec:db:88:0a:22:a4:4a:97:30:05:37:2d:77:a6:
51:f4:22:34:c1:95:1f:23:45:24:0a:a2:fb:c7:5e:80:a9:ac:
3c:5c:88:be:15:f3:a0:a8:a1:cc:65:ec:05:23:98:93:d1:43:
8a:13:da:00
—–BEGIN CERTIFICATE REQUEST—–
MIIC6TCCAdECAQAwgYoxCzAJBgNVBAYTAkpQMRAwDgYDVQQIDAdPa2luYXdhMQ8w
DQYDVQQHDAZLYWRlbmExHDAaBgNVBAoME0xPVkUgTElWRSEgQ28uLEx0ZC4xEzAR
BgNVBAMMCnR1cm5pbnAuanAxJTAjBgkqhkiG9w0BCQEWFmluZm9ybWF0aW9uQHR1
cm5pbnAuanAwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDTrk7o6YoW
HFlT4ida3CTXt7OEOqXBrPAY9kVmv41eObrn1xqtcAFsAkfiaF4v3vxNpqSrmb6T
d+f6L3ezPkQPTdstHai0c5A/AaGZoF0fdaC5Coy8VrU6un1bo52zOTmfnOMeigu8
o8eSeVFkagwKJu1KlNyjChYRgMcoC60aK5xKNW2PGtP/6US/mKOcetV7HTsQ8CpN
66uhL4sPXA/VtU7DOVGRYsh3tkxqpXZhkZkQ4CTAFP73dAGQiS+pQO7vKmzd+M1U
/8PElinVMCICIiH2ghNyN4uHZuLuHemL2r45I+PFExgN7OIht6FtDlIMdujX7tJY
UnkL0sobzjBZAgMBAAGgGTAXBgkqhkiG9w0BCQcxCgwIUEBzc3cwcmQwDQYJKoZI
hvcNAQELBQADggEBAGmRwqTtm7MFuDAo5tfQaXx1WFuChKYaJeTiY/PYPo9LjW6u
RiwxTAj/CF+eS4aGZyWx9lDux8sMTQ2EaG9M55hYRXKGs5F1Tnj1sXiWTxy1miY/
NDE2CppedpE8xJWFcboLxdd8FPghipZsqHOVUuLVoGeZOZnb3Y8j43Aw3k6ow0WH
KMZsNnHF9YYM3tdvs68DMj+Z2b4vSce9JGSqQ51WJKPqkvyp9uADeG0wmCpPPh1q
leZBydMOxrHjcdxPYMFujTCCymvsddPs24gKIqRKlzAFNy13plH0IjTBlR8jRSQK
ovvHXoCprDxciL4V86Coocxl7AUjmJPRQ4oT2gA=
—–END CERTIFICATE REQUEST—–

秘密鍵のパスワードについて

A challenge password ではありませんが、秘密鍵のパスワード自体は存在します。

秘密鍵のパスワードは openssl コマンドで秘密鍵を作成する際にオプションを付けることで設定できます。

例えば以下のように「-aes256」オプションを付けると秘密鍵生成時にパスワードを設定できます。

※認証局の鍵生成手順によっては、コマンド例が「-des3」となっていることがあるので、事前に確認した方がいいかと思います。

[root@localhost ~]# openssl genrsa -aes256 2048 > server.key
Generating RSA private key, 2048 bit long modulus
……………………………………………………………+++
……………………………………………………………………+++
e is 65537 (0x10001)
Enter pass phrase:※パスワード入力
Verifying – Enter pass phrase:※パスワード入力

このパスワード付きの秘密鍵を使用すると、例えば Apache 起動時にパスワードを入力しないと起動できません。

実際に確認してみる

A challenge password を設定した場合

実際に見てみましょう。まずは以下のように CSR 作成時に A challenge password を設定してみます。

[root@localhost ~]# openssl req -new -sha256 -key /etc/httpd/conf/server.key > /etc/httpd/conf/server.csr
Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:Okinawa
Locality Name (eg, city) [Default City]:Naha
Organization Name (eg, company) [Default Company Ltd]:TURNING POINT Co.,Ltd.,
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server’s hostname) []:
Email Address []:information@turninp.jp

Please enter the following ‘extra’ attributes
to be sent with your certificate request
A challenge password []:P@ssw0rd

An optional company name []:

上記 CSR に自己署名を行った後に、httpd をリスタートしても特に問題なく httpd は再起動します。

[root@localhost conf]# systemctl restart httpd
[root@localhost conf]#

openssl で -aes256 オプションを追加した場合

「-aes256」オプションありで秘密鍵を作成します。

[root@localhost ~]# openssl genrsa -aes256 2048 > server.key

この秘密鍵から CSR を作成しようとすると、秘密鍵生成時のパスワードを求められるようになります。

[root@localhost conf]# openssl req -new -sha256 -key /etc/httpd/conf/server.key > /etc/httpd/conf/server.csr
Enter pass phrase for /etc/httpd/conf/server.key:※秘密鍵のパスワードを入力

今回は CSR 作成時の A challenge password には何も入力しません。

[root@localhost ~]# openssl req -new -sha256 -key /etc/httpd/conf/server.key > /etc/httpd/conf/server.csr
Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:Okinawa
Locality Name (eg, city) [Default City]:Naha
Organization Name (eg, company) [Default Company Ltd]:TURNING POINT Co.,Ltd.,
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server’s hostname) []:
Email Address []:information@turninp.jp

Please enter the following ‘extra’ attributes
to be sent with your certificate request
A challenge password []:

An optional company name []:

CSR から自己証明書を作成します。この時も秘密鍵のパスワードを入力しなくてはなりません。

[root@localhost conf]# openssl x509 -req -signkey server.key < server.csr > server.crt
Signature ok
subject=/C=JP/ST=Okinawa/L=Naha/O=TURNING POINT/CN=turninp.jp
Getting Private key
Enter pass phrase for server.key:※秘密鍵のパスワードを入力

MEMO

自己署名時に秘密鍵のパスワードを入力するのは、パスワードを設定した秘密鍵で署名しようとしたからです。

例えばパスワードのかかっていない秘密鍵を生成し、その秘密鍵で当該 CSR に署名する際はパスワードは聞かれません。

[root@localhost conf]# openssl x509 -req -signkey sign.key < server.csr > server
.crt
Signature ok
subject=/C=JP/ST=Okinawa/L=Naha/O=TURNING POINT/CN=turninp.jp
Getting Private key
[root@localhost conf]#

つまり、認証局に CSR を作成した秘密鍵のパスワードを教える必要はありません。

最後に httpd をリスタートします。すると、以下のように秘密鍵のパスワードを求められます。

[root@localhost conf]# systemctl restart httpd
Enter SSL pass phrase for localhost.localdomain:443 (RSA) :※秘密鍵のパスワードを入力

これらのことから、まとめると以下のようになります。

  • A challenge password は証明書を破棄するためのパスワードで、CSR に平文で記載される。
  • 秘密鍵のパスワードは秘密鍵生成時のオプションで設定し、その秘密鍵を使った作業(CSRの作成、署名)や Apache 起動時にパスワードを求められるようになる。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)