为localhost创build受信任的自签名SSL证书(用于Express / Node)

尝试遵循创build一个自签名证书与本地主机使用的各种指示,大部分的说明似乎是为IIS,但我试图使用Nodejs /快递。 它们都不能正常工作,因为在安装证书时,它不被信任。 这是我尝试过的失败:

  • 我怎样才能为localhost创build一个自签名的证书?
  • https://www.digitalocean.com/community/articles/how-to-create-a-ssl-certificate-on-nginx-for-ubuntu-12-04/
  • http://blogs.developerforce.com/developer-relations/2011/05/generating-valid-self-signed-certificates.html
  • http://www.robbagby.com/iis/self-signed-certificates-on-iis-7-the-easy-way-and-the-most-effective-way/

有人可以提供可以做到这一点的工作stream程吗? 我可以安装一个证书,但是我无法在chrome(v32)或IE(v10)中获得该证书的信任。

编辑:有人build议在评论中说问题是没有可信任的证书根。 我通过IE安装了证书,但仍然不被信任。

你可以尝试openSSL来生成证书。 看看这个 。

您将需要一个.key和.crt文件来将HTTPS添加到节点JS express服务器。 一旦你生成这个,使用这个代码添加HTTPS到服务器。

var https = require('https'); var fs = require('fs'); var express = require('express'); var options = { key: fs.readFileSync('/etc/apache2/ssl/server.key'), cert: fs.readFileSync('/etc/apache2/ssl/server.crt'), requestCert: false, rejectUnauthorized: false }; var app = express(); var server = https.createServer(options, app).listen(3000, function(){ console.log("server started at port 3000"); }); 

这在我的本地机器以及我已经部署的服务器上工作正常。 我在服务器上的那个是从goDaddy买的,但是localhost有一个自签名的证书。

但是,每个浏览器都会抛出一个错误,提示连接不可信,是否要继续? 我点击继续后,它工作正常。

如果有人用自签名证书绕过了这个错误,请指教。

最短的路。 在MacOS上testing,但可能在其他操作系统上的工作类似。

生成pem

 > openssl req -x509 -newkey rsa:2048 -keyout keytmp.pem -out cert.pem -days 365 > openssl rsa -in keytmp.pem -out key.pem 

您的快递服务器

 const express = require('express') const app = express() const https = require('https') const fs = require('fs') const port = 3000 app.get('/', (req, res) => { res.send('WORKING!') }) const httpsOptions = { key: fs.readFileSync('./key.pem'), cert: fs.readFileSync('./cert.pem') } const server = https.createServer(httpsOptions, app).listen(port, () => { console.log('server running at ' + port) }) 
  • 在谷歌浏览器中打开https://localhost:3000 ,你会发现它不安全。 然而!
  • 在开发者工具>安全性>查看证书:拖动图像到您的桌面,双击它。
  • 展开“信任”并将“使用此证书时”更改为“始终信任”。
  • 您可能会被提示进行身份validation。
  • 重新启动您的服务器。
  • 刷新你的浏览器。
  • 请享用! 🙂

如何为localhost: link生成SSL证书

 openssl genrsa -des3 -out server.key 1024 

您需要在此处input密码 ,您需要在以下步骤中重新键入密码

 openssl req -new -key server.key -out server.csr 

当被问及“Common Name”types时: localhost

 openssl x509 -req -days 1024 -in server.csr -signkey server.key -out server.crt 

这是我的工作

在窗户上

1)将其添加到%WINDIR%\ System32 \ drivers \ etc \ hosts文件中:127.0.0.1 localdev.YOURSITE.net (导致浏览器遇到与'localhost'有关的问题(对于跨源脚本)

Windows Vista和Windows 7 Vista和Windows 7使用用户帐户控制(UAC),因此记事本必须以pipe理员身份运行。

  1. 点击开始 – >所有程序 – >附件

  2. 右键单击记事本并select以​​pipe理员身份运行

  3. 单击“Windows需要您的权限”UAC窗口上的继续。

  4. 当记事本打开时单击文件 – >打开

  5. 在文件名字段中键入C:\ Windows \ System32 \ Drivers \ etc \ hosts

  6. 点击打开

  7. 将其添加到您的%WINDIR%\ System32 \ drivers \ etc \ hosts文件中:127.0.0.1 localdev.YOURSITE.net

  8. 保存

  9. closures并重新启动浏览器

在Mac或Linux上:

  1. su权限打开/ etc / hosts
  2. 添加127.0.0.1 localdev.YOURSITE.net
  3. 保存

开发时使用localdev.YOURSITE.net而不是localhost,所以如果你在ide中使用运行/debuggingconfiguration,一定要更新它。

在创buildcookiem时使用“.YOURSITE.net”作为cookiedomain(在开始处有一个点),然后它应该与所有子域一起工作。

2)使用localdev.url创build证书

提示:如果您在Windows上生成证书时遇到问题,请改用VirtualBox或Vmware机器。

3)按照 http://www.charlesproxy.com/documentation/using-charles/ssl-certificates/中; 所述导入证书

如果您使用的是OSX / Chrome,则可以将自签名SSL证书添加到您的系统钥匙串中,如下所述: http : //www.robpeck.com/2010/10/google-chrome-mac-os-x-and -self签名,SSL的证书

这是一个手动过程,但我终于搞定了。 只要确保通用名称(CN)设置为“本地主机”(不带端口),并在证书添加后,确保证书上的所有信任选项都设置为“始终信任”。 另外请确保您将其添加到“系统”钥匙串而不是“login”钥匙串。

如果你使用节点,为什么不用节点生成它们? 这个模块似乎是相当全面的function:

请注意,我不会即时生成。 使用某种构build脚本生成,以便拥有一致的证书和密钥。 否则,您将不得不每次授权新生成的自签名证书。

在Windows上,我使用MMC(开始>运行> MMC)信任iis开发证书,然后添加证书pipe理单元,select“本地计算机”,并接受默认值。 一旦添加证书snapip,展开本地计算机证书树以查看Personal下的,selectlocalhost证书,右键单击> all任务>导出。 接受导出向导中的所有默认值。

一旦保存了该文件,展开可信证书并开始导入刚导出的证书。 https://localhost现在在chrome中没有安全警告信任。

我从MSDN博客使用这个指南解决scheme#2 ,也在他的问题中共享一个链接,也应该使用MMC,但这对我工作。 决议#2