linux下使用openssl检测PE文件数字签名的证书是否有效

linux下使用openssl检测PE文件数字签名的证书是否有效,第1张

在 crypto/x509/x509_vfy.c 的 153 行找到 X509_verify_cert 函数(在线查看), 局部变量 ok 缓存每一步验证是否通过, 它依次调用了:

check_issued

check_chain_extensions

check_name_constraints

check_trust

check_revocation

internal_verify

check_policy

其中 internal_verify (在线查看)验证了证书的有效期, 进入这个函数, 在 1654 行找到这个代码:

ok = check_cert_time(ctx, xs)

if (!ok)

goto end

看看 check_cert_time 函数, 确认是检查 notBefore 和 notAfter, 因此将上面三行代码注释掉, 验证证书时就不会检测有效期了.

然后就是重新编译 openssl, 将 libcrypto.a 集成到项目里了~

签字是基于非对称算法加密文件特征码的一种特殊的算法。就是用非对称算法,加密文件经过不可逆算法计算出来的哈希值,也就是特征码。

这种特征码因为是不可逆算法,你没办法简单的修改了文件后还能保持相同的特征码(当然理论上是存在的,但因为算法复杂而且整个文件都在参与计算,需要保证相同特征码而且文件还起作用几乎不可能,除非有很强的计算机性能强行去猜)。特征码很小,可以作为一种文件正确性的标识符号。

非对称算法,就是加密和解密是两个不同的算法,或者不同的数据,有两个钥匙 A 和 B 。用 A 加密的,可以用 B 解密,相反,用 B 加密的,可以用 A 解密。而且 A、B 不能互相计算出来对方,只能同时生成(当然如果计算机足够多,性能足够强势可以算出来的,不过现在的技术是全球计算机一起跑,也需要几万年)。

作用,就是你计算文件哈希值后,再用你这边的密匙解密加密后的签字数据,获得对方提供的哈希值做比对,来确定你得到的文件是不是被修改了。

你的密匙和对方加密的密匙配套,而且哈希值一致。那么就可以认定这个文件内容签字,这个文件是对方提供的,中间没有经过他人的修改,也没有发生文件的损坏。

这种被修改或者损坏后,签字还能同样的概率太低了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8323764.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-15
下一篇 2023-04-15

发表评论

登录后才能评论

评论列表(0条)

保存