jwe*_*ner 3 ssl ssl-certificate node.js
我有一个使用SSL在sub.domain.com上运行的Node.js服务器.它已经在桌面浏览器上运行了好几个月,但我注意到它在移动浏览器上不起作用.
我做了一些研究,很多人都认为我的证书链存在问题.我已经改变了我的代码看起来像但仍然没有运气.
这是我的代码:
var httpsOptions = {
ca: [fs.readFileSync("certrequest.csr")],
key: fs.readFileSync("privatekey.pem"),
cert: fs.readFileSync("certificate.pem")
};
var app = http.createServer(httpsOptions, function(req, res) {
log.cnsl.write("HTTP Request received from " + req.connection.remoteAddress);
//Do stuff
});
Run Code Online (Sandbox Code Playgroud)
我正在运行此命令来查看一些调试信息(我的服务器在端口5673上运行):
openssl s_client -connect sub.domain.com:5673 -showcerts | grep "^ "
Run Code Online (Sandbox Code Playgroud)
以下是该输出的重要部分
depth=0 O = *.domain.com, OU = Domain Control Validated, CN = *.domain.com
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 O = *.domain.com, OU = Domain Control Validated, CN = *.domain.com
verify error:num=27:certificate not trusted
verify return:1
depth=0 O = *.domain.com, OU = Domain Control Validated, CN = *domain.com
verify error:num=21:unable to verify the first certificate
verify return:1
Run Code Online (Sandbox Code Playgroud)
您将证书请求文件"certrequest.csr"作为CA放在听起来很奇怪.
CA字段应包含从您的个人证书到根证书的证书链.在我的配置中,它包含2个条目.一个作为根证书本身,第二个作为中间证书,因为我的发行人提供多级认证.
顺便说一句,您的认证公司肯定会在他们的常见问题解答中为您提供此类信息.
举个例子,这是我配置的摘录:
var httpsOptions = {
key:fs.readFileSync('/etc/ssl/private/ssl-main.key'),
cert:fs.readFileSync('/etc/ssl/private/ssl-main.crt'),
ca:[fs.readFileSync('/etc/ssl/private/ca.pem'),
fs.readFileSync('/etc/ssl/private/sub.class2.server.ca.pem')]
};
Run Code Online (Sandbox Code Playgroud)
无论如何,这并不能解释为什么它适用于非移动浏览器.我唯一的猜测是,他们将自己嵌入链条的一部分而移动设备不会出于磁盘空间的原因.
希望这可以帮助.
| 归档时间: |
|
| 查看次数: |
1582 次 |
| 最近记录: |