CLASSE SERVEUR DE TYPE NORMAL OU CRYPTE SSL (LINUX ET WINDOWS (VC++))

neoTHGLF Messages postés 65 Date d'inscription dimanche 7 septembre 2003 Statut Membre Dernière intervention 17 décembre 2007 - 3 mai 2005 à 20:28
Handball95 Messages postés 25 Date d'inscription vendredi 5 février 2010 Statut Membre Dernière intervention 24 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.

https://codes-sources.commentcamarche.net/source/31155-classe-serveur-de-type-normal-ou-crypte-ssl-linux-et-windows-vc

Handball95 Messages postés 25 Date d'inscription vendredi 5 février 2010 Statut Membre Dernière intervention 24 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és 112 Date d'inscription vendredi 27 octobre 2000 Statut Membre Dernière intervention 26 janvier 2011 2
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és 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
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és 128 Date d'inscription mercredi 25 juin 2003 Statut Membre Derniè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és 65 Date d'inscription dimanche 7 septembre 2003 Statut Membre Dernière intervention 17 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és 128 Date d'inscription mercredi 25 juin 2003 Statut Membre Derniè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és 65 Date d'inscription dimanche 7 septembre 2003 Statut Membre Dernière intervention 17 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és 65 Date d'inscription dimanche 7 septembre 2003 Statut Membre Dernière intervention 17 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és 787 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 7 juin 2007 2
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és 65 Date d'inscription dimanche 7 septembre 2003 Statut Membre Dernière intervention 17 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és 65 Date d'inscription dimanche 7 septembre 2003 Statut Membre Dernière intervention 17 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és 319 Date d'inscription vendredi 21 février 2003 Statut Membre Dernière intervention 16 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és 65 Date d'inscription dimanche 7 septembre 2003 Statut Membre Dernière intervention 17 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.
Rejoignez-nous