Как подписать XML-документ с помощью закрытого ключа смарт-карты с помощью nodejs - PullRequest
0 голосов
/ 21 мая 2019

Я хочу подписать цифровой документ в формате XML.Проблема в том, что я не могу сделать это на стороне сервера, так как сертификат читается с устройства чтения смарт-карт.Когда смарт-карта вставлена, мы также можем получить доступ к сертификатам через хранилище сертификатов Windows.Я думал об использовании пакетов nodejs win-ca для доступа к сертификатам и xml-crypto для подписи моего XML-документа с правильным синтаксисом .

Я могу получить доступ к сертификатам пользователя с помощью следующего кода:

const ca = require('win-ca')
certsPem = []

ca({
  format: ca.der2.pem,
  store: "MY",
  ondata: cert => certsPem.push(cert)
})

Но мне также нужен доступ к закрытому ключу.Если бы я мог экспортировать закрытый ключ в файл, все, что мне нужно было сделать, чтобы прочитать его и подписать xml, это:

var fs = require('fs')
var xml = fs.readFileSync("xmlFile.xml")
var key = fs.readFileSync("privateKey.key")

var SignedXml = require('xml-crypto').SignedXml
var sig = new SignedXml()
...
sig.signingKey = key
sig.computeSignature(xml)
...

Но невозможно экспортировать закрытый ключ со смарт-карты и сохранитьэто в файле, смарт-карта просто не позволяет это.Есть ли способ в nodejs для меня подписать с закрытым ключом, не считывая секретный ключ из файла?

...