我无法让我的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文件正确确保他设置....
有谁看到什么公然明显的错误?
节点需要在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-----
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);
最近,我对我们的Node.js服务器之一,Godaddy的SSL证书,有类似的问题。 在我的情况的问题是与我们的服务器验证SSL使用PHP的卷曲的功能之一。
事实证明,我有提交CSR到Godaddy的时候选择SHA-1签名算法。 我想这是与旧系统的兼容性更好。
更简单
为什么只是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阵列路线遇到,但我可能是错的特定版本。