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] Erreur EIdOSSLUnderlyingCryptoError avec TIdHTTP


Sujet :

Web & réseau Delphi

  1. #1
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 664
    Détails du profil
    Informations personnelles :
    Âge : 43
    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 664
    Points : 6 967
    Points
    6 967
    Par défaut [D10.3] Erreur EIdOSSLUnderlyingCryptoError avec TIdHTTP
    J'ai une unité écrite sous D2007 (pour un projet D2007) utilisant TIdHTTP pour attaquer un webservice.
    Sous D2007, tout fonctionne bien.

    La même unité utilisée depuis un projet D10.3, me donne l'erreur suivante à chaque appel de IdHTTP.DoRequest():
    Code = 404 - [EIdOSSLUnderlyingCryptoError] Erreur lors de la connexion avec SSL.
    error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version
    Je ne comprend pas pourquoi ça ne peut pas marcher aussi bien que sous D2007, et je ne trouve rien de clair avec google.
    Quelqu'un saurait à quoi correspond exactement le pb, et ce qui ne va pas ?

    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ É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.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)

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

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    Salut,

    tu as un problème de version de TLS/SSL, mais c'est pas déjà avec toi que j'ai parlé de cela ?

    idHTTP ne sait pas faire du HTTPS sans un IOHandler, celui de OpenSSL ou celui de SChannel
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 664
    Détails du profil
    Informations personnelles :
    Âge : 43
    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 664
    Points : 6 967
    Points
    6 967
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    c'est pas déjà avec toi que j'ai parlé de cela ?
    Peut-être, me souviens pas ..

    Citation Envoyé par Paul TOTH Voir le message
    idHTTP ne sait pas faire du HTTPS sans un IOHandler
    Ca, je savais déjà. J'ai sûrement (presque) fait tout ce qu'il faut, puisque tout marche parfaitement bien sous D2007.
    Qu'est ce qu'ils ont encore inventé sous D10.3, pour ça ne marche pas ...

    Et j'ai essayé tout plein de combinaisons de valeurs pour IdIoHandler.SSLOptions.Method et IdIoHandler.SSLOptions.SSLVersions, mais sans succès ...
    [EIdOSSLUnderlyingCryptoError] Erreur lors de la connexion avec SSL.
    error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version
    Parfois une variante :
    [EIdOSSLUnderlyingCryptoError] Erreur lors de la connexion avec SSL.
    error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    type
       TMonIdHTTP = class(TIdHTTP);
    ...
     
    var
      IdHTTP: TMonIdHTTP;
      IdIoHandler: TIdSSLIOHandlerSocketOpenSSL;
      Question, Reponse: TStringStream;
      i: Integer;
    begin
      IdIoHandler := nil;
      IdHTTP := TMonIdHTTP.Create(nil);
      Question := TStringStream.Create(sCorps);
      Reponse := TStringStream.Create('');
      try
        IdHTTP.ConnectTimeout := nTimeOutConnexion;
        IdHTTP.ReadTimeout := nTimeOutLecture;
        IdHTTP.Request.ContentType := 'application/json';
        IdHttp.Request.ContentEncoding := 'utf-8';
        IdHTTP.Request.CustomHeaders.FoldLines := False;
    //    IdHTTP.HTTPOptions := [hoNoProtocolErrorException];
        if Assigned(EnTetes) then
        begin
          for i:=0 to Pred(EnTetes.Count) do
            IdHTTP.Request.CustomHeaders.AddValue(EnTetes.Names[i], EnTetes.ValueFromIndex[i]);
        end;
        if LowerCase(Copy(sURL, 1, 5)) = 'https' then
        begin
          IdIoHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
          IdIoHandler.Destination := TIDURI.URLEncode(sURL);
          IdIoHandler.SSLOptions.Method := sslvSSLv23;                                                                                   // <------- Ici, j'ai essayé toutes les valeurs.
          IdIoHandler.SSLOptions.SSLVersions := [sslvSSLv2, sslvSSLv23, sslvSSLv3, sslvTLSv1, sslvTLSv1_1, sslvTLSv1_2];         // <------- Ici, j'ai essayé plein de combinaisons.
          IdHTTP.IOHandler := IdIoHandler;
        end;
     
        // Appel web-service.
        try
          IdHTTP.DoRequest(sMethode, TIDURI.URLEncode(sURL), Question, Reponse, []);        // <------ Ici l'erreur.
          Result := IdHTTP.ResponseCode;
          {$IF CompilerVersion > 18.5}
            sReponseJSon := UTF8ToString(RawByteString(Reponse.DataString));
          {$ELSE}
            sReponseJSon := UTF8Decode(Reponse.DataString);
          {$IFEND}
        except
          on E: EIdHTTPProtocolException do
          begin
            Result := E.ErrorCode;
            {$IF CompilerVersion > 18.5}
              sReponseJSon := UTF8ToString(RawByteString(E.ErrorMessage));
            {$ELSE}
              sReponseJSon := UTF8Decode(E.ErrorMessage);
            {$IFEND}
          end;
     
          on E: Exception do
          begin
            Result := 404;
            sReponseJSon := '[' + E.className + ']  ' + E.Message;
          end;
        end;
      finally
        Question.Free;
        Reponse.Free;
        if Assigned(IdIoHandler) then
          IdIoHandler.Free;
        IdHTTP.Free;
      end;
    Et comme il n'y a plus d'aide fournie avec Indy, à part ce site officiel (https://github.com/IndySockets/Indy/issues/125) qui est loin d'être d'une grande aide ...
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ É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.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)

  4. #4
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 664
    Détails du profil
    Informations personnelles :
    Âge : 43
    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 664
    Points : 6 967
    Points
    6 967
    Par défaut
    J'ai testé ce matin le Post(), mais même résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IdHTTP.Post(TIDURI.URLEncode(sURL), Question, Reponse);
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ É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.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 038
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 038
    Points : 40 943
    Points
    40 943
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    Tu n'aurais pas un problème de bibliothèque ssl tout simplement ? As-tu vérifié la version utilisée ?
    Une copie dans le répertoire d'exécution pour en être sûr pourrait être un bon test, pour peu que, dans le répertoire système ce ne soit pas une version "compatible"
    Version différente de Indy implique peut-être version différente de SSL surtout une version ante Unicode versus Unicode

    Citation Envoyé par Open SSL
    April 21, 2020 - All users and applications should be using the OpenSSL 1.1.1 (LTS) series at this point. 1.0.2 (LTS) series is only being made available for a little longer. 1.1.0 series is completely out of support.
    Pour info le docwiki de Rio pointe sur le chargement de la 1.0.2
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  6. #6
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 664
    Détails du profil
    Informations personnelles :
    Âge : 43
    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 664
    Points : 6 967
    Points
    6 967
    Par défaut
    J'ai testé un projet de test d'un collègue (en D10.3) qui me donnait la même erreur.
    Donc, le pb venait de mon poste.
    On m'a parlé de DLL.
    J'ai fait une recherche, et j'ai une cinquantaine d'exemplaires de libeay32.dll et ssleay32.dll sur mon poste.
    Apparemment, chaque application possède au moins un exemplaire de ces DLL (voire plusieurs). Les applications et modules Microsoft font pareil (je suppose que c'est la bonne façon de faire, avec ces DLL).

    J'en ai copié au hasard dans mon répertoire, et ça s'est mis à marcher en D10.3, à condition d'utiliser la fonction Post() et non DoRequest()
    J'ai rajouté des if de compilation pour ne pas perturber ce qui marche sous D2007.

    Citation Envoyé par SergioMaster Voir le message
    Tu n'aurais pas un problème de bibliothèque ssl tout simplement ? As-tu vérifié la version utilisée ?
    Tu parles de la version des fichiers DLL ?
    Ceux que j'ai collé ont la version 1.0.1.3

    Citation Envoyé par SergioMaster Voir le message
    dans le répertoire système ce ne soit pas une version "compatible"
    Il n'y en a pas dans des répertoires du genre \system 32\
    Je suppose que c'est parce que chaque exe utilise les siennes.

    Citation Envoyé par SergioMaster Voir le message
    surtout une version ante Unicode versus Unicode
    Effectivement.



    Apparemment, ça a l'air de marcher comme ça.
    de vous être penchés sur mon pb.
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ É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.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)

  7. #7
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 038
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 038
    Points : 40 943
    Points
    40 943
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par Lung Voir le message
    Il n'y en a pas dans des répertoires du genre \system 32\
    Oui mais, pour peu que ce soit un système 64 bits, il faudrait aussi vérifier dans SYSWOW64
    Tu parles de la version des fichiers DLL ?
    Ceux que j'ai collé ont la version 1.0.1.3
    Comme j'ai indiqué, pour Rio ce serait la 1.0.2 la plus indiquée
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

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

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    Citation Envoyé par Lung Voir le message
    ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
          IdIoHandler.SSLOptions.Method := sslvSSLv23;                                                                                   // <------- Ici, j'ai essayé toutes les valeurs.
          IdIoHandler.SSLOptions.SSLVersions := [sslvSSLv2, sslvSSLv23, sslvSSLv3, sslvTLSv1, sslvTLSv1_1, sslvTLSv1_2];         // <------- Ici, j'ai essayé plein de combinaisons.
    ...
    SSL c'est l'ancêtre de TLS et c'est complètement déprécié
    TLS v1 est déprécié
    TLS V1.1 aussi
    en fait tu devrais tuiliser TLSv1_2 ou plus récent (si ou quand dispo)

    la seule raison de venir sur des versions plus anciennes serait que le serveur ne soit pas à jour

    ensuite il faut que la DLL soit dans une version qui supporte cette version évidemment. le support TLS 1.2 est apparu dans OpenSSL 1.0.1, tout version plus ancienne échouera donc forcément...mais il est recommandé d'utiliser la dernière version donc 1.1.1 à priori...sur mon poste j'ai du 1.0.2.11...mais en fait de plus en plus je passe par SChannel car cela m'évite d'avoir à diffuser OpenSSL.
    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. debutant: erreur LNK2001 avec la librairie GSL
    Par drill3 dans le forum MFC
    Réponses: 6
    Dernier message: 25/04/2005, 13h58
  2. erreurs opengl avec devcpp
    Par Vermin dans le forum OpenGL
    Réponses: 2
    Dernier message: 13/04/2004, 14h50
  3. Erreur EACCESSVIOLATION avec des compsts créés dynamiquement
    Par tsikpemoise dans le forum Bases de données
    Réponses: 4
    Dernier message: 28/02/2004, 19h05
  4. Erreur fréquente avec ASP et IIS
    Par Community Management dans le forum ASP
    Réponses: 2
    Dernier message: 11/02/2004, 22h20
  5. Erreurs IIS avec Multiples Frames avec xmlrad
    Par powerlog dans le forum XMLRAD
    Réponses: 4
    Dernier message: 01/07/2003, 13h15

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