如何在 node.js(无服务器框架)中的 .csr 文件中提取 SAN?

How can I extract the SAN's inside a .csr file in node.js (Serverless Framework)?

通过 node.js 使用无服务器框架,我需要读取通过 http POST 接收的 .csr 文件中的信息。使用 node-forge 模块和以下代码,我能够提取构成证书签名请求的不同信息:

const forge = require('node-forge');
...
var csr = forge.pki.certificationRequestFromPem(cert);
console.log(csr.subject.attributes)

if(csr.subject.getField('CN'))
  var CN = csr.subject.getField('CN').value

if(csr.subject.getField('SAN'))
  var SAN = csr.subject.getField('SAN').value

 if(csr.subject.getField('O'))
  var O = csr.subject.getField('O').value

if(csr.subject.getField('OU'))
  var OU = csr.subject.getField('OU').value

if(csr.subject.getField('C'))
  var C = csr.subject.getField('C').value

if(csr.subject.getField('ST'))
  var S = csr.subject.getField('ST').value

if(csr.subject.getField('L'))
  var L = csr.subject.getField('L').value

if(csr.subject.getField('E'))
  var E = csr.subject.getField('E').value

我现在需要的是还提取 CSR 的 SAN(如果存在),问题是在检查 x509.js 文件后(Javascript X.509 和相关组件的实现(如 Public Key Infrastructure" 的认证签名请求),我认为没有办法提取 SAN 的:

// short name OID mappings
var _shortNames = {};
_shortNames['CN'] = oids['commonName'];
_shortNames['commonName'] = 'CN';
_shortNames['C'] = oids['countryName'];
_shortNames['countryName'] = 'C';
_shortNames['L'] = oids['localityName'];
_shortNames['localityName'] = 'L';
_shortNames['ST'] = oids['stateOrProvinceName'];
_shortNames['stateOrProvinceName'] = 'ST';
_shortNames['O'] = oids['organizationName'];
_shortNames['organizationName'] = 'O';
_shortNames['OU'] = oids['organizationalUnitName'];
_shortNames['organizationalUnitName'] = 'OU';
_shortNames['E'] = oids['emailAddress'];
_shortNames['emailAddress'] = 'E';

我使用的是已弃用的模块还是旧版本?有没有办法让我实现这一点,而我只是在 node-forge 中使用了不正确的东西?

请告诉我是否有人遇到类似问题或能够解决此问题。问候

因此,我能够使用以下代码解决此问题:

var csr = forge.pki.certificationRequestFromPem(cert);
var altNames = csr.attributes.find(t=>t.name === 'extensionRequest').extensions.find(t=>t.name === 'subjectAltName').altNames;

我用 SAN 创建了一个虚拟证书,显然 node-forge 提取了该信息并将它们放在 extensionRequest -> subjectAltNames 中。我对这些进行了硬编码,因为我假设这些属性名称不会改变,但我不能 100% 确定。

希望这对可能遇到过此问题的人有所帮助。谢谢。