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
Javascript 如何在Node.js web应用程序中访问原始(或完整)X509证书_Javascript_Node.js_Ssl_X509certificate_X509 - Fatal编程技术网

Javascript 如何在Node.js web应用程序中访问原始(或完整)X509证书

Javascript 如何在Node.js web应用程序中访问原始(或完整)X509证书,javascript,node.js,ssl,x509certificate,x509,Javascript,Node.js,Ssl,X509certificate,X509,给定一个简单的Node.js应用程序: var https = require('https'); var fs = require('fs'); var options = { key: fs.readFileSync('mykey.pem'), cert: fs.readFileSync('mycert.pem') }; https.createServer(options, function (req, res) { console.log(req.connection.g

给定一个简单的Node.js应用程序:

var https = require('https');
var fs = require('fs');

var options = {
  key: fs.readFileSync('mykey.pem'),
  cert: fs.readFileSync('mycert.pem')
};

https.createServer(options, function (req, res) {
  console.log(req.connection.getPeerCertificate());
  res.writeHead(200);
  res.end("hello world\n");
}).listen(8000);
结果以证书的表示形式输出到控制台,而不是原始(PEM)格式


是否有其他方法可用于访问原始证书?

getPeerCertificate返回的证书对象有一个
raw
字段,其中包含证书的DER编码

您可以直接使用此DER编码:

  const cert_der = req.connection.getPeerCertificate().raw;
  console.log(cert_der);
一般来说,使用DER编码就足够了。但是,如果需要PEM编码,可以通过将base64编码应用于DER编码来构造它:

const os = require('os');

function der_to_pem(der) {
  const header = '-----BEGIN CERTIFICATE-----';
  const footer = '-----END CERTIFICATE-----';

  return [header, der.toString('base64'), footer].join(os.EOL);
}
然后,您可以使用此helper函数获取客户端证书的PEM编码:

  const cert_der = req.connection.getPeerCertificate().raw;
  console.log(der_to_pem(cert_der));