curl:(35)schannel:下一个 InitializeSecurityContext 失败 - 撤销功能无法检查证书的撤销情况

curl:(35)schannel:下一个 InitializeSecurityContext 失败 - 撤销功能无法检查证书的撤销情况

总结使用自定义代理+证书组合时,如何修复“撤销功能无法检查证书是否撤销”?我可以以某种方式为整个系统禁用此检查吗?

我在一台 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 提供程序无法访问,则这是一种可以接受的折衷方案...

相关内容