2012-03-01 55 views
1

我有一个收集数据的Java应用程序,将它写入XML文件并通过邮件发送此XML文件。此应用程序运行在许多不同的计算机上(不在我的范围内)。然后还有另一个应用程序将接收到的XML文件并将数据插入到数据库中(该应用程序在我自己的服务器上运行)。到现在为止,我不得不相信,数据没有改变,XML文件真的来自可信来源。Java中的自签名证书 - 签名XML文件

现在我想使用Java-Keystore对XML进行签名。什么到目前为止工作如下:

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

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

回答

1

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

+0

是的,这也是我的想法。我的问题更多的是我不知道,我只能接受自己发布的证书,因为在Sun的代码示例中,证书的颁发者未被检查。另请参阅Sun的以下引用,它完全描述了我的问题:“需要注意的是,XML签名标准并未定义接收方如何在验证签名所需的密钥中建立信任关系.KeyInfo元素仅仅是一个集合的信息,收件人可以用来帮助查找并随后建立对该密钥的信任。“ – user1225775 2012-03-01 17:15:18