【问题标题】:Self-signed certificates in Java - Signing XML-filesJava 中的自签名证书 - 签署 XML 文件
【发布时间】:2012-03-01 16:34:00
【问题描述】:

我有一个 Java 应用程序,它收集数据,将其写入 XML 文件并通过邮件发送此 XML 文件。此应用程序在许多不同的计算机上运行(不在我的范围内)。然后有另一个应用程序接收接收到的 XML 文件并将数据插入数据库(这个应用程序在我自己的服务器上运行)。到现在为止,我必须相信,数据没有被更改,并且 XML 文件确实来自受信任的来源。

现在我想到了使用 Java-Keystore 对 XML 进行签名。到目前为止有效的是:

  • 我可以使用 keytool 创建密钥对。
  • 然后我使用创建的私钥使用 Java 的 XML 数字签名 API (http://java.sun.com/developer/technicalArticles/xml/dig_signature_api/) 对 XML 文件进行签名。
  • 我还能够验证签名文件。

我现在的问题是,如何确保数据确实来自受信任的系统。我的意思是,到目前为止,我所做的只是确保数据在签名和验证之间没有被修改。我想要的是为每个向我发送数据的系统颁发证书,并且只信任我自己颁发的证书。但这怎么能做到呢?

【问题讨论】:

    标签: java xml signature


    【解决方案1】:

    您需要成为客户的 CA(证书颁发机构)。每个客户都需要提供他们自己的客户证书请求以由您签名,然后他们在发送之前使用它来签署每个文档。这是经典的 PKI 管理问题,它催生了可以更优雅地解决此问题的产品,但您必须为此付费。

    【讨论】:

    • 是的,这也是我认为它会起作用的方式。我的问题更多的是我不知道,我怎么能只接受自己颁发的证书,因为在 Sun 的代码示例中,证书的颁发者没有被检查。另请参阅 Sun 的以下引用,它准确描述了我的问题:“重要的是要注意 XML 签名标准没有定义接收者如何建立对验证签名所需的密钥的信任。KeyInfo 元素只是一个集合接收者可以用来帮助查找并随后建立对该密钥的信任的信息。”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-17
    • 1970-01-01
    • 1970-01-01
    • 2014-05-15
    • 2023-03-28
    • 2014-09-02
    • 1970-01-01
    相关资源
    最近更新 更多