Ssl

什麼是挑戰密碼?

  • March 14, 2019

我在 Ubuntu 伺服器上設置 SSL。作為設置 CSR 的一部分,它要求的欄位之一是“挑戰密碼”。那是什麼?預設為空白。我需要輸入一個嗎?

作為 CSR 生成的一部分請求的“挑戰密碼”不同於用於加密密鑰的密碼片語(在密鑰生成時請求,或者在以後加密明文密鑰時請求 - 然後在每次啟用 SSL 時再次請求使用它的服務啟動)。

這是正在生成的密鑰,以及生成的密鑰的開頭:

$ openssl genpkey -algorithm rsa -out foo.key
............++++++
...++++++

$ head -3 foo.key
-----BEGIN PRIVATE KEY-----
MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAJ9jNAG4Noy//r/S
eeK/gEgGOV0BZm0CYmgSQGj4P6N3cJsPlGsG80qKTxTFwoEiXnM3BVeBpDdXhGKt

此密鑰沒有密碼。創建時沒有提示我輸入一個,也沒有輸入一個。現在,讓我們生成一個加密密鑰:

$ openssl genpkey -algorithm rsa -des3 -out bar.key
...........................................++++++
.....................................++++++
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:

$ head -3 bar.key
-----BEGIN ENCRYPTED PRIVATE KEY-----
MIICxjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQInfwj1iv3icMCAggA
MBQGCCqGSIb3DQMHBAizMHBklBexiwSCAoDtRKf1WtMiVMH7HraGTIG0rlQS6Xuj

所以應該清楚加密私鑰(哪個 apache 或任何其他啟用 SSL 的伺服器在啟動時需要為其解鎖)和明文私鑰(不需要在服務啟動時解鎖)看起來像. 現在,我將使用未加密密鑰質詢密碼生成 CSR :

$ openssl req -new -key foo.key
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) [XX]:
State or Province Name (full name) []:
Locality Name (eg, city) [Default City]:
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:asdfasdf
An optional company name []:
-----BEGIN CERTIFICATE REQUEST-----
MIIBmzCCAQQCAQAwQjELMAkGA1UEBhMCWFgxFTATBgNVBAcMDERlZmF1bHQgQ2l0
eTEcMBoGA1UECgwTRGVmYXVsdCBDb21wYW55IEx0ZDCBnzANBgkqhkiG9w0BAQEF
AAOBjQAwgYkCgYEAn2M0Abg2jL/+v9J54r+ASAY5XQFmbQJiaBJAaPg/o3dwmw+U
awbzSopPFMXCgSJeczcFV4GkN1eEYq2Cmam3tH6t8mVDh0/UryJSWBsaFm9mh9RF
gIpP0hEkYZTf/0X+X06ukt9S/Id9Z/tVgPsZA3TcNjNhJfVaTm81/4ykq8UCAwEA
AaAZMBcGCSqGSIb3DQEJBzEKDAhhc2RmYXNkZjANBgkqhkiG9w0BAQUFAAOBgQCa
ivuDRBlHOhBjg6wPbH9NvCnvEnxeEAkYi0Sl/Grdo/WCk17e+sv9wgqEW1QSIdbV
XzMeWidurv4AtcATwhfk9tBcYBCTxANkTONzhJG7Yk9OAz8g8Ljo8EEvPf4oHqpw
tBg10DCD2op0lCwL2LBdPO3RG20f/HD6fEXPVxZdOQ==
-----END CERTIFICATE REQUEST-----

只是為了表明密鑰沒有神奇地被加密:

$ head -3 foo.key
-----BEGIN PRIVATE KEY-----
MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAJ9jNAG4Noy//r/S
eeK/gEgGOV0BZm0CYmgSQGj4P6N3cJsPlGsG80qKTxTFwoEiXnM3BVeBpDdXhGKt

所以我再說一遍:作為 CSR 生成的一部分請求的“挑戰密碼”用於加密密鑰的密碼片語不同。“挑戰密碼”基本上是您和嵌入在 CSR 中的 SSL 證書頒發者(又名證書頒發機構或 CA)之間的共享秘密隨機數,如果需要,頒發者可以使用它來驗證您的身份。一些 SSL 證書頒發者比其他頒發者更清楚;往下看這個頁面的底部,看看他們說需要挑戰密碼的地方——不是在你重新啟動 apache 時:

如果您選擇輸入和使用挑戰密碼,您需要確保將該密碼保存在安全的地方。如果您出於任何原因需要重新安裝證書,則需要輸入該密碼。

引用自:https://serverfault.com/questions/266232