如何在 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% 确定。
希望这对可能遇到过此问题的人有所帮助。谢谢。
通过 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% 确定。
希望这对可能遇到过此问题的人有所帮助。谢谢。