4
我需要使用WCF,但它有一個證書,我需要禁用其身份驗證。 有誰知道我怎麼能在Delphi XE2中做到這一點?禁用證書驗證
我已經嘗試下面的代碼:
第一次嘗試:
Rio.HTTPWebNode.InvokeOptions:= [soIgnoreInvalidCerts,soAutoCheckAccessPointViaUDDI];
凡拓是THTTPRIO。
第二次嘗試:
class procedure ClasseTeste.OnBeforePost(const HTTPReqResp: THTTPReqResp;
Data: Pointer);
var
SecurityFlags: DWord;
SecurityFlagsLen: DWord;
Request: HINTERNET;
begin
Request := Data;
if soIgnoreInvalidCerts in Rio.HTTPWebNode.InvokeOptions then
begin
SecurityFlagsLen := SizeOf(SecurityFlags);
InternetQueryOption(Request, INTERNET_OPTION_SECURITY_FLAGS,
Pointer(@SecurityFlags), SecurityFlagsLen);
SecurityFlags := SecurityFlags or INTERNET_FLAG_IGNORE_CERT_CN_INVALID;
InternetSetOption(Request, INTERNET_OPTION_SECURITY_FLAGS,
Pointer(@SecurityFlags), SecurityFlagsLen);
end;
end;
rio.HTTPWebNode.OnBeforePost:= ClasseTeste.OnBeforePost;
我可以做到這一點使用C#,用下面的代碼:
channel = new ChannelFactory<WsMain.IWsInterface>("****");
channel.Credentials.UserName.UserName = "*****";
channel.Credentials.UserName.Password = "*****";
channel.Credentials.ServiceCertificate.Authentication.CertificateValidationMode = System.ServiceModel.Security.X509CertificateValidationMode.None;
不應該在服務器端禁用它嗎?我想知道是否有客戶能夠禁用認證是一種安全的行爲...... :) – 2013-04-05 19:24:32
我同意你的意見,但在這種情況下,服務不是我們的。我知道可以在C#中禁用,並且我想在Delphi中執行相同的行爲。 – 2013-04-05 20:22:52
我真的不知道這裏的問題:服務器上的證書是無效的(selfsigned等)還是服務器需要證書認證?我問這是因爲服務器可能有證書,但可能不需要證書認證 - 證書只能用於SSL任務。也請告訴我們你收到了什麼錯誤? – 2013-04-06 12:27:01