我有一个Java应用程序,该应用程序收集数据,将其写入XML文件,然后通过邮件发送此XML文件。此应用程序可在许多不同的计算机上运行(不在我的范围内)。然后是另一个应用程序,它接收收到的XML文件并将数据插入数据库中(该应用程序在我自己的服务器上运行)。到现在为止,我不得不相信,数据尚未更改,并且XML文件实际上来自受信任的来源。
现在,我想到了使用Java密钥库对XML进行签名的方法。到现在为止有效的方法如下:
我可以使用keytool创建一个密钥对。
然后,我使用创建的私钥通过Java的XML数字签名API(http://java.sun.com/developer/technicalArticles/xml/dig_signature_api/)对XML文件进行签名。
我也可以验证签名文件。
我现在的问题是,如何确保数据确实来自受信任的系统。我的意思是,到目前为止,我所做的只是确保在签名和验证之间没有修改数据。我想要的是为每个向我发送数据的系统颁发一个证书,并且仅信任我自己颁发的证书。但是如何做到这一点?
最佳答案
您需要成为客户的CA(证书颁发机构)。每个客户端都需要提供自己的客户端证书请求,以供您签名,然后在发送每个文档之前,他们会使用该签名来签名。这是经典的PKI管理问题,产生了许多产品,可以更优雅地解决此问题,但是您必须付费。
关于java - Java中的自签名证书-签名XML文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9520132/