【问题标题】:Self-signed SSL cert for localhost, how to make trusted本地主机的自签名 SSL 证书,如何使可信
【发布时间】:2014-12-22 19:07:26
【问题描述】:

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

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

以上内容在 HTTP 上运行良好,但 Angular JS 应用程序需要使用 SSL,除非 Owin 应用程序也使用 SSL,否则它不起作用(否则会出现“混合内容”错误)。

我已经为 AngularJS 应用程序购买了一个官方证书,并且我正在为 Owin localhost 的东西使用自签名证书。

问题是我在与 Owin Web API 交谈时从 AngularJS 应用程序中得到“NET::ERR_CERT_AUTHORITY_INVALID”(从 Chrome 测试时)和“net::ERR_INSECURE_RESPONSE”。

这是我所做的,概括地说:

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

使用 MMC,我将运行 Angular 和 Owin 应用程序的 Windows 7 机器上的 localhost 证书导入到证书(本地计算机)> 个人 > 证书中。

我还将 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 证书?

【问题讨论】:

  • 如果这只是为了您自己的测试:直接调用使用该证书的HTTPS URL,并在您的浏览器中添加一个例外。如果您希望它可以在网络上用户的浏览器中随处使用 - 那么您需要获得由受信任的 CA 签名的证书。
  • @CBroe 不用于测试。此外,这将在大量内部计算机上使用;我可以获取 localhost 的官方证书并以某种方式在所有这些证书上使用它吗?由于这只是 localhost 流量(没有敏感数据),我真的没有安全问题。
  • 如果它是一个开发环境。那么请参考@Brad Parks 下面的建议......它拯救了我的一天......!谢谢布拉德...

标签: javascript security ssl https ssl-certificate


【解决方案1】:

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

我将 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 通信,所以应该没问题。

如果有人知道一种简单的方法,可以在没有警告的情况下让它变得绿色和美观,我仍然很感兴趣,但这并不重要。

【讨论】:

  • 如何复制?我不确定如何在 MMC 管理单元中执行此操作。是导出/导入吗?
【解决方案2】:

在 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 的所有问题

【讨论】:

    猜你喜欢
    • 2018-10-02
    • 2018-06-23
    • 1970-01-01
    • 2021-08-03
    • 2011-11-26
    • 1970-01-01
    • 1970-01-01
    • 2018-06-10
    相关资源
    最近更新 更多