Node.js在移动设备上使用SSL通配符中断
我有一个Node.js服务器,运行在sub.domain.com上,使用SSL。它在桌面浏览器上已经运行了好几个月了,但我只是注意到它在移动浏览器上不起作用 我做了一些研究,有很多人认为我的证书链有问题。我已经修改了代码,看起来好像没有什么好运气 这是我的密码:Node.js在移动设备上使用SSL通配符中断,node.js,ssl,ssl-certificate,Node.js,Ssl,Ssl Certificate,我有一个Node.js服务器,运行在sub.domain.com上,使用SSL。它在桌面浏览器上已经运行了好几个月了,但我只是注意到它在移动浏览器上不起作用 我做了一些研究,有很多人认为我的证书链有问题。我已经修改了代码,看起来好像没有什么好运气 这是我的密码: var httpsOptions = { ca: [fs.readFileSync("certrequest.csr")], key: fs.readFileSync("privatekey.pem"), cer
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
});
我运行此命令是为了查看一些调试信息(我的服务器在端口5673上运行):
下面是该输出的重要部分
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
您将证书请求文件“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')]
};
无论如何,这并不能解释为什么它适用于非移动浏览器。我唯一的猜测是,由于磁盘空间的原因,他们将自己嵌入到链中,而手机不会
希望这有帮助 您能提供签发您的证书的公司的名称吗?这可能有助于为您提供正确的配置。本页提供了中间证书的完整列表:我在多个地方看到桌面浏览器比移动浏览器对证书链更为宽容。我将查看是否能找到正确的CA文件,并接受它是否有效。我不知何故从捆绑包中获取了错误的文件。实际上,我下面的另一个教程使用了certrequest.csr作为CA。。。我想我是误入歧途了。谢谢这为我解决了问题。不知道为什么它的评级如此高。
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')]
};