node.js - 如何使用 NodeJS 从 PEM 文件中提取主题
问题描述
我正在尝试使用 NodeJS 从 PEM 格式中提取证书的主题名称,标准格式应类似于“C=US, ST=California, L=San Francisco, O=Wikimedia Foundation, Inc., CN=*.wikipedia.org"
我可以使用 x509-package ( 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, ..."
如果您在运行 Node.js 的操作系统上有可用的openssl命令行实用程序,您也可以调用它来获取主题字符串:
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();
推荐阅读
- react-native - 本机基础最新版本不适用于 EXPO 小吃
- php - 使用管理员 Firebase SDK 时,Google 服务帐户 JSON 错误中缺少字段
- rust - Rust 中的下划线:“考虑使用”
- sql - 如何在 ADF 中使用 SQL 表达式从另一个 ViewObject 获取值?
- java - JUnit 中这两个版本的代码有什么区别?
- php - 无法使用来自 HTML 中选择的数据和 PHP 来验证 RegEx 模式
- r - R ggplot自定义百分位数
- hibernate - 使用多对多关系实现类似功能
- java - 控制 JAX-RS 应用程序启动
- ios - 如何在具有动态大小的单元格的 UICollectionViewFlowLayout 子类上正确设置节插入