运行SSL的Node.js服务器与GoDaddy gd_bundle.crt(Running SSL

2019-09-01 03:45发布

我无法让我的SSL服务器证书的从GoDaddy的工作

使用快递:3.1.0

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

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

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

说实话,我没有创造自己的密钥/证书我们DEVOPS家伙呢......我不知道如果我不正确实施GoDaddy的那些我如何能解决,或者如果有一种方法,以键/ CRT文件正确确保他设置....

有谁看到什么公然明显的错误?

Answer 1:

节点需要在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')]
});


Answer 2:

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

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


Answer 3:

最近,我对我们的Node.js服务器之一,Godaddy的SSL证书,有类似的问题。 在我的情况的问题是与我们的服务器验证SSL使用PHP的卷曲的功能之一。

事实证明,我有提交CSR到Godaddy的时候选择SHA-1签名算法。 我想这是与旧系统的兼容性更好。



Answer 4:

更简单

为什么只是GoDaddy的CA束这么具体,当你可以保持不同的环境相同的方法? 我只需要两个文件用于开发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-----

不一定好,但我更喜欢它。 我没有对快递3.x中,我不得不做CA阵列路线遇到,但我可能是错的特定版本。



文章来源: Running SSL node.js server with godaddy gd_bundle.crt