如何使用X509证书以编程方式对开放式办公室XML Docx文档进行数字签名?

时间:2010-12-02 15:48:56

标签: digital-signature x509certificate

我想用Java或C#以X509证书以编程方式对开放式办公室XML Docx文档进行数字签名。

使用System.IO.Packaging中的PackageDigitalSignatureManager,此链接可以很好地与C#一起使用: http://blogs.infosupport.com/blogs/wouterv/archive/2007/02/24/Signing-Office-Open-XML-documents-using-the-Packaging-API.aspx

Altough这很好用,最后会提示用户对话框询问他是否有经过身份验证的数字签名的PIN码。

您是否知道如何以编程方式设置此PIN码?

干杯


感谢您的详细解答。 基本上,我使用的是电子身份证,它有签署数字文件的证书。

通常我将X509Certificate类型的公钥传递给PackageDigitalSignatureManager Sign()方法。

此方法将对文档进行签名,但会提示用户输入PIN,以便检索存储在智能卡中的私钥。

是否可以将PackageDigitalSignatureManager传递给包含PKCS12文件中的公钥/私钥对的对象,然后它不会提示用户输入PIN码。

干杯,

2 个答案:

答案 0 :(得分:0)

问题#2的答案取决于您使用的技术,更重要的是,存储证书的位置。

在Java密钥存储(JKS)中,证书受密码保护,并且这些密码以代码形式传递。

在Windows证书存储(.NET加密类使用的位置)证书使用PIN保护,大多数cryptoproviders的代码无法设置(有扩展命令来设置PIN,但大多数提供商不支持它)和用户需要手动确认对私钥的访问。

如果使用存储在PKCS12文件中的证书,则该文件的密码也会在代码中设置。

而且,如果您感兴趣的话,我们提供用于在.NET中签署Office文档的组件(check here)。与大多数示例代码不同,它们得到维护和支持。

答案 1 :(得分:0)

MSDN中的答案涵盖了它。 需要3个步骤