Comment gérer le HTTPS dans un webservice (partie serveur) ?
On m'a mis sur un projet déjà écrit, dans lequel le HTTP fonctionne : quand je teste des appels avec postman, tout marche bien.
On me demande de gérer le HTTPS.
J'ai supposé qu'il fallait ajouter un TIdServerIOHandlerSSLOpenSSL, l'associer au TIdHTTPWebBrokerBridge, et paramétrer tout ça.
J'ai mis les mêmes paramètres qu'ici : https://synaptica.info/en/2016/09/21...r-with-delphi/
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 LIOHandleSSL := TIdServerIOHandlerSSLOpenSSL.Create(FServer); LIOHandleSSL.SSLOptions.CertFile := FCertFile; // <-- variable contenant le nom du fichier *.pem LIOHandleSSL.SSLOptions.RootCertFile := FRootCertFile; // <-- variable contenant le nom du fichier *.pem LIOHandleSSL.SSLOptions.KeyFile := FKeyFile; // <-- variable contenant le nom du fichier *.pem LIOHandleSSL.SSLOptions.Method := sslvSSLv23; LIOHandleSSL.SSLOptions.Mode := sslmBoth; LIOHandleSSL.SSLOptions.SSLVersions := [sslvSSLv2, sslvSSLv23, sslvSSLv3, sslvTLSv1, sslvTLSv1_1, sslvTLSv1_2]; LIOHandleSSL.SSLOptions.VerifyDepth := 0; LIOHandleSSL.SSLOptions.VerifyMode := [sslvrfPeer]; LIOHandleSSL.OnGetPassword := IOHandlerSSLOpenSSLGetPassword; LIOHandleSSL.OnVerifyPeer := IOHandlerSSLOpenSSLVerifyPeer; FServer.IOHandler := LIOHandleSSL; // <-- FServer est le TIdHTTPWebBrokerBridgeJe me suis souvenu d'une précédente discussion (https://www.developpez.net/forums/d2...error-tidhttp/) et j'ai bien vérifié la présence des 2 DLL (libeay32.dll et ssleay32.dll) qui sont en version 1.0.2.17.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 procedure TLoyaltyWebServiceSrv.IOHandlerSSLOpenSSLGetPassword(var APassword: String); begin APassword := 'monmdp'; end; function TLoyaltyWebServiceSrv.IOHandlerSSLOpenSSLVerifyPeer(Certificate: TIdX509; AOk: Boolean; ADepth, AError: Integer): Boolean; begin if ADepth = 0 then Result := AOk else Result := True; end;
J'ai bien le fichier certificat (*.pem) à côté de l'exe.
Mais, quand j'appelle à partir de postman avec la même url, mais en remplaçant le HTTP par un HTTPS, j'obtiens ça :
Le projet LoyaltyWebService.exe a déclenché la classe d'exception EIdOSSLAcceptError avec le message 'Erreur lors de l'acceptation de la connexion avec SSL.
EOF : violation du protocole'.
Qu'est ce que j'ai mal fait ?
Partager