【问题标题】:Verify XML file signature using OpenSSL使用 OpenSSL 验证 XML 文件签名
【发布时间】:2020-01-13 06:00:12
【问题描述】:

我有一个签名的 XML 文档和用于签名的证书的公钥。我想仅使用 CLI 中的 OpenSSL 来验证 XML 文件的签名。我尝试了命令:

openssl rsautl -verify -in signed.xml -inkey public_key.pem -pubin

但它输出错误:

RSA operation error
139662304335680:error:0406706C:rsa routines:rsa_ossl_public_decrypt:data greater than mod len:crypto/rsa/rsa_ossl.c:609:

该错误可能与 rsautl 的问题有关,因为手册告诉我们它只能处理小数据。 我尝试的另一个命令:

openssl dgst -verify public_key.pem -signature signed.xml to_sign.xml

但是这个需要一个文件(可能是二进制文件)作为参数,这可能是用于分离的签名(我的签名是envelope)。签名通过其他方式检查有效。我能知道我的命令中有什么错误吗?如果我可以通过openssl 做到这一点。谢谢!

【问题讨论】:

    标签: openssl cryptography certificate digital-signature public-key-encryption


    【解决方案1】:

    XML digsig 实际上是一个完整的协议,它定义了容器格式以及生成该容器格式并验证其正确性的正确方法(尽管在这方面严重缺乏,我自己创建了一个验证应用程序)。

    所以 XML digsig 在内部使用 RSA 算法/验证。但是,它与仅签署/验证文件是一回事。 RSA 可能在内部使用,但只对 XML 的特定部分进行签名,添加有关签名的附加信息,并且签名绝对不会放在 XML 文件的末尾,因为结果显然不再是有效的 XML (因为它应该以关闭第一个/最上面的标签结束)。

    所以不,您不能使用openssl 命令行来验证使用此协议的签名 XML 文件,因为它未实现。您可以使用openssl 作为工具自己实现它(尽管使用 OpenSSL API 会更有意义),但您最好寻找一个实现XML digsig standard 的替代库。该库可以为底层算法使用 OpenSSL 或任何其他低级加密库。

    【讨论】:

    • This lib 似乎使用 OpenSSL。不幸的是,这不是唯一的依赖项,我没有使用它,主要是因为我认为混合 C(或任何其他不限制内存访问的语言)和 XML 是一个非常糟糕的主意。 C 中 ASN.1 编码/解码中的溢出次数等已经够糟糕了,我什至不想知道这对 XML 有什么影响。
    猜你喜欢
    • 2011-01-24
    • 1970-01-01
    • 1970-01-01
    • 2020-06-11
    • 2017-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-15
    相关资源
    最近更新 更多