Classe serveur de type normal ou crypte ssl (linux et windows (vc++))

Soyez le premier à donner votre avis sur cette source.

Vue 10 054 fois - Téléchargée 1 260 fois

Description

J'ai toujours trouvé difficile de manipuler les sockets. Il se trouve que je me suis retrouvé à faire un programme nécessitant l'utilisation des sockets, qui plus est, cryptées à l'aide du protocole SSL (Secure Socket Layer).
Lors de la crétaion de mon programme, pour simplifier un peu la compréhension du code j'ai fait une classe serveur de tel sorte que désormais code est moins fouilli.
J'ai décidé de poster cette classe afin de faciliter la création d'un serveur. De plus l'utilisation des sockets avec SSL est pour le moins compliqué, et la doc sur internet est loin d'être claire. Donc ce code devrait vous faciliter la tâche.
La classe client allant avec cette classe serveur est en phase d'être terminée (encore un peu d'améliorations à apporter, et surtout beaucoup de tests à effectuer).
UNE DOCUMENTATION SUR LA FACON DONT SE SERVIR DE LA CLASSE EST DISPONIBLE DANS LE ZIP

Source / Exemple :


/***************************************************************************
                          server  -  description
                             -------------------
    begin                : jeu oct 28 2004
    copyright            : (C) 2004 by neoTHGLF
    email                : neoTHGLF.neoTHGLF@laposte.net

                                                                                                                                                      • /
/***************************************************************************
  • *
  • This program is free software; you can redistribute it and/or modify *
  • it under the terms of the GNU General Public License as published by *
  • the Free Software Foundation; either version 2 of the License, or *
  • (at your option) any later version. *
  • *
                                                                                                                                                      • /
/***************************************************************************
  • *
  • Setup a server. Thanks to different functions you can choose wheather *
  • you want a securised connection or a simple connection. *
  • *
                                                                                                                                                      • /
#ifndef SERVER_H #define SERVER_H #include <iostream> #include <string> #include <openssl/ssl.h> #include <openssl/err.h> #include "error.h" #ifdef WIN32 #include <winsock2.h> typedef int socklen_t; #pragma comment(lib,"ws2_32.lib") #pragma comment(lib,"ssleay32.lib") #pragma comment(lib,"libeay32.lib") #else #include <sys/types.h> #include <sys/socket.h> #include <netdb.h> #include <netinet/in.h> #endif using std::cout; using std::endl; using std::string; /** @author neoTHGLF
  • /
class server{ public: int server_set(short server_sin_family,int server_listen_port,char server_bind_adress,int nb_clients); //Make the skeleton of the server int server_set(short server_sin_family,int server_listen_port,char server_bind_adress,int nb_clients,string certificate,string private_key_file); //Make the skeleton of the server with SSL support int server_bind(); /* Bind the server to a port */ int server_listen(); /* Make server to listen */ int server_accept(); /* Accept a connection */ int server_write(char *msg); int server_read(char *msg); int server_get_fd() const; /* Gives fd */ SSL *server_get_SSL_fd() const; /* Gives SSL_fd */ char *convert(string str); /* Convert a string into char */ private: #ifdef WIN32 SOCKET fd; #else int fd; #endif SSL *SSL_fd; /* SSL socket */ SSL_CTX *SSL_ctx; /* SSL context*/ int max_clients; /* Maximum clients in the listen() queue */ int port; /* Port on which the server is listening */ struct sockaddr_in server_addr; int server_len; bool server_ssl_state; }; #endif

Conclusion :


UNE DOCUMENTATION SUR LA FACON DONT SE SERVIR DE LA CLASSE EST DISPONIBLE DANS LE ZIP

Cette source fonctionne à la fois sous linux et sous windows(VC++).
Le code des fonctions est dans le zip.
Pour fonctionner vous devez possèder les librairies SSL.

Pour linux --> http://www.openssl.org
Pour windows --> http://www.shininglightpro.com/download/Win32OpenSSL-v0.9.7f.exe
Site : http://www.slproweb.com/products/Win32OpenSSL.html

Vous aurez remarqué que mes commentaires sont en Anglais... Mondialisation oblige... ;)

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Handball95
Messages postés
25
Date d'inscription
vendredi 5 février 2010
Statut
Membre
Dernière intervention
24 février 2010
-
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
1 -
:-) 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
14655
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
12 novembre 2019
90 -
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
-
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
-
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.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.