是否有人使用 Indy (10.XX) 组件通过具有 NTLM 身份验证的 Squid 代理服务器设置成功连接到https位置?
我可以成功连接到 http 位置,但是使用 https Indy 返回 EAbort 错误。
此外,如果我使用 FreeProxy 作为代理服务器(使用 NTLM 身份验证),我也可以很好地访问 http/https。但是 Squid NTLM + https 不起作用?有人让这个工作吗?
谢谢雷尔
我在这里
1 - 首先,确保您已经更新了 indy 的源代码。
2 - 从这里下载 SSL dll Indy SLL DLLS并将它们放入您的应用程序输出中
3 - 确保您已TIdSSLIOHandlerSocketOpenSSL
连接到TidHttp
IOHandler
配置了以下属性的属性:
SSLOptions.Method := sslvSSLv23;
SSLOptions.Mode := sslmUnassigned;
OnVerifyPeer := SSLIOHandlerVerifyPeer;
SSLOptions.VerifyMode := [sslvrfPeer];
SSLOptions.VerifyDepth := 2;
4 - 写这个事件:
function SSLIOHandlerVerifyPeer(Certificate: TIdX509; AOk: Boolean; ADepth, AError: Integer): Boolean;
begin
Result := True;
end;
5 - 将这些单位包括在您的使用条款中:
IdAuthentication, IdAuthenticationDigest, IdAuthenticationNTLM
6 - 将TidHttp.OnProxyAuthorization
事件设置为:
procedure IdHTTPProxyAuthorization(Sender: TObject; Authentication: TIdAuthentication; var Handled: Boolean);
begin
Handled := False;
end;
7 - 设置这些属性:
IndyHttpClient.HTTPOptions := IndyHttpClient.HTTPOptions + [hoKeepOrigProtocol] + [hoInProcessAuth];
IndyHttpClient.ProtocolVersion := pv1_1;
IndyHttpClient.ProxyParams.ProxyServer := 'you proxy address here'
IndyHttpClient.ProxyParams.ProxyPort := 8080;
IndyHttpClient.ProxyParams.ProxyUsername := 'your proxy username here';
IndyHttpClient.ProxyParams.ProxyPassword := 'your proxy psw here';
现在你可以走了。此代码也适用于 Microsoft ISA Server。如果您愿意,我可以将我的组件的完整源代码发送给您。我不会在这里发布它,因为它是用葡萄牙语写的(除非有人说可以发布)。