You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Node.js中解析X.509格式CSR获取Subject信息?

在Node.js中解析X.509 CSR并提取Subject信息

问题背景

我持有一份X.509格式的证书签名请求(CSR),格式如下:

-----BEGIN CERTIFICATE REQUEST-----
MII....
-----END CERTIFICATE REQUEST-----

需要从中提取Subject中的字段(包括CN、emailAddress、C等),但尝试两种方法均报错:

尝试1:Node.js原生crypto库

代码:

const { X509Certificate } = await import('crypto');
const x509CSR = new X509Certificate(pem)

报错:

error:0909006C:PEM routines:get_name:no start line

尝试2:node-forge库

代码:

const { pki } = await require('node-forge');
x509CSR = pki.certificationRequestFromPem(pem);

报错:

Cannot read public key. OID is not RSA.


报错原因分析

  1. 原生crypto库限制:X509Certificate类仅用于解析X.509证书,不支持解析CSR(证书签名请求),因此传入CSR会触发格式错误。
  2. node-forge版本问题:旧版node-forge对非RSA公钥(如ECDSA)的CSR支持不完善,若你的CSR使用了非RSA算法,就会出现该报错。

解决方案

方案1:使用@peculiar/x509库(推荐,支持全算法)

该库专为X.509体系设计,支持所有主流公钥算法,解析CSR更可靠:

  1. 安装依赖:
npm install @peculiar/x509
  1. 解析CSR并提取Subject字段:
const { X509CertificateRequest } = require('@peculiar/x509');

async function extractCSRSubject(pem) {
  const csr = await X509CertificateRequest.fromPem(pem);
  const subject = csr.subject;

  // 提取指定字段
  return {
    commonName: subject.get('commonName'),
    country: subject.get('countryName'),
    emailAddress: subject.get('emailAddress'),
    // 如需全量Subject,可直接转字符串
    fullSubject: subject.toString()
  };
}

// 调用示例
const csrPem = `-----BEGIN CERTIFICATE REQUEST-----
MII....
-----END CERTIFICATE REQUEST-----`;

extractCSRSubject(csrPem).then(result => console.log(result));

方案2:更新node-forge至最新版本

若偏好使用node-forge,先更新到修复了非RSA公钥支持的最新版:

  1. 更新依赖:
npm update node-forge
  1. 重新解析CSR:
const { pki } = require('node-forge');

function extractCSRSubjectWithForge(pem) {
  const csr = pki.certificationRequestFromPem(pem);
  const subjectData = {};

  // 遍历所有Subject属性
  csr.subject.attributes.forEach(attr => {
    subjectData[attr.name] = attr.value;
  });

  return subjectData;
}

// 调用示例
extractCSRSubjectWithForge(csrPem);

内容的提问来源于stack exchange,提问作者Xavier Ottolini

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 01:10:18