使用自己的证书

时间:2016-09-29 17:01:59

标签: ssl https localhost

我们正在开发一个本地服务器应用程序(目前用nodejs编写),我们的网站用它来操作本地文件和文件夹(浏览,上传,下载......)。

基本上,客户安装nodejs app,启动本地服务器监听127.0.0.1
然后,当(例如)网站上需要本地文件夹列表时,JS脚本会查询本地服务器,该服务器返回本地文件夹,并显示在网站上。

问题是当网站配置为HTTPS时,网站的JS拒绝与HTTP-non-S nodejs应用程序通信。

我们正在探索各种选择:

  • 使用与应用程序一起部署的自签名证书,并在安装过程中信任它们在计算机上,但我觉得很多次它不会工作
  • 使用"适当的" local.example.com的证书,其中local.example.com指向127.0.0.1的DNS条目,但似乎大多数(如果不是全部)证书颁发机构的CGU禁止向一般公众分发私钥。

现在我想到了另一种意思。一个"打包" HTTPS服务器(用任何语言编写,我都不在乎),"生活"在exe文件中,使用正确的SSL证书签名,使用应用程序的证书?
我不确定我是否有任何意义,我不太了解证书......

谢谢!

1 个答案:

答案 0 :(得分:0)

我们最终使用certutil:

添加了一个自签名的根CA.
certutil.exe -user -addstore Root "mycert\rootca.cer"

由于我们正在添加一个根CA,它会生成一个用户必须接受的警告弹出窗口,但它被认为是可接受的。

有一个“检查配置”屏幕,如果第一次没有正确添加证书,可以尝试再次添加证书。

有时组策略(GPO)会阻止信任自签名证书。在这种情况下,certutil的返回码为0(添加了证书),但根CA不受信任,因此本地服务器不起作用。因此,安装后,我们必须使用以下方法检查证书是否可信:

certutil.exe -user -verifystore Root xxx

xxx是证书序列号)。如果证书不受信任,则此命令会以错误退出,因此我们会解析CERT_TRUST_IS_UNTRUSTED_ROOT0x800b0109的输出。