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

Delphi Discussion :

Delphi 7 Indy 9 TIdHTTP SSL exception EIdOSSLCouldNotLoadSSLLibrary


Sujet :

Delphi

  1. #1
    Candidat au Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2010
    Messages : 6
    Points : 3
    Points
    3
    Par défaut Delphi 7 Indy 9 TIdHTTP SSL exception EIdOSSLCouldNotLoadSSLLibrary
    Bonjour à tous,

    Mon appli doit se connecter à 'Google agenda' pour envoyer des évènements (au format ics), il s'agit du protocole http en SSL, d'où l'utilisation d'un TIdHTTP.
    J'ai bien ajouté les 2 DLL Open SSL (libeay32.dll + ssleay32.dll) dans le dossier de mon appli (et essayé aussi dans Windows/System32). Bref, j'ai suivi tous les conseils que j'ai pu trouver sur tous les forums, mais l'exception 'EIdOSSLCouldNotLoadSSLLibrary' (Impossible de charger la bibliothèque SSL') se déclenche systématiquement.

    J'ai lu à la page https://delphi.developpez.com/faq/?p...-SSL-avec-Indy :
    "il suffit de poser un composant IdSSLIoHandlerOpenSll et le lier au composant Indy par le IOHandler (IdSmtp , IdHttp, etc.)."
    D'ailleurs cette même réponse apparait sur plusieurs forums, mais ce composant est introuvable, ni dans la palette de composant Indy, ni dans les sources Indy. Ceux qui, comme moi, ont posé cette même question ont été renvoyés sur le site d'Embarcadero via un lien qui ne mène plus à rien.

    Est ce quelqu'un utiliserait déjà ce composant 'TIdSSLIoHandlerOpenSll' ou plus simplement saurait comment ouvrir une connexion http ssl avec Delphi 7 et Indy 9 ? Ou pourrait poster le source d'un exemple simple qui aurait été testé et qui fonctionne réellement ?

    Merci d'avance.

  2. #2
    Membre régulier Avatar de Coudrak
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 66
    Points : 90
    Points
    90
    Par défaut
    Si pas de solution, il est possible d'installer Indy 10 pour Delphi 7 aussi (au cas où ça résolve...)

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    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 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Bonjour,
    Citation Envoyé par pmoncada Voir le message
    J'ai lu à la page https://delphi.developpez.com/faq/?p...-SSL-avec-Indy :
    "il suffit de poser un composant IdSSLIoHandlerOpenSll et le lier au composant Indy par le IOHandler (IdSmtp , IdHttp, etc.)."
    le "Ensuite" avant le "il suffit de" est important, puisqu'il faut avant tout installer les bibliothèques OpenSSL téléchargeable dans divers endroits par exemple ici à noter que sur le site officiel la dernière version est la openssl-1.0.2l publiée le 29/05/2017 (version tout en bas dans la liste du premier site). Conseil attention à la version de votre OS 64 / 32 bits et la version de Indy si vous mettez les bibliothèques dans system32 rappelez vous :
    OS 32 bits copie des bibliothèques 32 bits dans System32
    OS 64 bits copie des bibliothèques 64 bits dans System32
    et des bibliothèques 32 bits dans SYSWOW64

    le fait de poser le composant idSSLIoHandlerSocket permet de rajouter dans la clause uses idIOHandler,idIOHandlerSocket et idSSLOpenSSL (je ne sais quelle version de Indy j'ai sur mon poste mais cela a été vérifié avec un D7) et le composant idSSLIoHandlerSocket existe bien dans la palette
    petite erreur dans la FAQ ?
    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

  4. #4
    Membre éprouvé
    Avatar de Cirec
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 467
    Points : 1 072
    Points
    1 072
    Par défaut
    Bonjour,

    Attention pour Indy 9 c'est "TIdSSLIOHandlerSocket"
    Et à partir de Indy 10 c'est "TIdSSLIOHandlerSocketOpenSSL"
    on dirait bien que tu n'utilises pas la bonne version de dll !!

    si tu n'y arrives pas j'ai un code d'exemple à fournir il faut juste que remette la main dessus ^^
    un code unique pour Indy 9 & Indy 10

    mais il faudra patienter jusqu'à cette après midi

    Cordialement,
    @+

  5. #5
    Candidat au Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2010
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Merci à vous 2 de me répondre si rapidement.

    Pour répondre d'abord à Coudrak : Indy 10 me pose des problèmes dans d'autres algorithmes, notamment dans l'envoi de mail avec pièces jointes (le champs ImagePart.ContentDisposition := 'inline'), du fait, je suis revenu à Indy 9 que je maîtrise mieux (mais peut être qu'une subtilité d'Indy 10 m'a échappée).
    Ensuit, comme le suggère SergioMaster, j'ai tenté d'installer la dernière version d'OpenSSL avec le fichier openssl-1.0.2l-i386-win32.zip, ce zip contient un fichier Openssl.exe qui me déclenche une erreur "cannot open config file usr/local/ssl/open.cnf". A quoi sert ce fichier Openssl.exe ? Sert il à installer les dll ? Ne peut on pas se contenter de copier les dll dans windows\system32 ? Si non, comment l'utiliser sans déclencher d'erreur ? J'ai ouvert les 3 fichiers txt du zip sans trouver d'info pertinentes.
    Effectivement le composant idSSLIoHandlerSocket est bien présent sur la palette 'Indy - Gestionnaire d'E/S' mais celui qui est cité dans les FAQ est IdSSLIoHandlerOpenSll, qui reste introuvable.

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    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 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Re,
    Citation Envoyé par pmoncada Voir le message
    Ne peut on pas se contenter de copier les dll dans windows\system32
    Si en faisant attention à ce que j'ai écrit à propos des répertoires selon l'OS
    Effectivement le composant idSSLIoHandlerSocket est bien présent sur la palette 'Indy - Gestionnaire d'E/S' mais celui qui est cité dans les FAQ est IdSSLIoHandlerOpenSll, qui reste introuvable.
    peut être faudrait-il modifier/corriger la faq pour indiquer que cela dépend de la version d'indy à voir avec l'auteur Rayek
    peut-être aussi faudra t-il utiliser une version moins récente de OpenSSL pour cause de compatibilité avec la version de Indy (doute)
    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

  7. #7
    Membre éprouvé
    Avatar de Cirec
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 467
    Points : 1 072
    Points
    1 072
    Par défaut
    moi j'utilise aussi bien Indy 9 que Indy 10 sur la même machine
    il suffit d'avoir les bonnes Dll et d'indiquer à Indy ou les chercher en fonction de la version

    Cordialement,
    @+

  8. #8
    Candidat au Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2010
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Sergio, j'ai bien fait attention à ce que tu as écrit et j'ai bien Windows 32 bits, j'ai donc téléchargé 'openssl-1.0.2l-i386-win32.zip', mais je n'arrive pas à lancer l'installation (puisque que copier les fameuses dll dans system32 est insuffisant) et comme le seul exe dans le zip est 'openssl.exe' et qu'il me déclenche une erreur, je ne vois pas comment faire l'install de l'openssl. Je reste donc ouvert à toute nouvelle suggestion.

    Cirec, j'accepterai bien volontiers un code d'exemple.
    Je n'ai pas réussi à faire cohabiter les 2 versions d'Indy, d'ailleurs depuis mon dernier essai, les palettes de composant Indy 9 affichent les icônes des palettes d'Indy 10 (mais c'est secondaire). Comment fais tu pour indiquer à Indy où chercher les bonnes dll en fonction de la version, dans les options de ton projet : 'Projets\options\Repertoires/conditions' ?
    Et est ce mon appli va chercher ces dll dans system32 ou dans son propre dossier en priorité ?

    Je vais donc essayer avec un TIdSSLIOHandlerSocket pour TIdHTTP.IOHandler au lieu d'un TIdSSLIOHandlerSocketOpenSSL (puisqu'il n'existe pas dans Indy 9).

    J'espère ne pas trop vous accaparer avec mes problèmes...encore merci à tous.

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 694
    Points : 13 130
    Points
    13 130
    Par défaut
    Citation Envoyé par pmoncada Voir le message
    Sergio, j'ai bien fait attention à ce que tu as écrit et j'ai bien Windows 32 bits, j'ai donc téléchargé 'openssl-1.0.2l-i386-win32.zip', mais je n'arrive pas à lancer l'installation (puisque que copier les fameuses dll dans system32 est insuffisant) et comme le seul exe dans le zip est 'openssl.exe' et qu'il me déclenche une erreur, je ne vois pas comment faire l'install de l'openssl. Je reste donc ouvert à toute nouvelle suggestion.
    Il n'y a rien à installer, openssl.exe et l'utilitaire pour générer les certificats et les clés. Seulement extraire ces deux DLL.

    Citation Envoyé par pmoncada Voir le message
    Et est ce mon appli va chercher ces dll dans system32 ou dans son propre dossier en priorité ?
    Dossier de l'application en priorité.

  10. #10
    Membre éprouvé
    Avatar de Cirec
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 467
    Points : 1 072
    Points
    1 072
    Par défaut
    Citation Envoyé par pmoncada Voir le message
    Cirec, j'accepterai bien volontiers un code d'exemple.
    Je n'ai pas réussi à faire cohabiter les 2 versions d'Indy, d'ailleurs depuis mon dernier essai, les palettes de composant Indy 9 affichent les icônes des palettes d'Indy 10 (mais c'est secondaire). Comment fais tu pour indiquer à Indy où chercher les bonnes dll en fonction de la version, dans les options de ton projet : 'Projets\options\Repertoires/conditions' ?
    Et est ce mon appli va chercher ces dll dans system32 ou dans son propre dossier en priorité ?
    en fait c'est l'application qui va les chercher grâce à "SetEnvironmentVariable" qui n'impacte que l'application en cours

    Il te faut donc créer un répertoire sur ton disque système ('C:\' normalement) nommé "Mes Progs"
    dans ce répertoire tu y décompresses l'archive "Indy SSL.zip"

    à partir de là tu peux tester le code

    et tu peux ensuite l'adapter à tes besoins (autre répertoire de destination)
    le code est très simple il propose de télécharger une image en "https" pour tester
    Nom : apercu.jpg
Affichages : 2614
Taille : 237,8 Ko
    Indy SSL.zip
    Path pour DLL Indy.zip

    Cordialement,
    @+

  11. #11
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 301
    Points
    11 301
    Billets dans le blog
    6
    Par défaut
    Conclusion : la météo ne change pas avec la version d'Indy !
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  12. #12
    Candidat au Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2010
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Merci à tous pour vos infos.
    Pour faire le point :
    J'ai bien téléchargé openssl-1.0.2l-i386-win32.zip et extrait les 2 dll (libeay32.dll et ssleay32.dll) dans le dossier de mon appli.
    J'ai bien renseigné le champs : IdHTTP.IOHandler avec un TIdSSLIOHandlerSocket que j'ai posé sur ma fiche, sans modifier les valeurs du composant par défaut.
    Mais mon IdHTTP.Post me renvoie toujours le même message : 'EIdoSSlCouldNotLoadSSLLibrary" (Impossible de charger la bibliothèque SSL)
    Si je débloquais déjà ce noeud, je pourrai aller plus loin...

  13. #13
    Membre du Club
    Homme Profil pro
    Tutulaire d'un Master Academique en Réseaux et Systèmes repartis
    Inscrit en
    Juin 2011
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Tutulaire d'un Master Academique en Réseaux et Systèmes repartis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 227
    Points : 51
    Points
    51
    Par défaut
    Citation Envoyé par pmoncada Voir le message
    Merci à tous pour vos infos.
    Pour faire le point :
    J'ai bien téléchargé openssl-1.0.2l-i386-win32.zip et extrait les 2 dll (libeay32.dll et ssleay32.dll) dans le dossier de mon appli.
    J'ai bien renseigné le champs : IdHTTP.IOHandler avec un TIdSSLIOHandlerSocket que j'ai posé sur ma fiche, sans modifier les valeurs du composant par défaut.
    Mais mon IdHTTP.Post me renvoie toujours le même message : 'EIdoSSlCouldNotLoadSSLLibrary" (Impossible de charger la bibliothèque SSL)
    Si je débloquais déjà ce noeud, je pourrai aller plus loin...
    Moi aussi j'ai eu ce problème mais j'ai arriver à le résoudre on utilisant ces fichiers DLL Met les DLL avec ton exécutable selon ta version de indy que tu utilises et le problème sera réglé.

  14. #14
    GO
    GO est déconnecté
    Membre régulier Avatar de GO
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 114
    Points : 92
    Points
    92
    Par défaut
    Bonjour,

    J'ai suivi à peu près tout ce qui a été dit et j'ai le message d'erreur suivant sur la procédure IdHTTP1.Get('https://mon_site', LStream); avec LStream qui est un TMemoryStream :

    Nom : erreur.jpg
Affichages : 1745
Taille : 34,6 Ko

    Avez-vous une idée ? Ah oui j'ai indiqué le username et le password de connexion dans le composant IDhttp propriétés Request....

Discussions similaires

  1. [INDY] IdHttp et SSL
    Par Rayek dans le forum Delphi
    Réponses: 7
    Dernier message: 04/06/2015, 15h14
  2. Delphi 7: Indy, image depuis https
    Par dptrial003 dans le forum Web & réseau
    Réponses: 0
    Dernier message: 21/11/2008, 21h06
  3. Delphi 7, Indy 10, IdFTP.pas et Access violation
    Par kernigansnotdead dans le forum Composants VCL
    Réponses: 4
    Dernier message: 04/02/2008, 09h10
  4. Comment envoyer une commande UNIX par Delphi avec Indy ?
    Par Vulcanos dans le forum Web & réseau
    Réponses: 2
    Dernier message: 25/09/2007, 22h16
  5. Delphi 2005 Indy 9 Erreur au lancement du programme
    Par Houben Jacques dans le forum Web & réseau
    Réponses: 4
    Dernier message: 08/11/2005, 12h05

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