为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理员身份运行。
-
点击开始 – >所有程序 – >附件
-
右键单击记事本并select以pipe理员身份运行
-
单击“Windows需要您的权限”UAC窗口上的继续。
-
当记事本打开时单击文件 – >打开
-
在文件名字段中键入C:\ Windows \ System32 \ Drivers \ etc \ hosts
-
点击打开
-
将其添加到您的%WINDIR%\ System32 \ drivers \ etc \ hosts文件中:127.0.0.1 localdev.YOURSITE.net
-
保存
-
closures并重新启动浏览器
在Mac或Linux上:
- 用
su
权限打开/ etc / hosts - 添加
127.0.0.1 localdev.YOURSITE.net
- 保存
开发时使用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