如何使用 TIdHTTP 请求不安全的 SSL?

问题描述 投票:0回答:1

我需要使用

TIdHTTP
请求 SSL 连接上 IP 地址的 HTTPS URL,因此证书验证将失败(如果对等方甚至有证书)。

curl 有

-insecure
参数,它工作得很好,但我在
TIdHTTP
中找不到任何东西来完成同样的事情。

SSESocket := TIdHTTP.Create;
SSESocket.Request.Accept := 'text/event-stream';
SSESocket.Request.CacheControl := 'no-store';
SSESocket.Get('https://'+Host+'/eventstream/clip/v2', SSEventStream);

我错过了什么?

delphi indy10 idhttp
1个回答
0
投票

您可以显式地将

TIdSSLIOHandlerSocketOpenSSL
组件分配给
TIdHTTP.IOHandler
属性,然后可以将 IOHandler 的
SSLOptions.VerifyMode
属性设置为
[]
并将其
SSLOptions.VerifyDepth
属性设置为 0。

SSESocket := TIdHTTP.Create;

// add this ...
SSEIO := TIdSSLIOHandlerSocketOpenSSL.Create(SSESocket);
SSEIO.SSLOptions.SSLVersions := [sslvTLSv1,sslvTLSv1_1,sslvTLSv1_2];
SSEIO.SSLOptions.Mode := sslmClient;
SSEIO.SSLOptions.VerifyMode := [];
SSEIO.SSLOptions.VerifyDepth := 0;
SSESocket.IOHandler := SSEIO;
//

SSESocket.Request.Accept := 'text/event-stream';
SSESocket.Request.CacheControl := 'no-store';
SSESocket.Get('https://'+Host+'/eventstream/clip/v2',SSEventStream);

在您的示例中,

TIdHTTP
隐式地为您创建一个具有默认设置的内部
TIdSSLIOHandlerSocketOpenSSL

您还可以选择为

TIdSSLIOHandlerSocketOpenSSL.OnVerifyPeer
事件分配一个处理程序,并让它返回
True
以接受服务器的证书,无论 OpenSSL 通常是否会拒绝它。

© www.soinside.com 2019 - 2024. All rights reserved.