Javascript Node.js/Express.js链证书不工作

Javascript Node.js/Express.js链证书不工作,javascript,node.js,ssl,express,ssl-certificate,Javascript,Node.js,Ssl,Express,Ssl Certificate,我在Express中有一个SSL服务器,它不能在所有浏览器上运行(除非用户手动信任网站),因为有些浏览器需要链证书(我们有自己的中间证书)。我已将我们的中间证书和链证书放在一个.crt文件中。链+中间证书位于INT\u CERT\u文件变量中。它似乎不起作用。我正在使用并运行openssl s|u client-connect tasker.adnxs.net:443-showcerts | grep“^”进行检查,但它似乎没有返回中间+链证书 下面是我如何设置它的: var fs = requ

我在Express中有一个SSL服务器,它不能在所有浏览器上运行(除非用户手动信任网站),因为有些浏览器需要链证书(我们有自己的中间证书)。我已将我们的中间证书和链证书放在一个.crt文件中。链+中间证书位于
INT\u CERT\u文件
变量中。它似乎不起作用。我正在使用并运行
openssl s|u client-connect tasker.adnxs.net:443-showcerts | grep“^”
进行检查,但它似乎没有返回中间+链证书

下面是我如何设置它的:

var fs = require("fs");
var https = require("https");
var express = require("express");

var KEY_FILE = fs.readFileSync("path/to/key/file.key");
var CERT_FILE = fs.readFileSync("path/to/crt/file.crt);
var INT_CERT_FILE = fs.readFileSync("path/to/intermediate and chain crt.crt");

var _app_https = express();
var _server_https = null;

_server_https = https.createServer({
    key: KEY_FILE,
    cert: CERT_FILE,
    ca: INT_CERT_FILE
}, _app_https).listen(443);
在Firefox上访问它时,Firefox无法识别它的身份,需要手动信任它。如何解决此问题


谢谢,

您的中间证书文件是否包含多个证书块

如果是这样的话,你应该把它们分成不同的文件,然后一个接一个地读。您可以将它们作为数组传递给
ca
参数

我已将其与以下代码配合使用:

var https=require('https'),
read=require('fs')。readFileSync,
httpsOptions={
key:read('ssl/mycertificate.key','utf8'),
证书:读('ssl/mycertificate.crt','utf8'),
ca:[
读取('ssl/rapidssl_1.pem','utf8'),
读取('ssl/rapidssl_2.pem','utf8')
]
};
https.createServer(httpsOptions,函数(req,res){
// ...
});

如果您实际上无法修改服务器上任何与SSL相关的文件,那么您可以自己拆分“SSL链”文件。在尝试使Node和socket.io与SSL一起工作时花了一点时间(在客户端上获取net::ERR_unsecure_RESPONSE error),因此Think将共享它:

var read=require('fs')。readFileSync;
var privateKey=read(我的密钥位置“utf8”);
var证书=读取(我的证书位置“utf8”);
var chainLines=read(我的链位置“utf8”).split(“\n”);
var-cert=[];
var ca=[];
chainLines.forEach(函数(行){
证书推送(线路);
if(行匹配(/-END-CERTIFICATE-/)){
ca.push(cert.join(“\n”);
证书=[];
}
});
变量凭据={
“钥匙”:私钥,
“证书”:证书,
“ca”:ca
};
var httpsServer=https.createServer(凭证、应用程序);

var io=require('socket.io').listen(httpsServer)我在readFileSync(…)之后使用的.toString()仍然不起作用。说找不到证书。先生,你节省了我很多时间。谢谢,这真的有效吗?nodejs文档说,
ca
选项用于授权连接,除非启用
requestCert
rejectUnauthorized
选项,否则它似乎什么都不做。我的问题与nginx有关,并为我解决了它。