C++ MITM代理,TLS 1.2证书验证失败
尝试为使用TLS 1.2协议并连接到多个IP地址的特定应用程序创建我自己的简单MITM代理,但由于应用程序日志“证书验证失败”中的错误而陷入困境。如何解决这个问题 应用程序使用以下代码检查证书:C++ MITM代理,TLS 1.2证书验证失败,c++,ssl,openssl,x509,C++,Ssl,Openssl,X509,尝试为使用TLS 1.2协议并连接到多个IP地址的特定应用程序创建我自己的简单MITM代理,但由于应用程序日志“证书验证失败”中的错误而陷入困境。如何解决这个问题 应用程序使用以下代码检查证书: X509* cert = SSL_get_peer_certificate( ssl ); X509_STORE_CTX * xCtx = X509_STORE_CTX_new(); X509_STORE_CTX_init( xCtx, (X509_STORE*)Store, cert, NULL );
X509* cert = SSL_get_peer_certificate( ssl );
X509_STORE_CTX * xCtx = X509_STORE_CTX_new();
X509_STORE_CTX_init( xCtx, (X509_STORE*)Store, cert, NULL );
int res = X509_verify_cert( xCtx );
if( !res ) { /*Certificate verify failed*/ };
我采取了以下步骤来实现结果:
openssl s_client -connect localhost:443
请允许我编写一些消息,然后在代理服务器中使用SSL_Read()成功接收它。但是,也存在一些错误:
verify error:num=20:unable to get local issuer certificate
verify return:1
verify error:num=21:unable to verify the first certificate
verify return:1
Verify return code: 21 (unable to verify the first certificate)
使用OpenSSL客户端直接连接到原始IP地址会产生相同的错误,但应用程序运行良好
此外,输出:
openssl verify -CAfile "signing-ca-1.crt" "cert.crt"
WARNING: can't open config file: /usr/local/ssl/openssl.cnf
e:\MyProg\SSL_serv\Debug\cert.crt: OK
看来我错过了一些重要的事情。您能告诉我如何使用cert解决此问题吗?拥有证书以及证书颁发机构的目的之一就是防止MITM。您正在尝试的应用程序执行正确的操作并检查证书。而且它不喜欢你的。其实很简单
是否有可能绕过它,在应用程序上运行MITM?绝对地这容易吗?可能不会。您需要做的是修补应用程序并删除此证书检查。谢谢您的回复。大量的“肮脏”方式(如修补)运行良好,包括修补X509\u verify\u cert(…)。如果你有兴趣,我想说最简单的方法是从应用程序内存中提取MS key和RAND,然后在路由器或中间PC上进一步解码。我希望有一种更干净的方法,不用阅读程序。看看Frida。一些钩子可以走很长的路。