Я хочу подписать цифровой документ в формате 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 для меня подписать с закрытым ключом, не считывая секретный ключ из файла?