我正在尝试使用存储在 HSM 中的证书来实现 XML 签名的一些演示。
我从这个链接中找到了一些有趣的例子: Sign XML Document with X509Certificate2并将其修改为在 HSM 中使用证书和密钥和 PKCS11Interop 包装器。
但是任何人都可以给我一个建议或示例,将 ObjectHandle privateKey 从 HSM 转换为 SignedXML.SigningKey
private static void SignXmlWithCertificate(XmlDocument xmlDoc, X509Certificate2 cert, Session session, String alias)
{
SignedXml signedXml = new SignedXml(xmlDoc);
List<ObjectAttribute> template = new List<ObjectAttribute>();
template.Add(new ObjectAttribute(CKA.CKA_CLASS, CKO.CKO_PRIVATE_KEY));
template.Add(new ObjectAttribute(CKA.CKA_KEY_TYPE, CKK.CKK_RSA));
template.Add(new ObjectAttribute(CKA.CKA_LABEL, alias));
List<ObjectHandle> foundObjects = session.FindAllObjects(template);
ObjectHandle privateKey = foundObjects[0];
signedXml.SigningKey = privateKey; //Here is where I stuck.
Run Code Online (Sandbox Code Playgroud)
在上述外部链接的示例中。他们使用结合了私钥的证书。然后他们就可以这样使用了。
signedXml.SigningKey = cert.PrivateKey;
Run Code Online (Sandbox Code Playgroud)
但是我使用的证书里面没有私钥的内容。请给我一些建议。