在支持https的Node.js中,我将证书作为.pem
文件。
现在我想从该文件中读取一些数据,以获取有关证书的信息,例如证书的到期日期和公用名。
正如我所看到的,既没有Node自己的tls module,也没有ursa这样的模块支持这个。
当然我可以将openssl
称为子进程并解析其输出流(我认为这个任务应该可以使用OpenSSL),但我更喜欢不依赖于外部程序可用性的解决方案在路上。
我怎么能这样做?
更新:同时,我找到pem module,其readCertificateInfo
成功提供了通用名称,即使使用Node.js 0.8.18(这与其相反)声明0.7+不受支持的文档。不幸的是,它没有返回到期日期。
更新2:在内部,pem只使用子进程调用openssl
命令。当然我可以自己做,因此我可以直接从openssl
检索所需的信息。无论如何,如果有人有更好的想法(在这种情况下意味着纯JavaScript / Node.js解决方案),我会很高兴: - )
答案 0 :(得分:4)
同时我找到答案:PEM格式基本上是使用Base64加密的ASN.1。
因此,您需要首先进行Base64解码,然后将结果解析为ASN.1。结果是证书的数据结构,其中包含适当的值。
就是这样: - )!
答案 1 :(得分:3)
如果您从tls.connect
之类的地方获取证书,则可以致电getPeerCertificate()
,然后您将获得一个看起来像这样的结构(连接到github.com):
{ subject:
{ C: 'US',
ST: 'California',
L: 'San Francisco',
O: 'GitHub, Inc.',
CN: '*.github.com' },
issuer:
{ C: 'US',
O: 'DigiCert Inc',
OU: 'www.digicert.com',
CN: 'DigiCert High Assurance CA-3' },
subjectaltname: 'DNS:*.github.com, DNS:github.com',
modulus: 'EF45CDFAEC13EF3E0CD38685530109CA9A3A4E5AF980CBC1BD51509C9944A8CDEB61EA951D4F3053C69FD6D355EDD13A3A43E96DD437C98813DA458E5C99F0811D7A0736EAB1DF0E3C600590A212DB3566D6E077A8A37951A653104F37BC46E38EDC101393990D6AB3101D8714DD78607B547B34A9F2E9E33B5F51B56AA76220BF9DE12A757D9424524A8DCD2D9B5C962FD8DFE8FD38BD80AC116061E7B3B7BF81AE8321C9EB7488F27D116603425FA755F4EC00ABF123BB5AABFBCA7C13AB288C0EC122F99424CA06A4D2A846D6D44618E5CF21B6B9D6D9518639506604A906600F1D6FA8A09B82AF7143645577A656B16D35EC7CAF48AD012E762D16E6D7C1',
exponent: '10001',
valid_from: 'Apr 30 00:00:00 2012 GMT',
valid_to: 'Jul 9 12:00:00 2014 GMT',
fingerprint: 'B1:4B:A1:6F:5C:EE:28:DA:C4:86:CD:D9:F2:80:8F:2E:A7:4A:51:F4',
ext_key_usage: [ '1.3.6.1.5.5.7.3.1', '1.3.6.1.5.5.7.3.2' ] }
我还没有找到解析任意本地证书的好方法,抱歉。