Android - 验证XML的签名

时间:2011-04-24 06:53:20

标签: android xml

我已经在网上签署了XML文档(通过纯Java与RSA和X509标签)并且我已经实现了XML pull解析器 - 在我将XML文档中的一些信息解析为特定URL之前,我需要验证这个文档是否存在是正确的。你知道如何检查XML签名吗?

由于

编辑:

我的XML文件如下所示:

 <?xml version="1.0" encoding="UTF-8" standalone="no" ?> 
  <application id="1">
  <appversion>1.0</appversion> 
  <obligatory>yes</obligatory> 
  <update>http://www.xyz.....</update> 
  <check>http://www.xyz.....</check> 
  <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
    <ds:SignedInfo>
      <ds:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments" /> 
      <ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" /> 
      <ds:Reference URI="#1">
        <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /> 
        <ds:DigestValue>fuv...</ds:DigestValue> 
    </ds:Reference>
  </ds:SignedInfo>
  <ds:SignatureValue>PC0+4uO4...</ds:SignatureValue> 
  <ds:KeyInfo>
  <ds:KeyValue>
    <ds:RSAKeyValue>
      <ds:Modulus>gEs/Fn2Gd5evwhlUgoS3...</ds:Modulus> 
      <ds:Exponent>AQAB</ds:Exponent> 
    </ds:RSAKeyValue>
  </ds:KeyValue>
  <ds:X509Data>
    <ds:X509IssuerSerial>
      <ds:X509IssuerName>CN=abc abc,OU=abcs,O=abc,L=abc,ST=abc,C=abc</ds:X509IssuerName> 
      <ds:X509SerialNumber>123456...</ds:X509SerialNumber> 
    </ds:X509IssuerSerial>
    <ds:X509SubjectName>CN=abc abc,OU=abcs,O=abc,L=abc,ST=abc,C=abc</ds:X509SubjectName> 
    <ds:X509Certificate>MIIDhzCCAm+gAwIBAgI...</ds:X509Certificate> 
  </ds:X509Data>
  </ds:KeyInfo>
 </ds:Signature>

4 个答案:

答案 0 :(得分:3)

在J2EE Java中,您将使用javax.xml.crypto详细信息

http://java.sun.com/developer/technicalArticles/xml/dig_signature_api/

但是,这些不是标准Android软件包的一部分。

可能是一个可管理的工作量,可以自己创建所需源代码包。

http://google.com/codesearch/p?hl=en#-WpwJU0UKqQ/src/share/classes/javax/xml/crypto/dom/DOMCryptoContext.java&d=5

答案 1 :(得分:3)

您可以使用Apache Santuario,但需要将其删除。请查看https://web.archive.org/web/20140902223147/http://www.xinotes.net/notes/note/1302/了解更多详情。

答案 2 :(得分:2)

您可以使用XML安全功能添加以下剥离版的Apache Santuario:http://mvnrepository.com/artifact/org.apache.santuario/xmlsec/2.0.2

然后你只需要创建一些验证者类,例如:

@Entity
private static class Task{
    @Id
    private ObjectId id;
    private Date timestamp;
    private int task;
}

修改 似乎包括在Android中包含XML解析库比预期更棘手。首先,您需要生成jar文件,然后修改一些库名称空间(使用JarJar工具)。之后,将其添加到项目的库目录(/ lib或/ libs)中。 Source

我从签名XML切换到签名JSON(RFC 7515)

答案 3 :(得分:1)

也许你可以使用Apache Santuario。 http://santuario.apache.org/