总结使用自定义代理+证书组合时,如何修复“撤销功能无法检查证书是否撤销”?我可以以某种方式为整个系统禁用此检查吗?
我在一台 Windows 11 机器上,尝试使用系统代理,并强制使用系统上的非标准工具(如cURL
或)的代理wget
。目前,我可以通过 Web 浏览器和 powershell 看到代理用于正常操作。但是,如果我尝试从终端执行某些操作cmd
,我可以看到正在使用的代理,但连接失败:
Microsoft Windows [Version 10.0.22621.1992]
(c) Microsoft Corporation. All rights reserved.
C:\Users\me> curl https://my.cool.app.com/servicehealth
curl: (35) schannel: next InitializeSecurityContext failed:
Unknown error (0x80092012) -
The revocation function was unable to check revocation for the certificate.
C:\Users\me>echo %SSL_CERT_FILE%
C:\Users\me\Desktop\Fiddler_Root_Certificate_Authority.pem
C:\Users\me>echo %REQUESTS_CA_BUNDLE%
C:\Users\me\Desktop\Fiddler_Root_Certificate_Authority.pem
C:\Users\me>echo %https_proxy%
10.211.55.2:8866
从上面的输出可以看出,我正尝试通过另一台机器上的 Fiddler 代理路由所有流量。上面的测试只是为了演示问题,我知道我可以传递标志来curl
禁用撤销检查,但我无法对我的机器上可能curl
在其 SDK 中使用类似功能的所有应用程序执行此操作。
这是我控制的一台调试机器(VM)——我不太关心让它运行起来的安全隐患。
答案1
总结
对于 curl,使用命令行选项--ssl-revoke-best-effort
(参见https://curl.se/docs/manpage.html)或者在用户目录中的ssl-revoke-best-effort
文件中添加一行。.curlrc
解释:
问题肯定是缺失/错误/无法到达证书吊销列表服务器证书中的 URI。
使用 openssl 您可以检查服务器提供的证书链:
echo | openssl s_client -showcerts my.cool.app.com:443
-----BEGIN CERTIFICATE-----
现在将和之间的部分保存-----END CERTIFICATE-----
到单独的文件中,然后通过以下方式查看证书数据
openssl x509 -noout -text -in /path/to/certificate.crt
本节X509v3 CRL Distribution Points:
为您提供了用于评估证书吊销状态的地址:
X509v3 extensions:
X509v3 CRL Distribution Points:
Full Name:
URI:http://my.cool.app.com/path/to/some.crl
如果无法访问或者丢失,将导致“撤销功能无法检查证书的撤销”。
现在,不再使用--insecure
,而是至少会检查证书,省略撤销状态 - 如果证书不提供此信息,则这很好,如果 CRL 提供程序无法访问,则这是一种可以接受的折衷方案...