运行SSL的node.js服务器与godaddy gd_bundle.crt

问题描述:

我无法让我的SSL服务器证书的从GoDaddy的运行SSL的node.js服务器与godaddy gd_bundle.crt

使用快递工作:3.1.0

下面这个作品用钥匙/这是本地产生的/不通过的Go Daddy签署CRT(浏览器抱怨,但如果添加例外,它的工作原理。

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 WHI CH我相信你实现这样的,但是我得到一个错误

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); 

有了这个配置,我得到错误:107(净值:: ERR_SSL_PROTOCOL_ERROR):SSL协议错误。

真相被告知我不是在创建他们的钥匙/ certs我们的devops家伙......我不知道如果我错误地实施了godaddy,或者如果有方法确保他设置密钥/ crt文件正确....

有没有人看到任何公然明显错误?

节点要求将CA链中的每个证书分别传递到一个数组中。 gd_bundle.crt大概是这样的:

-----BEGIN CERTIFICATE----- 
MIIE3jCCA... 
-----END CERTIFICATE----- 
-----BEGIN CERTIFICATE----- 
MIIEADCCA... 
-----END CERTIFICATE----- 

每个证书都需要被放在它自己的文件(即gd1.crtgd2.crt),并分别读出。

https.createServer({ 
    key: fs.readFileSync('mysite.key'), 
    certificate: fs.readFileSync('mysite.crt'), 
    ca: [fs.readFileSync('gd1.crt'), fs.readFileSync('gd2.crt')] 
}); 
+0

是的,这里面gd_bundle.crt有什么似乎是两个CA的我认为这是奇怪的....所以你说我需要进行编辑,并把他们两个文件,并在数组中加载它们。我会试试这个谢谢你! – nwkeeley 2013-04-29 12:14:17

+0

确认将每个'BEGIN CERTIFICATE' ...'END CERTIFICATE'块放在一个单独的文件中,然后使用这里显示的数组,为我工作。解决的网站,似乎在桌面上很好,但不被android信任,使用comodo连接的“apache包文件”。 – doug65536 2015-10-08 04:16:04

最近,我对我们的Node.js服务器之一,Godaddy的SSL证书,有类似的问题。在我的情况下,问题出在我们的一台服务器使用PHP的curl函数验证SSL。

事实证明,在将CSR提交给Godaddy时,我必须选择SHA-1签名算法。我想它与旧系统更兼容。

+0

相关:Mozilla的[逐步淘汰证书与SHA-1基于签名算法(http://blog.mozilla.org/security/2014/09/23/phasing-out-certificates-with-sha-1-based-signature - 算法/),Google的[Chrome中SHA-1证书更新](http://security.googleblog.com/2015/12/an-update-on-sha-1-certificates-in.html),Microsoft [SHA-1弃用更新](http://security.googleblog.com/2015/12/an-update-on-sha-1-certificates-in.html)等 – jww 2016-05-05 03:35:42

向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----- 

TO gd_bundle_01.crt

-----BEGIN CERTIFICATE----- 
MIIE3jCCA8agAwIBAgICAwEwDQYJKoZIhvcNAQEFBQAwYzELMAkGA1UEBhMCVVMx 
RE4+uXR21aITVSzGh6O1mawGhId/dQb8vxRMDsxuxN89txJx9OjxUUAiKEngHUuH 
qDTMBqLdElrRhjZkAzVvb3du6/KFUJheqwNTrZEjYx8WnM25sgVjOuH0aBsXBTWV 
-----END CERTIFICATE----- 

AND 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); 
+0

我已经从接收到的Godaddy两个文件。一个较小,只包含一个证书。另一个名为gd_bundle-g2-g1.crt。我知道我需要打破它......但我的密钥文件在哪里? – 2014-08-14 11:37:57

+0

你必须生成服务器的CSR密钥文件,检查GoDaddy的帮助,这在这里http://support.godaddy.com/help/article/5276/generating-a-certificate-signing-request-csr-tomcat- 4-X5-X6-X – fuelusumar 2014-08-28 21:17:28

+0

你可以使用这个命令太...'$的openssl genrsa -des3退房手续www.yourdomain-example.com.key 2048' – fuelusumar 2014-08-28 21:21:07

简单

为什么这么具体的只是GoDaddy的CA软件包时,你可以保持不同的环境相同的方法?例如,我只需要dev env的两个文件,但生产使用GoDaddy证书,并且有许多如此操作?

对于GoDaddy的,我把他们的包,并将它添加到一个单一的文件,并命名为扩展名为PEM以及其中给出了各类证书的一个非常标准的做法密钥文件。

然后你最终只是在做这适用于所有环境:

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数组路由,但对于特定版本我可能会出错。