Einzelnen Beitrag anzeigen

ennymaniac

Registriert seit: 19. Feb 2019
7 Beiträge
 
Delphi 10.4 Sydney
 
#25

AW: Fehler beim Abrufen des Serverzertifikats

  Alt 19. Feb 2019, 12:10
Mit Delphi 10.3 wurden umfangreiche Änderungen realisiert. Die SOAP Komponenten bauen jetzt auf THTTPClient auf, einer Embarcadero eigenen Implementierung. Das ist eigentlich gut, scheint aber manchmal doch noch betriebssystemabhängig zu sein.
Es scheint auch so zu sein, dass der Fehler nur in Verbindung mit bestimmten Zertifikaten auftritt. Anscheinend, wird dann ein Protokoll ausgewählt, was der Server ablehnt.

Workaround:

Delphi-Quellcode:
procedure TForm1.ProcessShipment(out sresp: ShipmentResponse; const RequestStream, ResponseStream: TMemoryStream);
var
  prio: THTTPRIO;
  port: ShipPortType;
  h: TUPSWebServiceHandler;
begin
  h := TUPSWebServiceHandler.Create(RequestStream, ResponseStream);
  try
    prio := THTTPRIO.Create(nil);
    prio.HTTPWebNode.OnBeforePost:=SoapBeforePost; //Vor jedem Post ausführen
    port := GetShipPortType(False, UPSWEBSERVICE_SHIPMENT_URL, prio);

    sresp := port.ProcessShipment(nil, nil); // diese Zeile wirft den Fehler
  finally
    h.Free;
  end;
end;

procedure TForm1.SoapBeforePost(const HTTPReqResp: THTTPReqResp; Client: THTTPClient);
begin
  Client.SecureProtocols:=[THTTPSecureProtocol.TLS11, THTTPSecureProtocol.TLS12];
end;
SoapBeforePost wird dann vor jeder Operation aufgerufen und dort kann der THTTPClient direkt beeinflusst werden. THTTPSecureProtocol.TLS12 verwendet dann TLS12 was von vielen Servern akzeptiert wird.

Geändert von ennymaniac (19. Feb 2019 um 12:12 Uhr)
  Mit Zitat antworten Zitat