1

是否有人使用 Indy (10.XX) 组件通过具有 NTLM 身份验证的 Squid 代理服务器设置成功连接到https位置?

我可以成功连接到 http 位置,但是使用 https Indy 返回 EAbort 错误。

此外,如果我使用 FreeProxy 作为代理服务器(使用 NTLM 身份验证),我也可以很好地访问 http/https。但是 Squid NTLM + https 不起作用?有人让这个工作吗?

谢谢雷尔

4

1 回答 1

1

我在这里

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。如果您愿意,我可以将我的组件的完整源代码发送给您。我不会在这里发布它,因为它是用葡萄牙语写的(除非有人说可以发布)。

于 2011-03-17T13:04:34.280 回答