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 :

[Indy ] error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure !


Sujet :

Web & réseau Delphi

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2011
    Messages : 2
    Points : 3
    Points
    3
    Par défaut [Indy ] error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure !
    Bonjour à tous,

    J'ai cette erreur lorsque je tente de lire le contenu d'une page web. J'utilise Delphi X Seattle sous Win7 pro 64 bits et la librairie Indy 10.6.2.5298.
    J'ai bien sûr préalablement écumé google pour trouver une solution, en vain... Selon WireShark, il semblerait que mon programme s'obstine à utilise TLS v1...
    J'ai bien téléchargé openssl à cette adresse https://indy.fulgan.com/SSL/openssl-...4_86-win64.zip, et enregistré les 2 dll dans le répertoire de l'application.

    Via l'inspecteur d'objets, SslIOHandler.Version est à [sslvTLSv1,sslvTLSv1_1,sslvTLSv1_2], et positionne automatiquement Method à sslvSSLv23. J'ai également tenté en ne sélectionnant que v1_2, sans plus de succès.

    Ai-je loupé quelque chose ? (oui sans doute : D )

    Je joins à toutes fins utiles un zip de mon petit projet test.

    D'avance merci pour vos bonnes idées !
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 452
    Points : 24 863
    Points
    24 863
    Par défaut
    J'ai eu la même difficulté que toi sur Indy, je l'ai abandonné au profit de l'API Windows
    J'ai tenté de forcer la version, rien à faire peut importe la combinaison de ExplicitTLS et un tas d'option
    Comme on a en plus ajouté un Proxy, la méthode API utilise la conf Windows et ça évite les prises de tête


    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
     
    procedure GetInternetFile(const AServerName: string; const AURL: string; AStream: TStream);
    const
      BufferSize = 1024;
      accept: packed array[0..1] of LPWSTR = (PChar('text/*'), nil); // PCTSTR rgpszAcceptTypes[] = {_T(“text/*”), NULL};
    var
      hSession, hHTTP, hReq : HINTERNET;
      Buffer: array[1..BufferSize] of Byte;
      BufferLen: DWORD;
      sAppName: string;
    begin
      AStream.Size := 0;
      sAppName := ExtractFileName(Application.ExeName);
     
      hSession := InternetOpen(PChar(sAppName), INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
      try
        hHTTP := InternetConnect(hSession, PChar(AServerName), INTERNET_DEFAULT_HTTP_PORT, nil, nil, INTERNET_SERVICE_HTTP, 0, 1);
        try
          hReq := HttpOpenRequest(hHTTP, PChar('GET'), PChar(AURL), nil, nil, @accept, 0, 1);
          try
            if HttpSendRequest(hReq, nil, 0, nil, 0) then
            begin
              BufferLen := 0;
              repeat
                if InternetReadFile(hReq, @Buffer, BufferSize, BufferLen) then
                  AStream.WriteBuffer(Buffer, BufferLen);
     
              until BufferLen = 0;
            end
            else
              raise Exception.Create('HttpOpenRequest failed. ' + SysErrorMessage(GetLastError));
          finally
            InternetCloseHandle(hReq);
          end;
        finally
          InternetCloseHandle(hHTTP);
        end;
      finally
        InternetCloseHandle(hSession);
      end;
    end;
    exemple si un site des cours des métaux

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        if IndyMode then
          idhttpt.Get('https://www.cookson-clal.com/cours/cours.jsp?table=fins&datearch='+DateStr,Mystreamt)
        else
          GetInternetFile('www.cookson-clal.com', '/cours/cours.jsp?table=fins&datearch='+FormatDateTime('dd/mm/yyyy', MaDate), Mystreamt);
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2011
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Super, ta solution fonctionne parfaitement, merci beaucoup

    Mon souci est résolu, mais je ne mets pas le topic en "résolu" de suite, au cas où quelqu'un viendrait avec une solution orientée Indy.

  4. #4
    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 430
    Points
    28 430
    Par défaut
    c'est probablement les DLL OpenSSL qui ne sont pas à jour
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2015
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2015
    Messages : 76
    Points : 25
    Points
    25
    Par défaut
    Bonjour à tous,

    Je me permets de rouvrir ce post plutôt que d'en recréer un autre.

    Je suis sous delphi rio.
    J'avais un code qui fonctionnait très bien. J'envoie un fichier json sur un site web avec un url en https. (certificat venant de https://letsencrypt.org/fr/)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    HTTP := TIdHTTP.Create(nil);
    curlSsl := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
    HTTP.IOHandler := curlSsl; // needed for https
    HTTP.Request.ContentType := 'application/x-www-form-urlencoded';
    jsonString.Add('json=' + jsonArray.toString);
    return := HTTP.Post(url, jsonString);
    J'ai plaçé les deux dll dans le même dossier que le exe
    libeay32.dll
    ssleay32.dll

    IdSSLOpenSSL.OpenSSLVersion -> OpenSSL 1.0.2u 20 Dec 2019
    J'ai bien pris la version 32bits : openssl-1.0.2u-i386-win32

    Et je reste avec le message : Error connecting with SSL. error:1409442E:SSL routines:ssl3_read_bytes:tlsv1 alert protocol version

    Es-ce que cela veut dire que delphi veut utiliser tlsv1?

    J'ai déjà passé quelques heures à lire de la doc mais sans succès.

    Auriez-vous une autre piste que mettre à jour les dll ?

    Bertrand

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2015
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2015
    Messages : 76
    Points : 25
    Points
    25
    Par défaut
    Hello,

    A force de tester des choses, j'y suis arrivé.
    J'ai retiré le composant graphique et uniquement via le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    curlSsl := TIdSSLIOHandlerSocketOpenSSL.Create(Self) ;
    curlSsl.SSLOptions.Method := sslvTLSv1_2;
    curlSsl.SSLOptions.SSLVersions := [sslvTLSv1_2];
    C'est passé sans soucis.

    Bonne journée

    Bertrand

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

Discussions similaires

  1. sslv3 alert handshake failure
    Par chaying dans le forum Administration
    Réponses: 1
    Dernier message: 03/03/2011, 17h32
  2. Encore une jointure sous Oracle pour la route
    Par ebaynaud dans le forum Langage SQL
    Réponses: 15
    Dernier message: 04/11/2004, 11h40
  3. Encore une question sur malloc
    Par IG88 dans le forum C
    Réponses: 5
    Dernier message: 23/06/2004, 15h35
  4. Encore une requête complexe sur plusieurs tables
    Par DenPro dans le forum Langage SQL
    Réponses: 5
    Dernier message: 09/12/2003, 19h05

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