Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.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:访问客户端证书_Node.js_Ssl - Fatal编程技术网

Node.js:访问客户端证书

Node.js:访问客户端证书,node.js,ssl,Node.js,Ssl,我正在开发一个Node.js应用程序,我们称之为“服务器a”,用户必须提供客户端证书才能访问服务 简化示例: /** server setup **/ var serverOptions = { key: fs.readFileSync('certs/server.key'), cert: fs.readFileSync('certs/server.crt'), ca: [fs.readFileSync('certs/ca.crt'), fs.readFileSync('

我正在开发一个Node.js应用程序,我们称之为“服务器a”,用户必须提供客户端证书才能访问服务

简化示例:

/** server setup **/
var serverOptions = {
    key: fs.readFileSync('certs/server.key'),
    cert: fs.readFileSync('certs/server.crt'),
    ca: [fs.readFileSync('certs/ca.crt'), fs.readFileSync('certs/bar.cer'), fs.readFileSync('certs/foo.cer')],
    requestCert: true
};

https.createServer(serverOptions, app).listen(SERVER_PORT, '', null, function () {
    var host = this.address().address;
    var port = this.address().port;

    console.log('listening at http://%s:%s', host, port);
});
一切正常,下面的代码打印客户机证书的详细信息

app.get('/', function (req, res) {

    /*** Dump ***/
    res.contentType('application/json');
    res.send(util.inspect(req.socket.getPeerCertificate(true), {colors: true}));

});
但是,我希望能够使用在serverA中获得的这个客户端证书,向另一个名为“ServerB”的服务器发出请求

问题是,我没有找到一种使用getPeerCertificate函数获取正确X509证书的方法,该函数返回证书的“自定义”对象表示形式。 如中所述,cert参数必须提供以下数据:

要使用的公共x509证书。默认为空


有没有办法获得正确格式的客户端证书呢?

我遇到了同样的问题,看到你的问题没有答案,所以我回来发布我的解决方案

证书对象有一个
raw
字段,其中包含您想要的字节形式的证书数据。要获得X509格式,只需将其转换为base64即可。因此,您要查找的代码是:

req.socket.getPeerCertificate(true).raw.toString('base64');

希望有帮助

这有帮助!谢谢你,侯赛因
req.socket.getPeerCertificate(true).raw.toString('base64');