我需要使用 WCF,但它有一个证书,我需要禁用它的身份验证。
有谁知道我如何在 Delphi XE2 中做到这一点?
我已经尝试过以下代码:
第一次尝试 :Rio.HTTPWebNode.InvokeOptions:= [soIgnoreInvalidCerts,soAutoCheckAccessPointViaUDDI];
Rio 是 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;
最佳答案
在您的请求后添加以下行:
SecurityFlags := SecurityFlags or SECURITY_FLAG_IGNORE_REVOCATION;
InternetSetOption(Request, INTERNET_OPTION_SECURITY_FLAGS, Pointer(@SecurityFlags), SecurityFlagsLen);
哪个会做:
procedure TForm1.RIO_OnBeforePost(const HTTPReqResp: THTTPReqResp; Data: Pointer);
var
SecurityFlags: DWord;
SecurityFlagsLen: DWord;
Request: HINTERNET;
begin
Request := Data;
SecurityFlagsLen := SizeOf(SecurityFlags);
InternetQueryOption(Request, INTERNET_OPTION_SECURITY_FLAGS, Pointer(@SecurityFlags), SecurityFlagsLen);
SecurityFlags := SecurityFlags or SECURITY_FLAG_IGNORE_UNKNOWN_CA;
InternetSetOption(Request, INTERNET_OPTION_SECURITY_FLAGS, Pointer(@SecurityFlags), SecurityFlagsLen);
// It solved my problem
SecurityFlags := SecurityFlags or SECURITY_FLAG_IGNORE_REVOCATION;
InternetSetOption(Request, INTERNET_OPTION_SECURITY_FLAGS, Pointer(@SecurityFlags), SecurityFlagsLen);
end;
关于web-services - 禁用证书验证,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15839674/