Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js在移动设备上使用SSL通配符中断_Node.js_Ssl_Ssl Certificate - Fatal编程技术网

Node.js在移动设备上使用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

我有一个Node.js服务器,运行在sub.domain.com上,使用SSL。它在桌面浏览器上已经运行了好几个月了,但我只是注意到它在移动浏览器上不起作用

我做了一些研究,有很多人认为我的证书链有问题。我已经修改了代码,看起来好像没有什么好运气

这是我的密码:

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')]
};