4

WCF を使用する必要がありますが、証明書があり、その認証を無効にする必要があります。Delphi XE2でこれを行う方法を知っている人はいますか?

私はすでに以下のコードを試しました:

最初の試み :

Rio.HTTPWebNode.InvokeOptions:= [soIgnoreInvalidCerts,soAutoCheckAccessPointViaUDDI];

Rio は THTTPRIO です。

2 回目の試行:

    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;
4

1 に答える 1

1

リクエストの後に次の行を追加します。

  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;
于 2015-07-10T06:41:43.230 に答える