用godaddy gd_bundle.crt运行SSL node.js服务器
我无法让我的SSL服务器使用godaddy的证书
使用Express:3.1.0
下面这个工作与一个键/ crt本地生成/不签署由爸爸(浏览器抱怨,但如果你添加exception它的作品。
var http = require('https'); var privateKey = fs.readFileSync('/var/www/dev/ssl/server.key').toString(); var certificate = fs.readFileSync('/var/www/dev/ssl/server.crt').toString(); var credentials = {key: privateKey, cert: certificate}; var https = http.createServer(credentials, app);
随着godaddy我提供了一个额外的文件gd_bundle.crt,我相信你这样实现,但是我得到一个错误
var http = require('https'); var privateKey = fs.readFileSync('/var/www/prod/ssl/mysite.key').toString(); var certificate = fs.readFileSync('/var/www/prod/ssl/mysite.com.crt').toString(); var ca = fs.readFileSync('/var/www/prod/ssl/gd_bundle.crt').toString(); var credentials = {key: privateKey, cert: certificate, ca: ca}; var https = http.createServer(credentials, app);
有了这个configuration,我得到:错误107(net :: ERR_SSL_PROTOCOL_ERROR):SSL协议错误。
真相被告知我不是创build他们的钥匙/证书我们的devops家伙…我不知道如果我正在执行godaddy错误,或者如果有一种方法来确保他正确设置密钥/ crt文件,我可以排除故障….
有没有人看到明显的错误?
节点要求将CA链中的每个证书分别传递到一个数组中。 gd_bundle.crt
可能看起来像这样:
-----BEGIN CERTIFICATE----- MIIE3jCCA... -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIEADCCA... -----END CERTIFICATE-----
每个证书都需要放在自己的文件(即gd1.crt
和gd2.crt
)中并单独读取。
https.createServer({ key: fs.readFileSync('mysite.key'), certificate: fs.readFileSync('mysite.crt'), ca: [fs.readFileSync('gd1.crt'), fs.readFileSync('gd2.crt')] });
请求GoDaddy在SHA-1签名中获得您的SSL证书,并将这个包文件分解成两个文件,这样…
从你的gd_bundle.crt
-----BEGIN CERTIFICATE----- MIIE3jCCA8agAwIBAgICAwEwDQYJKoZIhvcNAQEFBQAwYzELMAkGA1UEBhMCVVMx RE4+uXR21aITVSzGh6O1mawGhId/dQb8vxRMDsxuxN89txJx9OjxUUAiKEngHUuH qDTMBqLdElrRhjZkAzVvb3du6/KFUJheqwNTrZEjYx8WnM25sgVjOuH0aBsXBTWV -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- 56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mERdEr/VxqHD3VILs9RaRegAhJhldX RQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/bvZ8 -----END CERTIFICATE-----
到gd_bundle_01.crt
-----BEGIN CERTIFICATE----- MIIE3jCCA8agAwIBAgICAwEwDQYJKoZIhvcNAQEFBQAwYzELMAkGA1UEBhMCVVMx RE4+uXR21aITVSzGh6O1mawGhId/dQb8vxRMDsxuxN89txJx9OjxUUAiKEngHUuH qDTMBqLdElrRhjZkAzVvb3du6/KFUJheqwNTrZEjYx8WnM25sgVjOuH0aBsXBTWV -----END CERTIFICATE-----
和gd_bundle_02.crt
-----BEGIN CERTIFICATE----- 56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mERdEr/VxqHD3VILs9RaRegAhJhldX RQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/bvZ8 -----END CERTIFICATE-----
然后在你的服务器上这样做
var fs = require('fs'), https = require('https'); var ssl = { key: fs.readFileSync('./ssl/server.key', 'utf8'), cert: fs.readFileSync('./ssl/server.crt', 'utf8'), ca: [fs.readFileSync('./ssl/bundle_01.crt', 'utf8'), fs.readFileSync('./ssl/bundle_02.crt', 'utf8')] }; https.createServer(ssl, function(req, res) { //... your code here ... }).listen(443);
最近我在我们的一个node.js服务器上遇到了与Godaddy的SSL证书类似的问题。 在我的情况下,问题是我们的一个服务器使用PHP的curl函数validationSSL。
事实certificate,在向Godaddy提交CSR时必须selectSHA-1签名algorithm。 我想这是更老的系统兼容。
更简单
为什么对于GoDaddy的CA软件包如此特殊?如果您可以针对不同的环境保持相同的方法? 我只需要两个文件为开发环境例如,但生产使用GoDaddy证书,有很多,所以该怎么办?
对于GoDaddy,我把他们的软件包和追加到一个单一的文件,并命名扩展名为PEM以及密钥文件,为所有types的证书提供了一个非常标准的方法。
那么你最终只是在所有的环境中这样做:
server = https.createServer({ key: fs.readFileSync(config.sslKey), cert: fs.readFileSync(config.sslCert), },app).listen(config.sslPort);
在您的GoDaddy cert.pem文件中,您只需将您的证书和您的捆绑包文件从1到x(从上到下)完成即可:
-----BEGIN CERTIFICATE----- site certificate goes here -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- CA 1 goes here -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- CA 2 goes here -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- CA X goes here -----END CERTIFICATE-----
不一定更好,但我更喜欢它。 我没有遇到Express 3.x,我不得不做的CA数组路线,但我可能是错误的具体版本。
- 如何通过nodejs中的Web代理使用HTTPS
- Node.js中的asynchronoushttps请求
- 这是什么意思??? 当我使用strongloop控制器API时,Vanilla Node.js I / O阻塞会清除吗?
- 我怎样才能find一个客户端可用的密码套件
- Node.js OpenStack Swift插件连接错误
- NodeJS和SSL – “密码读取错误”
- 如何创build一个从HTTP / HTTPS API获取数据的Alexa Skill(在AWS Lambda上使用Node.js的“Alexa技能工具包”)
- CloudFlare“SSL:灵活的”HTTPS不能在自定义端口上工作
- 将http请求redirect到nodejs中的https