Javascript 如何在Node.js web应用程序中访问原始(或完整)X509证书
给定一个简单的Node.js应用程序: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
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));