CLASSE SERVEUR DE TYPE NORMAL OU CRYPTE SSL (LINUX ET WINDOWS (VC++))
neoTHGLF
Messages postés65Date d'inscriptiondimanche 7 septembre 2003StatutMembreDernière intervention17 décembre 2007
-
3 mai 2005 à 20:28
Handball95
Messages postés25Date d'inscriptionvendredi 5 février 2010StatutMembreDernière intervention24 février 2010
-
11 mars 2010 à 12:03
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
Handball95
Messages postés25Date d'inscriptionvendredi 5 février 2010StatutMembreDernière intervention24 février 2010 11 mars 2010 à 12:03
Je relance le topic, bien après ;)
Ton code m'a énormément servi et m'a permis d'y voir un peu plus clair sur l'utilisation d'OpenSSL.
Par contre, j'ai voulu, sous Windows, créer un service qui réalise la fonction de serveur HTTPS, mais le service se bloque sur les fonctions : SSL_CTX_use_certificate_file & SSL_CTX_use_PrivateKey_file. J'ai pourtant donné un lien complet vers la clé et le certificat concernés... Le même code, en tant qu'application, fonctionne sans encombres... Quelqu'un aurait une idée?
misterzinzin
Messages postés112Date d'inscriptionvendredi 27 octobre 2000StatutMembreDernière intervention26 janvier 20112 29 sept. 2006 à 22:49
:-) pas mal.
bravo pour l'initiative.
j'ai déja réalisé une classe socket (un peu plus complette que la tienne)
mais jamais en ssl... bravo :-)
il ne manque plus que la version parfaite :-).
BunoCS
Messages postés15472Date d'inscriptionlundi 11 juillet 2005StatutModérateurDernière intervention25 mars 2024103 23 févr. 2006 à 16:32
Salut,
Au regard des différents témoignages, je vois que cette classe n'est pas tout à fait au point. Qu'en est-il maintenant, plus de 6 mois après? Existe-t-il une nouvelle version (et de son pendant client)?
Mooiz
Messages postés128Date d'inscriptionmercredi 25 juin 2003StatutMembreDernière intervention 8 juillet 2005 8 juil. 2005 à 15:14
Ce que je voulais dire par "libération de ressources" c'était justement l'appel a WSACleanup. Mais si c'est un choix alors tout va bien. Maintenant je ne pense pas qu'il soit nécessaire de mettre à jour, la source est déjà largement assez bien (allez n'ayons pas peur des mots : un modèle du genre ;). C'était juste un peu de curiosité, pour savoir quelle note mettre. Ce sera donc 10
pour les ressources, je t'envoie un mp.
PS : désolé pour le double post
neoTHGLF
Messages postés65Date d'inscriptiondimanche 7 septembre 2003StatutMembreDernière intervention17 décembre 2007 4 juil. 2005 à 14:34
Excuse moi pour ce retard j'étais en vacances.
Effectivement je n'appelle jamais WSACleanup, ni closesocket() lorsque j'ai fait la classe je me suis dit que j'allais délèguer cette tâche à l'utilisateur, c'est une erreur de ma part. Aucune classe ne fonctionne comme ça. Mais là je n'ai plus envie de faire de mise à jour. Si j'ai le temps peut-être que je rajouterais une fonction de fermeture de socket.
Je comprends mal ce que tu veux dire par : "comment ça marche la libération de ressources ?". Les ressources sont libérées dès que l'appli se termine, à moins que je ne me trompe. Peut - être existe t-il une méthode pour libérer les ressources. Je ne suis pas encore un guru du c++, lol, je veux bien que tu m'expliques comment on fait pour gerer les ressources si tu sais le faire.
Merci pour ton commentaire ("Très lisible et tout, bravo.").
Cordialement.
Mooiz
Messages postés128Date d'inscriptionmercredi 25 juin 2003StatutMembreDernière intervention 8 juillet 2005 26 juin 2005 à 15:55
Je vais peut êter passer pour un c.., mais il y a un truc qui me surprend : tu ne fermes jamais le socket, ni n'appelle WSACleanup (pour le cas de windows). Est ce que c'est ce que veux dire la phrase :"Cette classe ne s'occupe que de créer la connexion et de dialoguer avec le client"
sinon ça marche comment la libération des ressources ? (ou alors c'est prévu pour être libéré lors de la fermeture de l'appli ?)
En tout cas merci pour la source, elle m'a permis de corriger la partie socket de mon appli ;). Très lisible et tout, bravo.
Juste un petit détail (plus esthétique qu'autre chose) : j'aurais bien fais un typedef ... MY_SOCKET dans le premier #ifdef, de manière à ne pas avoir un deuxième #ifdef dans les attributs privés (private: MY_SOCKET fd;)
neoTHGLF
Messages postés65Date d'inscriptiondimanche 7 septembre 2003StatutMembreDernière intervention17 décembre 2007 9 juin 2005 à 21:48
Et voilà, j'ai retravaillé la source en appliquant certains de vos conseils (merci Nebula). Pour le moment seule la source "classe serveur" est retravaillée. J'y ai inclu la gestion des exceptions, j'ai substitué le ssl_v3_method à ssl_v23_method et j'ai fais une documentation pour utiliser la classe. Pour le moment je n'ai pas eu le temps de regarder pour le générateur de nombres aléatoires, je regarderais. Je publie la nouvelle source avec sa doc et le tour est joué.
Cordialement.
neoTHGLF
Messages postés65Date d'inscriptiondimanche 7 septembre 2003StatutMembreDernière intervention17 décembre 2007 6 juin 2005 à 17:57
C'est exact Nébula. J'ai lu tes commentaires sur ma source client, j'y ai par ailleurs répondu. En fait, je n'ai pas utilisé de certificats pour le client parce que, à la base, ces deux classes (client/serveur) n'étaient pas destinées à être publiées, elles s'inscrivent dans un projet que je développe actuellement, et dans ce projet une sécurité maximale me paraissait inutile. Le fait étant que je développe un outil qui sera plutôt destiné à "casser" une sécurité...
Désormais, plus j'avance, plus je me dis que je devrais publier une classe "parfaite". Je vais donc appliquer tes conseils ;).
Merci.
Cordialement.
cs_Nebula
Messages postés787Date d'inscriptionsamedi 8 juin 2002StatutMembreDernière intervention 7 juin 20072 6 juin 2005 à 02:24
Salut, utiliser un certificat c'est bien mais nourrir le générateur de nombres aléatoires c'est utile aussi (voir ma remarque sur ta source client) ;-)
De plus, utiliser un certificat public pour authentifier le serveur côté client peut être intéressant pour éviter des attaques du troisième type ("man in the middle"), qui réduiraient l'efficacité d'une connexion SSL à zéro.
neoTHGLF
Messages postés65Date d'inscriptiondimanche 7 septembre 2003StatutMembreDernière intervention17 décembre 2007 6 mai 2005 à 19:22
J'attends vos remarques sur cette source, si elle est bien, si c'est vu et revu, si c'est plutôt mal fait, si c'est carrément naze...enfin voilà. Une tite note pour savoir à quoi m'en tenir ;)
Cordialement.
neoTHGLF
Messages postés65Date d'inscriptiondimanche 7 septembre 2003StatutMembreDernière intervention17 décembre 2007 5 mai 2005 à 13:47
Merci pour tes remarques.
Pour l'envoie et la réception effectivement je n'ai pas fait attention. C'est l'utilisateur qui doit faire les envois et les réceptions. Je vais remèdier à ça.
Je commente ma source, j'enlève l'affichage des erreurs et je fais la gestion des envois et des réceptions. Dès que j'ai fini je republie le zip.
Si tu développes avec SSL il existe un bon support texte :
http://publib.boulder.ibm.com/infocenter/tpfhelp/v1r3m0/topic/com.ibm.tpf.doc_put.19/gtps5/gtps5m06.htm C'est le meilleur site que j'ai trouvé sur la programmation avec openSSL.
Cordialement.
cs_neria
Messages postés319Date d'inscriptionvendredi 21 février 2003StatutMembreDernière intervention16 février 2009 4 mai 2005 à 21:52
Salut !
Je suis moi même en train de développer une classe Socket (Uniquement sur Windows), ta source m'interesse donc pleinenement (surtout la partie SSL).
J'ai regardé ton code, mais je ne vois pas de fonction Envoyer ou Recevoir, comment cela est il géré ?
Une remarque importante : il ne faut surtout pas afficher à l'écran les messages d'erreurs !!!!!!! C'est l'utilisateur qui doit gérer les erreurs, il faut donc les lui procurer soit par une variable d'Etat, soit par un retour de fonction. Un exemple simple : comment utiliser ta classe dans une application graphique ????
autre petite remarque : ça manque un peu de commentaires, mais sinon ta source semble tenir la route.
@+ Neria
PS : Personnellement je préfère les commentaires en Français ;)
neoTHGLF
Messages postés65Date d'inscriptiondimanche 7 septembre 2003StatutMembreDernière intervention17 décembre 2007 3 mai 2005 à 20:28
Vous aurez put remarquer que les messages d'erreur sont traités dans la classe. Je me suis demandé si cela avait vraiment sa place au sein même de la classe. Plus j'y pense, plus je pense que j'ai fait une erreur en faisant afficher des messages lors d'erreurs éventuelles.
Et vous quand pensez - vous ? ;)
Cordialement.
11 mars 2010 à 12:03
Ton code m'a énormément servi et m'a permis d'y voir un peu plus clair sur l'utilisation d'OpenSSL.
Par contre, j'ai voulu, sous Windows, créer un service qui réalise la fonction de serveur HTTPS, mais le service se bloque sur les fonctions : SSL_CTX_use_certificate_file & SSL_CTX_use_PrivateKey_file. J'ai pourtant donné un lien complet vers la clé et le certificat concernés... Le même code, en tant qu'application, fonctionne sans encombres... Quelqu'un aurait une idée?
29 sept. 2006 à 22:49
bravo pour l'initiative.
j'ai déja réalisé une classe socket (un peu plus complette que la tienne)
mais jamais en ssl... bravo :-)
il ne manque plus que la version parfaite :-).
23 févr. 2006 à 16:32
Au regard des différents témoignages, je vois que cette classe n'est pas tout à fait au point. Qu'en est-il maintenant, plus de 6 mois après? Existe-t-il une nouvelle version (et de son pendant client)?
8 juil. 2005 à 15:14
pour les ressources, je t'envoie un mp.
PS : désolé pour le double post
4 juil. 2005 à 14:34
Effectivement je n'appelle jamais WSACleanup, ni closesocket() lorsque j'ai fait la classe je me suis dit que j'allais délèguer cette tâche à l'utilisateur, c'est une erreur de ma part. Aucune classe ne fonctionne comme ça. Mais là je n'ai plus envie de faire de mise à jour. Si j'ai le temps peut-être que je rajouterais une fonction de fermeture de socket.
Je comprends mal ce que tu veux dire par : "comment ça marche la libération de ressources ?". Les ressources sont libérées dès que l'appli se termine, à moins que je ne me trompe. Peut - être existe t-il une méthode pour libérer les ressources. Je ne suis pas encore un guru du c++, lol, je veux bien que tu m'expliques comment on fait pour gerer les ressources si tu sais le faire.
Merci pour ton commentaire ("Très lisible et tout, bravo.").
Cordialement.
26 juin 2005 à 15:55
sinon ça marche comment la libération des ressources ? (ou alors c'est prévu pour être libéré lors de la fermeture de l'appli ?)
En tout cas merci pour la source, elle m'a permis de corriger la partie socket de mon appli ;). Très lisible et tout, bravo.
Juste un petit détail (plus esthétique qu'autre chose) : j'aurais bien fais un typedef ... MY_SOCKET dans le premier #ifdef, de manière à ne pas avoir un deuxième #ifdef dans les attributs privés (private: MY_SOCKET fd;)
9 juin 2005 à 21:48
Cordialement.
6 juin 2005 à 17:57
Désormais, plus j'avance, plus je me dis que je devrais publier une classe "parfaite". Je vais donc appliquer tes conseils ;).
Merci.
Cordialement.
6 juin 2005 à 02:24
De plus, utiliser un certificat public pour authentifier le serveur côté client peut être intéressant pour éviter des attaques du troisième type ("man in the middle"), qui réduiraient l'efficacité d'une connexion SSL à zéro.
6 mai 2005 à 19:22
Cordialement.
5 mai 2005 à 13:47
Pour l'envoie et la réception effectivement je n'ai pas fait attention. C'est l'utilisateur qui doit faire les envois et les réceptions. Je vais remèdier à ça.
Je commente ma source, j'enlève l'affichage des erreurs et je fais la gestion des envois et des réceptions. Dès que j'ai fini je republie le zip.
Si tu développes avec SSL il existe un bon support texte :
http://publib.boulder.ibm.com/infocenter/tpfhelp/v1r3m0/topic/com.ibm.tpf.doc_put.19/gtps5/gtps5m06.htm
C'est le meilleur site que j'ai trouvé sur la programmation avec openSSL.
Cordialement.
4 mai 2005 à 21:52
Je suis moi même en train de développer une classe Socket (Uniquement sur Windows), ta source m'interesse donc pleinenement (surtout la partie SSL).
J'ai regardé ton code, mais je ne vois pas de fonction Envoyer ou Recevoir, comment cela est il géré ?
Une remarque importante : il ne faut surtout pas afficher à l'écran les messages d'erreurs !!!!!!! C'est l'utilisateur qui doit gérer les erreurs, il faut donc les lui procurer soit par une variable d'Etat, soit par un retour de fonction. Un exemple simple : comment utiliser ta classe dans une application graphique ????
autre petite remarque : ça manque un peu de commentaires, mais sinon ta source semble tenir la route.
@+ Neria
PS : Personnellement je préfère les commentaires en Français ;)
3 mai 2005 à 20:28
Et vous quand pensez - vous ? ;)
Cordialement.