IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Web & réseau Delphi Discussion :

[D10.3] Comment gérer HTTPS dans un webservice (partie serveur) ?


Sujet :

Web & réseau Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 704
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 704
    Par défaut [D10.3] Comment gérer HTTPS dans un webservice (partie serveur) ?
    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 TIdHTTPWebBrokerBridge
    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;
    Je 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.
    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 ?
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. :bug: ___ "http://club.developpez.com/regles/#LIII-A"Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.3 Entreprise - Visual studio 2022
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.7)

  2. #2
    Membre émérite
    Avatar de free07
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 941
    Par défaut
    Bonjour,

    Question bête : est ce que le serveur a été configuré pour accepter le https ?

  3. #3
    Membre Expert
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 704
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 704
    Par défaut
    Citation Envoyé par free07 Voir le message
    Question bête : est ce que le serveur a été configuré pour accepter le https ?
    C'est à dire ?
    Il y a un paramétrage à faire dans un autre composant ?
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. :bug: ___ "http://club.developpez.com/regles/#LIII-A"Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.3 Entreprise - Visual studio 2022
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.7)

  4. #4
    Membre émérite
    Avatar de free07
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 941
    Par défaut
    Je pense au niveau OS serveur et site, il y a longtemps on a eu un projet de passage de http à https pour des web service et il me semble qu'ils ont eu des config à faire ( et aussi intégrer les certificats ), c'était un serveur Windows.

    Ce n'est pas moi qui m'en suis occupé de la partie serveur.

  5. #5
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 939
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 939
    Par défaut
    Le port est 443 ?

  6. #6
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    alors personnellement j'utilise un composant comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    object SSL: TIdServerIOHandlerSSLOpenSSL
      SSLOptions.Method = sslvTLSv1_2
      SSLOptions.SSLVersions = [sslvTLSv1_2]
      SSLOptions.Mode = sslmUnassigned
      SSLOptions.VerifyMode = []
      SSLOptions.VerifyDepth = 0
      Left = 136
      Top = 160
    end
    sslvTLSv1_2 est la norme maintenant, tout le reste est déprécié (et éventuellement plus supporté par OpenSSL)

    d'ailleurs ta Method "sslvSSLv23" est probablement trop basse pour le navigateur

    ensuite pour la clé j'utilise soit un certificat autosigné
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        // Self signed
          SSL.SSLOptions.RootCertFile := '..\keystore\root.crt';
          SSL.SSLOptions.CertFile := '..\keystore\public.crt';
          SSL.SSLOptions.KeyFile := '..\keystore\private.key';
    où root.crt est le certificat racine, public.crt le certificat public du domaine, et private.key sa clé privée

    sinon avec Let's Encrypt (et éventuellement mon composant DelphiACME) je fais ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
          SSL.SSLOptions.RootCertFile := '';
          SSL.SSLOptions.CertFile := '..\keystore\domain.crt';
          SSL.SSLOptions.KeyFile := '..\keystore\domain.key';
    le root n'étant pas nécessaire vu que c'est Let's Encrypt, il est donc publique.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. la femme de ménage , comment elle fait dans la salle des serveurs
    Par mapmip dans le forum La taverne du Club : Humour et divers
    Réponses: 20
    Dernier message: 25/05/2020, 10h46
  2. Entête HTTP dans requête Webservice
    Par peijnoob dans le forum WinDev
    Réponses: 0
    Dernier message: 13/04/2012, 12h05
  3. [Delphi/WebService] Comment gérer une session HTTP (cookie) ?
    Par adrien_as dans le forum Web & réseau
    Réponses: 3
    Dernier message: 20/03/2009, 11h55
  4. Comment gérer le grec dans MySQL ?
    Par LadyArwen dans le forum Requêtes
    Réponses: 14
    Dernier message: 27/01/2005, 09h24
  5. Comment gérer plusieurs icones dans son exécutable ?
    Par declencher dans le forum Langage
    Réponses: 5
    Dernier message: 15/10/2003, 10h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo