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

How do I access the raw (or full) X509 Certificate in a Node.js web app

本文关键字:证书 X509 原始 访问 Node js web 应用程序      更新时间:2023-09-26

给定一个简单的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编码,可以通过对DER编码应用base64编码来构造它:

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

您可以使用这个辅助函数来获取客户端证书的PEM编码:

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