javascript - 如何在 Node.js Web 应用程序中访问原始(或完整)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.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);
}
然后,您可以使用此辅助函数来获取客户端证书的 PEM 编码:
  const cert_der = req.connection.getPeerCertificate().raw;
  console.log(der_to_pem(cert_der));

关于javascript - 如何在 Node.js Web 应用程序中访问原始(或完整)X509 证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24791300/

相关文章:

node.js - NodeJS 中的 AWS RDS SSL 连接错误

javascript - 即使为 false 也执行 if 语句

javascript - 在 Javascript 中声明空对象属性的简写,有吗?

c++ - 在 Electron 中调用 Node Native Addons (C++)

node.js - docker nginx 负载平衡不适用于 Azure

java - 在运行时定期更改 SSL 证书

ruby-on-rails - Ruby SSL 握手未收到服务器 Hello 返回 - 使用代理 Net::HTTP

javascript - SapUI5 includeScript 未在 fiori 启动板中加载 js 文件

javascript - 无法将 php 变量分配给脚本

JavaScript TV4 对象验证、Node JS