键集不存在

时间:2014-08-20 09:25:08

标签: xml vb.net soap x509certificate2 signedxml

我有一个证书文件并分配给X509Certificate2类,

cert = New X509Certificate2("mycertificate.cer")

cert仅包含用于签署xml文件的公钥。

然后我这样做,

dim doc as New XmlDocument
doc.PreserveWhitespace = True
doc.Load("myxmlfile.xml")
signedXml = New SignedXml(doc)
signedXml.SigningKey = cert.publickey.key
dim reference as New Reference
reference.Uri = ""
dim trns as New XmlDsigC14NTransform
reference.AddTransform(trns)
signedXml.AddReference(reference)
keyInfo = New KeyInfo()
keyInfo.AddClause(New KeyInfoX509Data(cert))
signedXml.KeyInfo = keyInfo
signedXml.ComputeSignature()
xmlDigitalSignature = signedXml.GetXml()

在第signedXml.ComputeSignature()行有一些错误。

  

“键集不存在”。

我不知道这个案子。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

这可能已被涵盖 - 请在此处查看答案:

https://stackoverflow.com/a/6799315/2319909

显然你可能不会使用IIS,但权限可能仍然是个问题。

答案 1 :(得分:0)

要进行签名,您需要与证书对应的私钥。您只加载了证书,因此您收到了此例外。

从p12文件加载证书和私钥,或从Windows应用商店中选择证书。无论哪种方式都必须设置PrivateKey属性。