本地主机的自签名SSL证书,如何建立可信

Self-signed SSL cert for localhost, how to make trusted

本文关键字:何建立 建立 证书 主机 SSL      更新时间:2023-09-26

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

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

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

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

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

以下是我所做的,大致如下:

我使用 CentOS 盒子为本地主机生成证书并将其导出为 pkcs12/pfx 格式。 我还生成了一个 CA 证书并以相同的方式导出它。

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

我还将 Windows 7 计算机上的 CA 证书导入到证书(本地计算机)>受信任的根证书身份验证>证书中

查看 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 证书?

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

我将本地主机证书从"证书(本地计算机)>个人>证书"复制到"证书(当前用户)>个人>证书"。 这摆脱了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 通信,所以应该没问题。

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

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