localhost的自签名SSL证书,如何使其受信任

时间:2014-12-22 19:07:27

标签: javascript security ssl https ssl-certificate

我有一个Owin自托管C#应用程序,提供超过127.0.0.1:5555的Web API服务(它只侦听localhost,没有外部连接)。

使用AngularJS应用程序中的Ajax调用这些Web API服务。另外:Owin应用程序的原因是需要与硬件进行某些交互,这在浏览器中是不可能的。此外,AngularJS应用程序供内部使用,因此我可以控制所使用的浏览器。

以上在HTTP上工作得很好,但Angular JS应用程序需要使用SSL,除非Owin应用程序也使用SSL(否则你得到"混合内容"错误),这不起作用。

我已经购买了AngularJS应用程序的官方证书,我正在使用Owin localhost的自签名证书。

问题是我得到了" NET :: ERR_CERT_AUTHORITY_INVALID" (当从Chrome测试时)和" net :: ERR_INSECURE_RESPONSE"与Owin Web API交谈时来自AngularJS应用程序。

以下是我的所作所为:

我使用CentOS框为localhost生成证书并将其导出为pkcs12 / pfx格式。我还生成了一个CA证书并以相同的方式导出它。

使用MMC我在运行Angular& amp;的Windows 7机器上导入了localhost证书。将Owin应用程序转换为证书(本地计算机)>个人>证书。

我还将Windows 7计算机上的CA证书导入证书(本地计算机)> “受信任的根证书认证”>证书

查看localhost证书,它表示"发布到:localhost",发布者:" ca.acme.com","你有一个私钥密切关键词到此证书",(在证书路径下)"此证书是好的"

CA证书表示"发布到:ca.acme.com",发布者:" ca.acme.com","您有一个私钥,表示相关信息到此证书",(在证书路径下)"此证书是好的"

netsh http show sslcert

IP:port                 : 127.0.0.1:5555 
Certificate Hash        : 1234555555555555555555511155555555555555
Application ID          : {1234a123-1234-1234-1234-123412341234} 
Certificate Store Name  : (null) 
Verify Client Certificate Revocation    : Enabled
Verify Revocation Using Cached Client Certificate Only    : Disabled
Usage Check    : Enabled
Revocation Freshness Time : 0 
URL Retrieval Timeout   : 0 
Ctl Identifier          : (null) 
Ctl Store Name          : (null) 
DS Mapper Usage    : Disabled
Negotiate Client Certificate    : Disabled

我错过了什么?如何让Chrome等信任本地主机的SSL证书?

3 个答案:

答案 0 :(得分:6)

我得到了这个(至少足以满足我目前的需求)。

我将localhost证书从“证书(本地计算机)>个人>证书”复制到“证书(当前用户)>个人>证书” 。这消除了Chrome中的https红色交叉(以及“NET :: ERR_CERT_AUTHORITY_INVALID”消息)以及AngularJS中的“net :: ERR_INSECURE_RESPONSE”错误。

请注意,在我的情况下,localhost证书必须同时位于本地计算机存储和当前用户存储中,否则用于将其绑定到端口5555(对于Owin应用程序)的netsh命令将失败:

netsh http add sslcert ipport=127.0.0.1:5555 certhash=1234555555555555555555511155555555555555 appid={1234a123-1234-1234-1234-123412341234}

SSL Certificate add failed, Error: 1312, A specified logon session does not exist. It may already have been terminated.

Chrome中仍然没有漂亮的绿色挂锁(它现在在垫锁上有一个黄色的小三角形,“此网站的身份已经过ca.acme.com验证,但没有公开审核记录”),但这似乎并没有干扰Web API通信,所以应该没问题。

如果有人知道一个简单的方法可以让它变得绿色而且没有任何警告,我仍然感兴趣,但这并不重要。

答案 1 :(得分:0)

在Linux上,我必须apt-gt install libnss3-tools

使用libnss3-tools,您可以获得certutil

现在是关键命令:

certutil -d sql:$HOME/.pki/nssdb -A -t "CP,CP," -n <your alias> -i <your crt-file to import>

这解决了我在Raspberry / Linux上使用Chrome的所有问题

答案 2 :(得分:-2)

没有;您将无法获得由任何信誉良好的SSL提供商专业签署的“localhost”证书,因为“localhost”不属于您所属的域名。 (事实上​​,它并不完全属于域名 ;它是一个简单的主机名。)

您可以创建一个真正的域名(例如localhost.example.com),该域名解析为127.0.0.1并获得该签名的证书,但这是相当可疑的。一些SSL提供商可能无论如何都不签名。不过,值得一试!