本地主机的自签名SSL证书,如何建立可信
Self-signed SSL cert for localhost, how to make trusted
我有一个 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的所有问题
- 实现一个建立在google.com之上的自定义搜索引擎
- 如何建立一个网页,检查我的路由器网络接口是否可以访问
- 用真或假初始化变量是否在 Javascript 中建立了内容的方向
- 建立phonegap/cordova iOS p2p视频聊天
- Tabrisjs无法建立连接包.json文件
- 如何在同源选项卡之间建立通信
- 推送器API:如何检查连接是否已建立
- 在AngularJS建立一个工厂而不是Singleton
- 我无法建立离子机器人项目..它给了我一个错误:生成cmd enont
- 为什么我得到cordova建立android问题'意外的令牌'
- 在Javascript中重新建立对象数组的索引(无拼接)
- jQuery mobile:在页面导航期间,当建立服务器连接时,下一个页面的样式将应用于当前页面
- 建立React 0.12项目的正确方法是什么
- 我可以在不使用Javascript的情况下建立一个坚实的网站吗
- 如何将值从Java传递到Javascript,从而建立Android WebView
- chrome.tabs.sendRequest:“端口错误:无法建立连接.接收端不存在
- JavaScript:为 iframe 重新建立父级
- ExtJS 4.1 :建立对对象的引用时出现问题
- Codecademy正在建立地址簿5/6
- 节点:建立连接时备份 socket.io 自定义发射器