2010-05-27 37 views
1

是否有人通過使用Indy(10.XX)組件通過使用NTLM身份驗證的Squid代理服務器設置成功連接到https://download.dot使用帶Indy組件的NTLM身份驗證連接到Squid服務器

我可以成功連接到http位置,但是使用https Indy會返回EAbort錯誤。

此外,如果我使用FreeProxy作爲代理服務器(使用NTLM身份驗證),則可以同樣訪問http/https。但是Squid NTLM + https不起作用?有人得到這個工作?

感謝 雷爾

+0

我們在Indy論壇上討論了這個討論。您正在獲得EAbort,因爲Squid服務器並不總是向Indy的HTTP請求發送身份驗證質詢。 – 2010-05-31 18:43:59

+0

我有一個工作得很好的代碼。我花了一段時間才明白爲什麼Indy不能處理對Squid的請求。但是我現在沒有資源,明天我會回到這個帖子併發佈一個樣本。 – 2011-03-17 02:24:22

回答

1

我在這裏

1 - 首先,確保你已經更新Indy的來源。

2 - 從這裏Indy SLL DLLS下載SSL的dll,把他們在您的應用程序輸出

3 - 確保您有連接到TidHttpIOHandler屬性與後續的性能TIdSSLIOHandlerSocketOpenSSL配置:

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 - 包括這些單元T Ø您的使用條款:

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一起使用。如果你想要我,我可以發送給你我的組件的完整源代碼。我不會在這裏發佈它,因爲它是用葡萄牙語寫的(除非有人說它可以發佈)。

+0

你可以在這裏發佈代碼嗎?我需要使用Indy 10進行身份驗證(不需要SSL)。我堅持了兩天。 – CyprUS 2013-04-26 07:05:29