我最近在linux系统中将openssl从1.0.2n更新到1.1.0g。
早些时候我正在使用
ASN1_INTEGER *c2i_ASN1_INTEGER(ASN1_INTEGER **a, const unsigned char **pp, long len)
功能。由于此功能在 openssl 1.1.0 中被删除,现在我将其替换为
ASN1_INTEGER *d2i_ASN1_UINTEGER(ASN1_INTEGER **a, const unsigned char **pp, long length)
.
现在,当我运行我的应用程序时,我收到警告
Warning:0:-- SSL Error queue report --
Warning:0: - asn1 encoding routines|d2i_ASN1_UINTEGER|expecting an integer:218718323
这个问题的解决办法是什么?
INTEGER 的 ASN.1 编码(如 BER 或 DER)由 1 个或多个“标识符”八位位组(通常为 1)组成,后跟 1 个或多个“长度”八位位组,最后是“内容”八位位组(其长度确定)由前面的“长度”八位字节组成)。
功能c2i_ASN1_INTEGER
假设您已经解析了“标识符”和“长度”八位字节并将“内容”字节转换为整数。这已从 OpenSSL 1.1.0 中删除,因为这被认为是应用程序不应直接调用的非常低级别的解析操作。
功能d2i_ASN1_UINTEGER
不是直接下降替代c2i_ASN1_INTEGER
。它解析整个整数(包括“标识符”和“长度”八位字节)。如果您只传递内容八位字节,那么它将把第一个字节解释为“标识符”八位字节。这可能会产生错误的整数值,因此这可能就是您看到“期望整数”错误的原因。
您将需要重写代码以将整个整数传递给d2i_ASN1_UINTEGER
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)