J'ai écrit un script, qui peut créer une connexion à un serveur HTTP et afficher le contenu du site Web dans la console. Très facile. Mais je veux me connecter à un serveur https et faire les mêmes procédures. J'ai cherché sur google et n'ai pas trouvé ce que j'ai cherché.OpenSSL en connexion Socket C++ (client HTTPS)
S'il vous plaît aidez-moi et donnez-moi un tutoriel qui puis-je utiliser la bibliothèque openssl.
Je me suis essayé sur la bibliothèque openssl, mais la bibliothèque est très compliquée et difficile à comprendre.
Voici mon code du client http:
#include <iostream>
#include <ctype.h>
#include <cstring>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <netinet/in.h>
#include <unistd.h>
#include <sstream>
#include <fstream>
#include <string>
#include <arpa/inet.h>
#include <openssl/ssl.h>
using namespace std;
int sock;
struct sockaddr_in client;
int PORT = 80;
int main(int argc, char const *argv[])
{
bzero(&client, sizeof(client));
client.sin_family = AF_INET;
client.sin_port = htons(PORT);
client.sin_addr.s_addr = inet_addr("172.16.0.6");
sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock < 0) {
cout << "Error creating socket." << endl;
exit(1);
}
if (connect(sock, (struct sockaddr *)&client, sizeof(client)) < 0) {
close(sock);
cout << "Could not connect" << endl;
exit(1);
}
stringstream ss;
ss << "GET /" << "\r\n"
<< "Host: 172.16.1.4\r\n"
<< "Accept: application/json\r\n"
<< "Connection: close"
<< "\r\n\r\n";
string request = ss.str();
if (send(sock, request.c_str(), request.length(), 0) != (int)request.length()) {
cout << "Error sending request." << endl;
exit(1);
}
char cur;
while (read(sock, &cur, 1) > 0) {
cout << cur;
}
return 0;
}
Oui, la bibliothèque OpenSSL est supérieure à la moyenne, en termes de complexité et de difficulté à utiliser. Non seulement vous devez savoir comment l'utiliser, mais vous devez aussi avoir une bonne connaissance de la technologie derrière SSL/TLS. Commencez à lire sa documentation. Obtenez un livre sur l'implémentation des applications SSL et commencez à lire ce livre. Non, il n'y a pas de raccourcis, et aucune baguette magique ne peut être supprimée, et faire sortir un client SSL de nulle part. Il n'y a pas d'autre choix que d'investir beaucoup de temps et d'efforts pour étudier et apprendre à utiliser la bibliothèque. –
ouais je sais. une petite connaissance de TLS/SSL existe. Mais j'ai besoin d'une solution "rapide" pour le programme C++. Maintenant, j'ai trouvé un bon moyen: j'utilise la librairie libcurl. Voici déjà une implémentation HTTPS. Merci beaucoup! – Hball
En utilisant OpenSSL, l'approche la plus simple serait de remplacer 'connect()', 'read()' et 'send()' par 'ssl_connect()', 'ssl_read()' et 'ssl_write()', respectivement. Cela signifie réécrire votre logique de socket existante, puisque HTTP et HTTPS utiliseront des chemins de code différents. Si vous voulez réutiliser votre code de socket existant et juste ajouter OpenSSL par dessus, vous pouvez utiliser l'API 'BIO' d'OpenSSL, ce qui vous permet de continuer à utiliser' connect() ',' read() 'et' send() ' , vous venez d'associer des tampons de mémoire dédiée pour gérer les données cryptées avant et en arrière. Il y a ** tonnes ** d'exemples si vous regardez autour. –