如何使用 NodeJS 从 PEM 文件中提取主题
How to extract Subject from PEM file using NodeJS
我正在尝试使用 NodeJS 从 PEM 格式中提取证书的主题名称,标准格式应该类似于
"C=US, ST=California, L=San Francisco, O=Wikimedia Foundation, Inc., CN=*.wikipedia.org"
我可以使用 x509 软件包 (https://www.npmjs.com/package/x509) 提取主题名称,然后使用命令
var subject = x509.getSubject(pem_cert);
然而,这样格式化它
{ commonName: '*.wikipedia.org',
serialNumber: 'some_number',
countryName: 'US'
}
我需要格式与标准格式相同,是否有 NodeJS 包或命令具有特定输出?
您可以使用node-forge
获取所需格式的证书主题
const pki = require('node-forge').pki;
const certPem = `
-----BEGIN CERTIFICATE-----
your certificate here
-----END CERTIFICATE-----
`;
const cert = pki.certificateFromPem(certPem);
const subject = cert.subject.attributes
.map(attr => [attr.shortName, attr.value].join('='))
.join(', ');
console.log(subject); // "C=US, ST=California, ..."
如果 openssl 命令行实用程序在 OS 上可用,其中 Node.js 是 运行,您也可以调用它来获取主题字符串:
const { spawn } = require('child_process');
const certPem = `
-----BEGIN CERTIFICATE-----
your certificate here
-----END CERTIFICATE-----
`;
const child = spawn('openssl', ['x509', '-subject', '-noout']);
child.stdin.write(certPem);
let data = '';
child.stdout.setEncoding('utf-8');
child.stdout.on('data', (chunk) => {
data += chunk
});
child.on('close', () => {
const subject = data.replace(/^subject=/, '');
console.log(subject);
});
child.stdin.end();
从 nodejs 15.6 开始,你最好使用标准的 crypto
模块:
https://nodejs.org/api/crypto.html#x509subject
const crypto = require("crypto")
const cert = new crypto.X509Certificate(fs.readFileSync('my.crt')))
console.log(cert.subject)
// Gives 'C=ES\nO=The Cert Corp\nCN=example.com'
我正在尝试使用 NodeJS 从 PEM 格式中提取证书的主题名称,标准格式应该类似于 "C=US, ST=California, L=San Francisco, O=Wikimedia Foundation, Inc., CN=*.wikipedia.org"
我可以使用 x509 软件包 (https://www.npmjs.com/package/x509) 提取主题名称,然后使用命令
var subject = x509.getSubject(pem_cert);
然而,这样格式化它
{ commonName: '*.wikipedia.org',
serialNumber: 'some_number',
countryName: 'US'
}
我需要格式与标准格式相同,是否有 NodeJS 包或命令具有特定输出?
您可以使用node-forge
获取所需格式的证书主题const pki = require('node-forge').pki;
const certPem = `
-----BEGIN CERTIFICATE-----
your certificate here
-----END CERTIFICATE-----
`;
const cert = pki.certificateFromPem(certPem);
const subject = cert.subject.attributes
.map(attr => [attr.shortName, attr.value].join('='))
.join(', ');
console.log(subject); // "C=US, ST=California, ..."
如果 openssl 命令行实用程序在 OS 上可用,其中 Node.js 是 运行,您也可以调用它来获取主题字符串:
const { spawn } = require('child_process');
const certPem = `
-----BEGIN CERTIFICATE-----
your certificate here
-----END CERTIFICATE-----
`;
const child = spawn('openssl', ['x509', '-subject', '-noout']);
child.stdin.write(certPem);
let data = '';
child.stdout.setEncoding('utf-8');
child.stdout.on('data', (chunk) => {
data += chunk
});
child.on('close', () => {
const subject = data.replace(/^subject=/, '');
console.log(subject);
});
child.stdin.end();
从 nodejs 15.6 开始,你最好使用标准的 crypto
模块:
https://nodejs.org/api/crypto.html#x509subject
const crypto = require("crypto")
const cert = new crypto.X509Certificate(fs.readFileSync('my.crt')))
console.log(cert.subject)
// Gives 'C=ES\nO=The Cert Corp\nCN=example.com'