我想用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码。
干杯,
答案 0 :(得分:0)
问题#2的答案取决于您使用的技术,更重要的是,存储证书的位置。
在Java密钥存储(JKS)中,证书受密码保护,并且这些密码以代码形式传递。
在Windows证书存储(.NET加密类使用的位置)证书使用PIN保护,大多数cryptoproviders的代码无法设置(有扩展命令来设置PIN,但大多数提供商不支持它)和用户需要手动确认对私钥的访问。
如果使用存储在PKCS12文件中的证书,则该文件的密码也会在代码中设置。
而且,如果您感兴趣的话,我们提供用于在.NET中签署Office文档的组件(check here)。与大多数示例代码不同,它们得到维护和支持。
答案 1 :(得分:0)
MSDN中的答案涵盖了它。 需要3个步骤