签署本地主机的SSL证书,如何使信任

我有一个Owin自主主机的C#应用​​程序,它提供了超过127.0.0.1:5555的Web API服务(它只能监听本地主机,没有外部连接)。

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

上面的工作比HTTP更好,但Angular JS应用程序需要使用SSL,除非Owin应用程序也使用SSL(否则您会得到“混合内容”错误),否则SSL将不起作用。

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

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

以下是我所做的一切:广泛的笔触:

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

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

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

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


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

我将本地主机证书从“证书( 本地计算机 )”>“个人”证书“复制到”证书( 当前用户 )>个人>证书“。 这消除了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工具,您可以获得certutil

现在的关键命令是:

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

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


没有; 您将无法获得由任何信誉良好的SSL提供商专业签名的“localhost”证书,因为“localhost”不在属于您的域名之下。 (事实上​​,它根本不在一个域名下;它是一个纯粹的主机名。)

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

链接地址: http://www.djcxy.com/p/24101.html

上一篇: signed SSL cert for localhost, how to make trusted

下一篇: Split 1d array into chunks