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

时间:2014-03-25 21:22:24

标签: ssl openssl

我在过去三个小时内一直在努力尝试使用pfx创建。OpenSSL文件。我一直关注此document,并且一直按照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,我也会收到错误。

无论我做什么,我似乎都能得到它。

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:13)

  

我收到错误:无法加载证书

myserver.crt需要采用PEM格式。它有----- BEGIN CERTIFICATE ---------- END CERTIFICATE -----吗?


myserver.crt实际上应该是一个证书链(而不仅仅是一个服务器证书)。该链应包括客户端验证链所需的所有中间证书。

您发送所有中间证书以解决"哪个目录"问题。 "哪个目录"是PKI中众所周知的问题。本质上,客户端不知道从哪里获取缺少的中间证书。为了避免这个问题,你发送所有中间体。

我经常使用Startcom,因为他们提供免费的Class 1证书。当我从他们那里获得签名的服务器证书(例如,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后):

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

命令应该以&#34;验证确定&#34;:

完成
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)命令的文档。

答案 1 :(得分:1)

  

我一直关注这个文件......

顺便提一下,来自您的文档cited

  

基本证书是证书的公共名称(CN)   证书设置为客户端的特定域或子域   将用于访问该网站。例如,www.contoso.com。这些   证书仅保护CN指定的单个域名。

这类事情有两个标准。首先是RFC,其次是CA-Browser(CA / B)要求。 RFC是通用的,因为它们适用于许多不同的协议和服务,并且它们构建了广泛的网络以涵盖许多现有的实践。由于这些原因,RFC有些邋 - - 它们允许许多反直觉的东西。例如,请查看第4.2.1.3节中RFC 5280允许的keyUsage

CA和浏览器聚在一起组成了CA / B论坛。他们一起发布了他们遵循的标准。 CA / B实践更加自律(您可能会将其视为RFC的一个子集)。如果您查看他们的Baseline Requirements,那么您会发现CN已弃用且不应使用。如果使用CN,则SAN

中必须包含相同的名称
  

9.2.2主题通用名称字段

     

证书字段:subject:commonName(OID 2.5.4.3)

     

必填/可选:已弃用(不鼓励,但未被禁止)

     

内容:如果存在,该字段必须包含单个IP地址或   完全限定的域名,是包含在其中的值之一   证书的subjectAltName扩展名(参见第9.2.1节)。

底线:您应该避免在CN中添加主机名或域名。你可以避免它,因为这是CA同意做的事情,也是浏览器所期望的。 (如果您没有通过浏览器访问该网站,那么就按照自己的意愿行事。)

幽默地,两个标准都指定使用完全合格的域名。 FQDN是以点&#34;结尾的名称。&#34;。我还没有看到任何一个标准都能很好地形成的证书。