Synchronous enumeration
This commit is contained in:
Родитель
7d46d9d9c1
Коммит
ce5876f7f7
|
@ -0,0 +1,32 @@
|
|||
//
|
||||
// Enumerate system root CAs synchronously
|
||||
//
|
||||
var forge = require('node-forge')
|
||||
var crypt = require('./crypt32')
|
||||
|
||||
var asn1 = forge.asn1
|
||||
var pki = forge.pki
|
||||
|
||||
module.exports = me
|
||||
me.pki = pki
|
||||
|
||||
function me(cb)
|
||||
{
|
||||
var store = crypt.CertOpenSystemStoreA(null, 'ROOT')
|
||||
try {
|
||||
var ctx = null
|
||||
while(1)
|
||||
{
|
||||
ctx = crypt.CertEnumCertificatesInStore(store, ctx)
|
||||
if(ctx.isNull())
|
||||
break
|
||||
var res = ctx.deref()
|
||||
res = res.pbCertEncoded.reinterpret(res.cbCertEncoded)
|
||||
res = asn1.fromDer(res.toString('binary'))
|
||||
res = pki.certificateFromAsn1(res)
|
||||
cb(res)
|
||||
}
|
||||
} finally {
|
||||
crypt.CertCloseStore(store, 0)
|
||||
}
|
||||
}
|
14
lib/index.js
14
lib/index.js
|
@ -1,23 +1,19 @@
|
|||
var https = require('https')
|
||||
var x = require('./enum')
|
||||
|
||||
setTimeout(run, 1000)
|
||||
var x = require('./enumsync')
|
||||
|
||||
https.get('https://ya.ru')
|
||||
|
||||
var ca = https.globalAgent.options
|
||||
ca = ca.ca || (ca.ca = [])
|
||||
|
||||
x()
|
||||
.on('crt', function(crt)
|
||||
console.time('cas')
|
||||
x(function(crt)
|
||||
{
|
||||
ca.push(x.pki.certificateToPem(crt))
|
||||
})
|
||||
console.timeEnd('cas')
|
||||
|
||||
function run()
|
||||
{
|
||||
https.get('https://ekb.ru', got)
|
||||
}
|
||||
https.get('https://ekb.ru', got)
|
||||
|
||||
function got(resp)
|
||||
{
|
||||
|
|
Загрузка…
Ссылка в новой задаче