什么是挑战密码?

Wil*_*tin 185 ssl csr

我正在 Ubuntu 服务器上设置 SSL。作为设置 CSR 的一部分,它要求的字段之一是“挑战密码”。那是什么?默认为空白。我需要输入一个吗?

Mad*_*ter 161

作为 CSR 生成的一部分请求的“挑战密码”不同于用于加密密钥的密码(在密钥生成时请求,或者在以后加密明文密钥时请求 - 然后每次启用 SSL 时再次请求)使用它的服务启动)。

这是正在生成的密钥,以及生成密钥的开头:

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

$ head -3 foo.key
-----BEGIN PRIVATE KEY-----
MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAJ9jNAG4Noy//r/S
eeK/gEgGOV0BZm0CYmgSQGj4P6N3cJsPlGsG80qKTxTFwoEiXnM3BVeBpDdXhGKt
Run Code Online (Sandbox Code Playgroud)

此密钥没有密码。我在创建时没有被提示输入一个,也没有输入一个。现在,让我们生成一个加密密钥:

$ 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
Run Code Online (Sandbox Code Playgroud)

因此,应该清楚加密私钥(哪个 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-----
Run Code Online (Sandbox Code Playgroud)

只是为了表明密钥没有神奇地被加密:

$ head -3 foo.key
-----BEGIN PRIVATE KEY-----
MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAJ9jNAG4Noy//r/S
eeK/gEgGOV0BZm0CYmgSQGj4P6N3cJsPlGsG80qKTxTFwoEiXnM3BVeBpDdXhGKt
Run Code Online (Sandbox Code Playgroud)

所以,我再说一遍:请为CSR生成的一部分“挑战密码”是一样的东西用来加密密钥口令。“挑战密码”基本上是您和 SSL 证书颁发者(又名证书颁发机构,或 CA)之间的共享秘密随机数,嵌入在 CSR 中,如果需要,颁发者可以使用它来对您进行身份验证。一些 SSL 证书颁发者比其他人更清楚;往下这个页面的底部,看看他们说需要挑战密码的地方 - 这不是当你重新启动 apache 时:

如果您选择输入和使用挑战密码,您需要确保将该密码保存在安全的地方。如果您出于任何原因需要重新安装证书,则需要输入该密码。

  • 非常(非常)完整的答案,当不需要恕我直言时。根据提出的问题,您可以消除所有答案,除了““挑战密码”基本上是共享秘密随机数......”。我相信这会完全回答所提出的问题,减少分散注意力的非相关信息。 (9认同)
  • @joe 谢谢!你看不到的(因为你没有代表)是我正在回应一个非常高评价的用户(在这种情况下,不幸的是,错了)的一个自删除的早期答案所以不得不做逐点反驳。它随后的删除,不是由它的作者完成的,确实让我的看起来有点奇怪,但直到现在我选择让它继续存在。如果有足够多的人通过支持您的评论来支持您的观点,我会修改我的答案。 (6认同)
  • 从技术上讲,他们不发布 SSL 协议本身,而是发布兼容 SSL 的证书。我觉得 SSL 颁发者不太清楚。在我看来,SSL 证书颁发者很清楚。 (3认同)
  • 我对这个相同的问题感到困惑,发现这个答案对我对该主题的有限理解没有帮助(由于它的编写方式),但幸运的是从 https://security.stackexchange.com/a 找到了我的答案/77082/67048 (3认同)
  • “SSL 颁发者”和 CA(证书颁发机构)之间有区别吗? (2认同)