使用 OpenSSL 验证 XML 文件签名
Verify XML file signature using OpenSSL
我有一个签名的 XML 文档和用于签名的证书的 public 密钥。我想仅使用来自 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
但是这个还需要一个文件(假设是二进制)作为参数,这可能是为了分离签名(我的签名是 enveloped)。签名通过其他方式校验有效。我能知道我的命令有什么错误吗?如果我能通过 openssl
做到这一点。谢谢!
XML digsig 实际上是一个完整的协议,它定义了容器格式以及生成该容器格式和验证其正确性的正确方法(尽管在这方面严重缺乏,我自己创建了一个验证应用程序).
所以XML digsig 在内部使用 RSA算法/验证。但是,与仅签署/验证文件不同。内部可能使用RSA,但只对XML的特定部分进行签名,添加了关于签名的额外信息,并且签名肯定不会放在XML文件的末尾,因为结果显然不再有效 XML(因为它应该以关闭 first/topmost 标记结束)。
所以不,您不能使用 openssl
命令行来验证使用此协议的签名 XML 文件,因为它未实现。您可以使用 openssl
作为工具自己实现它(尽管使用 OpenSSL API 会更有意义),但您最好寻找一个实现 XML digsig standard 的替代库。该库可以将 OpenSSL 或任何其他低级加密库用于底层算法。
我有一个签名的 XML 文档和用于签名的证书的 public 密钥。我想仅使用来自 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
但是这个还需要一个文件(假设是二进制)作为参数,这可能是为了分离签名(我的签名是 enveloped)。签名通过其他方式校验有效。我能知道我的命令有什么错误吗?如果我能通过 openssl
做到这一点。谢谢!
XML digsig 实际上是一个完整的协议,它定义了容器格式以及生成该容器格式和验证其正确性的正确方法(尽管在这方面严重缺乏,我自己创建了一个验证应用程序).
所以XML digsig 在内部使用 RSA算法/验证。但是,与仅签署/验证文件不同。内部可能使用RSA,但只对XML的特定部分进行签名,添加了关于签名的额外信息,并且签名肯定不会放在XML文件的末尾,因为结果显然不再有效 XML(因为它应该以关闭 first/topmost 标记结束)。
所以不,您不能使用 openssl
命令行来验证使用此协议的签名 XML 文件,因为它未实现。您可以使用 openssl
作为工具自己实现它(尽管使用 OpenSSL API 会更有意义),但您最好寻找一个实现 XML digsig standard 的替代库。该库可以将 OpenSSL 或任何其他低级加密库用于底层算法。