如何tidHTTP.get不安全的SSL?

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

我需要在与 IP 地址的 SSL 连接上使用 tidHTTP.Get,因此证书验证将失败(如果对等方甚至有证书)。 curl 具有“-insecure”参数,因此它工作得很好。但我在 idHTTP 上找不到任何东西来实现这一点。

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

我错过了什么?

delphi indy10 delphi-11-alexandria 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.