无法加载私钥
Posted
技术标签:
【中文标题】无法加载私钥【英文标题】:Unable to load Private Key 【发布时间】:2015-02-19 11:56:45 【问题描述】:我是 SSL/OpenSSL 新手,我正在使用 Windows 7。我正在尝试按照 these instructions 为我的 ElasticBeanstalk 环境配置 HTTPS。
我在“创建私钥”的第 2 步。在我发出生成密钥对的命令后:
openssl genrsa 2048 > privatekey.pem
我明白了:
Generating RSA private key, 2048 bit long modulus
........................................+++
...............................+++
unable to write 'random state'
e is 65537 (0x10001)
但是,它确实向我的目录写入了一个密钥。但是在第二个命令之后:
openssl req -new -key privatekey.pem -out csr.pem
我明白了:
unable to load Private Key
6312:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:647:Expecting: ANY PRIVATE KEY
我尝试用谷歌搜索一下,但我发现的解决方案似乎都与我无关。我检查了生成的密钥,它看起来像
-----BEGIN RSA PRIVATE KEY-----
lots of characters
-----END RSA PRIVATE KEY-----
我做错了什么?
【问题讨论】:
【参考方案1】:我认为问题的根源在于错误
unable to write 'random state'
e is 65537 (0x10001)
搜索 *** 找到了这些结果。我要强调的是,您以 sudo
或直接以 root 身份运行 openssl 程序以避免任何可能的权限问题。
Windows 中的修复: https://***.com/a/12522479/3765769
在 Linux 中: https://***.com/a/94458/3765769
【讨论】:
“我要强调的是,您以 sudo 或直接以 root 身份运行 openssl 程序以避免任何可能的权限问题” - 这通常是个坏主意。这个想法是避免 root 用于标准命令,并且仅在需要时使用它。 @Mark 我看到了这个解决方案并尝试了它。它对我不起作用【参考方案2】:你能在运行这两个命令时检查你是否有适当的权限吗?也许尝试使用具有管理员权限的用户做同样的事情。
在执行以下命令之前,还要确保创建的文件 privatekey.pem 具有适当的权限(必要时使用 chmod)
openssl req -new -key privatekey.pem -out csr.pem
提交这个作为答案,因为我没有足够的声誉来发表评论。
【讨论】:
【参考方案3】:无法加载私钥 6312:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:647:Expecting: ANY PRIVATE KEY
我在 OS X 上运行了您的命令,但无法重现结果。
我确实使用了-config
选项,因为我有一个“OpenSSL 服务器配置模板”,可以轻松生成 CSR 和自签名证书:
$ mkdir test
$ cd test
$ openssl req -new -key privatekey.pem -out csr.pem -config example-com.conf
配置文件名为example-com.conf
,您可以在How do I edit a self signed certificate created using openssl xampp?找到它。编辑它以适合您的口味(特别是 DNS 名称)。
如果有兴趣,这里是 req
sub-command 上的 OpenSSL 手册页。
我检查了生成的密钥,它看起来像
-----BEGIN RSA PRIVATE KEY----- 很多字符 -----结束 RSA 私钥-----
您可以验证您刚刚创建的密钥:
$ openssl rsa -in privatekey.pem -inform PEM -text -noout
Private-Key: (2048 bit)
modulus:
00:b0:91:ce:57:28:0f:5c:3a:c3:29:d7:23:6a:71:
ca:64:49:fc:24:ea:69:a3:09:d6:49:94:17:b9:09:
65:fa:5a:10:47:a4:9b:b8:cd:6d:32:74:19:8d:5c:
79:92:f0:a6:43:9c:75:a3:7b:ef:c4:c3:d9:c2:db:
b9:bd:ec:14:a8:b1:52:73:8f:56:c8:5c:16:08:56:
ff:c2:2b:35:3c:0a:0f:34:d0:91:c1:54:7e:72:e8:
97:bf:ea:46:69:5f:e4:21:8d:7a:f5:a5:6b:6a:e8:
00:56:bc:02:f6:b4:ae:6e:89:a6:50:aa:5b:2f:d8:
7d:99:04:61:51:76:b3:5e:9e:30:52:99:54:26:e2:
3a:54:ec:78:34:e6:9a:b7:c2:58:5c:51:3d:39:52:
d4:6e:0c:6e:a1:a0:a5:f1:4d:5a:f5:0b:1a:6e:dc:
f3:bb:0d:d0:53:51:b0:1a:04:ee:86:35:d5:f3:8b:
0d:bc:19:61:6c:0c:b2:7b:a9:7c:47:97:01:bb:a2:
6a:74:d9:19:e9:df:60:07:d4:95:4c:83:f8:3b:84:
c2:b8:3d:b9:a7:34:0a:9b:a3:c6:70:cc:ef:de:f4:
64:88:f1:56:d3:2a:fd:5a:82:88:96:66:93:6c:a0:
b8:ec:e4:4c:e8:76:5c:9c:fc:c4:60:72:b6:9a:3f:
98:a3
publicExponent: 65537 (0x10001)
privateExponent:
00:87:ab:f1:65:ac:e5:68:93:ca:64:3a:e7:fe:a1:
62:c7:7e:c5:dc:c3:b5:d9:cd:f4:36:e3:30:fb:40:
0a:78:bc:7d:67:df:46:bc:50:34:88:a1:07:05:44:
ba:31:ba:f1:b6:5f:e1:50:76:29:bd:02:54:2f:d2:
cf:bc:ec:4a:cf:78:39:07:8c:6b:3d:56:ec:a3:09:
de:49:9f:13:af:87:77:39:b8:cd:56:45:0b:48:56:
0a:4c:2f:c2:5c:b3:8e:c2:6d:48:be:b9:95:79:36:
bd:13:e8:31:4a:c9:78:82:7d:08:2b:51:4a:f1:cf:
a2:6a:52:20:49:0d:31:34:10:88:02:d7:a7:07:70:
32:b5:f5:8c:cc:d4:b2:8d:b9:aa:bb:33:82:1a:74:
bd:4d:4f:e9:e0:cc:f2:27:fb:98:34:2c:77:56:6f:
88:3a:66:32:5d:7d:57:c6:5b:63:39:fa:32:04:9d:
e3:cc:a5:b6:44:91:fd:7d:d1:b6:2d:16:47:59:81:
3d:cf:d9:a7:58:2a:d6:61:5d:c6:69:3b:7a:70:50:
4f:80:f4:d9:fb:c8:7d:5e:44:9e:ac:c8:e6:aa:49:
c3:d6:df:6b:03:68:25:a3:2b:89:8f:9a:35:3a:58:
7d:71:b4:08:d9:04:7b:b9:96:17:f3:a5:19:c5:07:
4e:c1
prime1:
00:d7:d0:d8:8c:b5:86:ed:0e:06:70:c9:54:00:25:
d7:8c:e4:65:51:1b:c5:ba:33:c2:02:1a:dc:80:a6:
ae:8e:1e:e8:c0:b7:04:11:5a:e3:98:52:8f:4a:7a:
43:b8:e8:1b:c8:d6:d3:b2:dc:70:59:a5:ca:83:bb:
35:f1:6c:f5:cb:d0:f4:04:5e:aa:7c:d0:ec:d7:4a:
d5:1c:7c:e2:67:e4:e8:17:95:9b:4e:2b:a0:26:74:
61:d0:a0:15:27:18:e5:84:b5:54:ef:be:82:35:7e:
78:e0:49:6b:4e:ae:93:53:a0:81:a3:8e:de:d3:e5:
dc:c5:ba:03:36:14:47:97:03
prime2:
00:d1:72:3b:f5:34:b1:11:78:b2:79:f4:3e:d7:be:
bf:cc:b3:09:ea:24:a4:cc:7f:64:73:96:d2:48:9e:
55:bc:79:23:c2:d9:80:81:7d:a4:a5:4b:43:33:8e:
62:04:ec:8d:22:d7:43:5e:41:b6:4d:e9:b0:cc:70:
63:17:70:93:88:81:f5:84:a6:3f:2b:98:33:a3:69:
53:11:c7:95:8c:30:ea:e8:58:c7:77:10:b4:a8:f5:
bf:5e:cf:e1:99:bb:b3:4e:57:d2:4c:f7:73:de:8a:
98:8e:7c:26:37:6c:e4:77:c6:d2:ed:5d:53:a7:15:
c3:9c:67:61:d3:24:9a:f5:e1
exponent1:
00:83:34:59:e2:b9:9d:8c:d2:e1:01:82:b4:89:de:
77:bc:15:42:af:5b:c6:0a:dc:da:8e:f3:0b:a9:3f:
2c:92:04:a2:96:3e:ed:bf:2b:55:80:ce:78:84:db:
ed:fe:25:46:77:04:7b:f1:9a:68:c7:67:ae:c6:05:
73:d7:11:da:21:0e:28:bb:db:5d:a4:c2:53:aa:d3:
b8:da:37:e6:61:29:5e:1c:b0:7c:99:ba:96:03:aa:
ef:a8:a9:1a:13:09:e4:c7:98:82:49:ba:b5:68:96:
3a:20:89:22:2e:d4:9d:86:d2:e6:dd:ab:c7:36:65:
e1:a1:67:e3:f9:e5:bc:5c:47
exponent2:
00:81:6d:b9:55:8f:09:39:05:c0:2d:12:dd:5e:cf:
56:91:35:b6:93:c5:af:3d:5c:20:04:3a:18:9a:9d:
95:d7:d1:78:62:e9:ab:ba:d9:9c:cc:34:95:43:9f:
e2:3c:ae:bd:8c:e1:3f:95:58:c0:42:a7:7e:04:e8:
12:a4:22:82:59:22:0e:49:b9:be:61:bf:3d:71:e7:
1d:59:68:5f:a6:f1:77:c8:bb:4c:0f:ec:f7:e7:4d:
6d:c4:36:6c:70:67:08:a8:0a:27:40:3e:ce:90:a0:
4f:24:05:de:4b:f3:f3:bf:7c:d3:4d:b1:95:87:34:
30:dc:4f:1a:a9:b2:fe:3b:a1
coefficient:
6d:51:b3:6e:87:8d:aa:f0:55:c4:22:21:62:a9:ea:
24:b3:b7:91:40:f5:78:5d:f1:40:45:7e:0d:a2:a3:
54:46:ba:42:33:b6:cd:57:a1:85:bc:3d:ba:1c:eb:
87:33:a9:e9:63:1e:7c:2c:89:98:b9:0f:4b:e8:c4:
79:bd:00:6a:f5:3e:ea:63:f1:9e:aa:47:35:5a:22:
fc:4e:e3:61:7e:eb:dc:a6:c0:2c:d5:fd:22:9f:01:
59:32:15:db:41:99:b7:a8:c1:eb:1e:42:c7:1b:c7:
c8:56:86:a8:34:fe:1c:48:b6:6e:f1:c1:5c:96:bf:
9d:fa:e5:4c:d0:2a:d9:09
无法写入“随机状态”
这是一个众所周知的问题。 OpenSSL 使用默认配置文件。您可以使用correct location of openssl.cnf file找到配置文件。
默认配置文件包括以下几行:
$ cat /usr/local/ssl/macosx-x64/openssl.cnf
...
HOME = .
RANDFILE = $ENV::HOME/.rnd
...
要保存随机文件,您应该将HOME
和RANDFILE
指向一个有效位置。在 Windows 上,您在命令提示符下键入 set HOME=...
和 set RANDFILE=...
。或者更好的是,在您使用的 OpenSSL 配置文件中进行更改。
另见How to fix “unable to write 'random state' ” in openssl 和How do I make OpenSSL write the RANDFILE on Windows Vista?。
我正在尝试按照这些说明为我的 ElasticBeanstalk 环境配置 HTTPS。
下图中的说明有误。 不要在通用名称 (CN) 中放置 DNS 名称。
IETF(发布 RFC 的人)和 CA/B 论坛(浏览器和 CA 相互勾结的卡特尔)都反对在通用名称中放置 DNS 名称。您应该特别注意 CA/B 的建议,因为浏览器和 CA 提出了这些规则,并且浏览器遵循它们(并且它们不遵循 RFC)。如需参考,请参阅RFC 5280、RFC 6125 和CA/B Baseline Requirements。
相反,将 DNS 名称放在主题备用名称 (SAN) 中。 IETF 和 CA/B 都指定了它。
自定义 OpenSSL 配置文件会为您处理此问题。您只需更改[ alternate_names ]
部分下列出的 DNS 名称。例如,这是为域example.com
设置的一组名称。请注意,CN 中没有 DNS 名称:
[ subject ]
...
commonName = Common Name (e.g. server FQDN or YOUR name)
commonName_default = Example Company
[ alternate_names ]
DNS.1 = example.com
DNS.2 = www.example.com
DNS.3 = mail.example.com
DNS.4 = ftp.example.com
【讨论】:
我认为 keyform 不会有帮助,因为 PEM 无论如何都是默认的(根据文档)。 -nodes 似乎不是一个好的解决方案,因为“如果指定了此选项,那么如果创建了私钥,它将不会被加密”。关键是它是加密的,不是吗?无论如何,我认为我不能上传使用密码加密的密钥。 @ethan123 - 你是对的。我无法在 OS X 上重现您的结果。您使用的是什么操作系统? @ethan123 - 我更新了答案以包含使用openssl rsa
命令测试密钥的说明。以上是关于无法加载私钥的主要内容,如果未能解决你的问题,请参考以下文章