用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.crtgd2.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数组路线,但我可能是错误的具体版本。