使用TRESTRequest时来自客户端的未指定证书

时间:2018-03-05 08:52:17

标签: rest delphi

当使用SSL URL调用我们的内部服务器之一时,TRESTClient和TRESTRequest会给出错误 首先来自Exception类ENetHTTPCertificateException,然后来自ERESTException,其中包含来自客户端的未指定证书'

我知道WinInet Api正在被使用,但是在Delphi Rest Library中没有本地方式来设置连接到忽略证书错误   - 我该如何编码呢?​​

这是否意味着服务器正在请求客户端证书?

function TdmoRestApi.GetSaLogin(var sErrorText: String): TLoginSvar;
var
  LoginRoot: TLoginRootClass;
begin
  Result := lsErrVilla;
  RESTRequestLogin.Params.ParameterByName('TOKEN').value := FLoginToken;
  RESTRequestLogin.Params.ParameterByName('X-CSRF-Token').value := 'Fetch';
  try
    RESTRequestLogin.Execute;  //This call fails
  except
    on e: Exception do begin
      sErrorText := e.ClassName + ' ' + e.message;
      if RESTResponseLogin.StatusCode = 0 then
        Exit(lsErrVilla);
    end;
  end;
  case RESTResponseLogin.StatusCode of
    200: begin 
       ....
    400: begin 
        ....
      end;
  else begin 
      ....
  end;
  FCsrfToken := RESTResponseLogin.Headers.Values['X-CSRF-Token'];
  FLoginSvar := Result;
end;

1 个答案:

答案 0 :(得分:0)

我找到了解决您问题的方法。我遇到了相同的问题,但是设法忽略了证书验证:

在RESTClient1组件中,将事件内的以下标志设置为false:

procedure TForm1.RESTClient1AuthEvent(const Sender: TObject;  AnAuthTarget: 
AuthTargetType; const ARealm, AURL: string; var AUserName,  APassword: 
string; ar AbortAuth: Boolean;  var Persistence: TAuthPersistenceType);
begin  
    AbortAuth = True; 
end;