【发布时间】:2014-10-07 09:04:51
【问题描述】:
我正在使用 Java 小程序在 Web 浏览器中签署 XML 文件。 除了签名 XML 中包含的 X509 密钥之外,我还应该保留哪些信息以确保不可否认性? 我见过小程序传输私钥(使用相同的私钥加密)或仅传输公钥。
【问题讨论】:
标签: x509certificate digital-signature
我正在使用 Java 小程序在 Web 浏览器中签署 XML 文件。 除了签名 XML 中包含的 X509 密钥之外,我还应该保留哪些信息以确保不可否认性? 我见过小程序传输私钥(使用相同的私钥加密)或仅传输公钥。
【问题讨论】:
标签: x509certificate digital-signature
在XMLDsig/XAdES签名中,不可否认性(数据完整性和来源的证明)由签名本身提供。
提供完整性是因为如果您更改签名的任何字节,您将破坏它(签名无法验证),并且数据的来源由 <xmldsig:keyInfo> 元素提供,它为您提供了验证所需的证书签名(但是此元素是可选的,因此如果它不存在,则假定应用程序上下文足以获取该证书),如果签名使用此证书验证,则您拥有签名作者的身份。此外,在 XAdES 标准中定义了 <xades:SigningCertificate> 属性,该属性是强制性的,并且它引用了必要的证书来验证签名。
希望这会有所帮助,
【讨论】:
您应该永远传输私钥,除非可能用于备份。保证私钥安全的最安全方法是在需要私钥的位置创建密钥对,然后使用证书请求传输公钥。
要验证和验证证书以及签名,您需要以下内容:
从用于签名的密钥对的证书开始的证书链,一直到某个受信任的证书。该链可以存在 1 个自签名证书,但通常更长。通常您信任一些根证书,拥有 1 或 2 个 CA 证书,以执行签名的叶证书结尾。
验证链中的任何证书是否未被吊销的某种方法。通常这是一个经常分发的 CRL 或 OCSP。
一个时钟。如果没有受信任的时钟,则无法验证证书是否已过期。
这些都是验证所必需的。对于签名,您不必保留任何东西。当然,您通常会保留您的私钥和证书。
【讨论】: