本地主机的自签名SSL证书,如何使其受信任

11
我有一个 Owin 自托管的 C# 应用程序,可以通过 127.0.0.1:5555 提供 Web API 服务(仅在本地主机上监听,没有外部连接)。
这些 Web API 服务使用 AngularJS 应用程序中的 Ajax 进行调用。顺带一提:使用 Owin 应用程序的原因是需要与硬件进行某些交互,而这在浏览器内部是不可能的。此外,AngularJS 应用程序是为内部使用而设计的,因此可以控制所使用的浏览器。
以上内容在 HTTP 上运行非常良好,但是 AngularJS 应用程序需要使用 SSL,这并不起作用,除非 Owin 应用程序也使用 SSL(否则会出现“混合内容”错误)。
我已经购买了 AngularJS 应用程序的官方证书,并为 Owin 的 localhost 使用了自签名证书。
问题是当与 Owin Web API 通信时,我遇到了“NET::ERR_CERT_AUTHORITY_INVALID”(从 Chrome 中测试时)和来自 AngularJS 应用程序的“net::ERR_INSECURE_RESPONSE”。
以下是我大致执行的操作:
我使用 CentOS 盒子生成了用于 localhost 的证书,并将其导出为 pkcs12 / pfx 格式。我还生成了 CA 证书,并以同样的方式导出它。
使用 MMC,我将 localhost 证书导入运行 Angular 和 Owin 应用程序的 Windows 7 计算机中的证书(本地计算机) > 个人 > 证书。
我还将 CA 证书导入 Windows 7 计算机上的“证书(本地计算机)> 受信任的根证书颁发机构 > 证书”。
查看 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证书?


如果这只是为了您自己的测试:直接调用使用该证书的 HTTPS URL,并在浏览器中添加异常。如果您希望它在网络上的用户浏览器中随处可用-那么您需要获得由受信任的CA签名的证书。 - CBroe
https://dev59.com/PGsz5IYBdhLWcg3w6MNS - epascarello
@CBroe 这不是为了测试。此外,这将在大量内部计算机上使用; 我能否获得一个正式的 localhost 证书并以某种方式在所有计算机上使用它?由于这仅涉及 localhost 流量(没有敏感数据),因此我确实没有安全顾虑。 - Lars335
如果这是一个开发环境,那么请按照@Brad Parks的建议进行操作...它救了我的一天...!谢谢Brad... - SSG
2个回答

7

我已经做到了(至少对于我目前的需要足够了)。

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

请注意,在我的情况下,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
你怎么复制它?我不确定在MMC快照中该如何操作。是导出/导入吗? - Protector one

0
在Linux上,我必须执行apt-get 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>

这解决了我在树莓派/ Linux 上使用 Chrome 的所有问题。


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