尝试生成pfx文件时无法加载证书

32

我已经努力尝试了三个小时,使用 OpenSSL 创建一个 .pfx 文件。 我一直在遵循这个 文档Get a certificate using OpenSSL 标题下的说明。

现在我在这个步骤: openssl pkcs12 -export -out myserver.pfx -inkey myserver.key -in myserver.crt 并且正在使用 OpenSSL.exe 控制台。

但我遇到了这个错误: unable to load certificates

我还尝试过这个命令: x509 -text -in myserver.key 但是收到了这个错误: 0906D06D06C:PEM_read_bio:no start line:.\crypto\pem\pem_lib.b.c:703:Expecting: TRUSTED CERTIFICATE 如果我尝试使用 myserver.crt,我也会得到同样的错误提示。

无论我做什么似乎都无法解决这个问题。

请问有人可以帮忙吗?


4
谢谢。我希望当时有人告诉我的老板这不是一个编程或开发的话题,那么我就不会遭受那么多痛苦了 ;) - davy
2个回答

31
我遇到了错误:无法加载证书。
要求myserver.crt以PEM格式提供。它是否包含----- BEGIN CERTIFICATE ---------- END CERTIFICATE -----myserver.crt 实际上应该是一连串的证书(不仅仅只是一个服务器证书)。该链应包括客户端验证链所需的所有中间证书。
您可以发送所有中间证书以解决“哪个目录”问题。 “哪个目录”是PKI中众所周知的问题。实质上,客户端不知道去哪里获取缺失的中间证书。为避免此问题,您应发送所有中间证书。
我经常使用Startcom,因为他们提供免费的一级证书。当我从他们那里获得签名的服务器证书(例如,www-example-com.crt)时,我将他们的Class 1 Server Intermediate添加到其中。我可以从他们的网站Startcom CA certs上获取他们的Class 1 Server Intermediate。我使用的是sub.class1.server.ca.pem
使用www-example-com.crt,我的服务器证书如下:
$ cat www-example-com.crt

-----BEGIN CERTIFICATE-----
< My Server Certificate >
-----END CERTIFICATE-----

-----BEGIN CERTIFICATE-----
< Startcom Intermediate >
-----END CERTIFICATE-----

为了完整起见,私钥(例如www-example-com.key)也是PEM格式。它使用-----BEGIN RSA PRIVATE KEY----------END RSA PRIVATE KEY-----

我的服务器证书已经以PEM格式提供(并附带所需的中间证书),同时还有私钥。然后我发出以下命令(看起来与您正在使用的命令相同):

openssl pkcs12 -export -in www-example-com.crt -inkey www-example-com.key -out www-example-com.p12
当客户端连接时,它们使用Startcom CA。因此,在加载到IIS后测试连接的方式为:

当客户端连接时,它们使用Startcom CA。因此,在加载到IIS后测试连接的方式为:

openssl s_client -connect www.example.com:443 -CAfile startcom-ca.pem

该命令执行完毕后应显示"Verify OK":

SSL-Session:
    Protocol  : TLSv1
    Cipher    : DHE-RSA-AES256-SHA
    Session-ID: 37E5AF0EE1745AB2...
    Session-ID-ctx:
    Master-Key: 7B9F8A79D3CC3A41...
    Key-Arg   : None
    Start Time: 1243051912
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)

我也尝试过这样做:x509 -text -in myserver.key,但收到了错误信息...

x509 是用于证书的。如果您想转储密钥,请使用 OpenSSL 的 pkey 命令。请参阅 OpenSSL 的pkey(1) 命令文档。


谢谢。不,它们有--BEGIN PRIVATE KEY--和--END PRIVATE KEY--。 - davy
3
-in参数的参数必须是证书。你需要的是证书,而不是私钥 :) - jww
2
好的,我有点困惑。我的CA给了我一个像这样的文件用于我的crt:-----BEGIN PKCS #7 SIGNED DATA-----这是什么?我正在使用IIS。 - davy
4
openssl pkcs7 -in file.pem -print_certs -out certs.pem。我从未使用过这个命令。我总是获得PEM或DER编码的证书。对于DER证书,我会转换为PEM格式,然后执行上述操作。 - jww
3
谢谢你告诉我需要找一个包含“BEGIN CERTIFICATE”和“END CERTIFICATE”的版本。如果你来英国纽伯里,我请你吃晚饭。 - Gail Foad

-1
keytool -importcert -alias yourdns -keystore /usr/lib/jvm/java-11-openjdk-11.0.15.0.9-2.el7_9.x86_64/lib/security/cacerts -file  pathcertificate/.crc

password default = changeit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接