Я написал сценарий, который может создать подключение к HTTP-серверу и отображать содержимое веб-сайта в консоли. Очень легко.OpenSSL в соединении Socket Socket (клиент HTTPS)
Но я хочу подключиться к серверу https и выполнять те же процедуры. Я искал в google и не нашел то, что искал.
Пожалуйста, помогите мне и дайте мне учебник, который я могу использовать в библиотеке openssl.
Я попробовал себя в библиотеке openssl, но библиотека очень сложная и трудная для понимания.
Вот мой код клиента 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;
}
Да, библиотека OpenSSL выше средней, с точки зрения сложности и сложности использования. Вам не только нужно выяснить, как использовать его, но также иметь хорошие рабочие знания о технологии SSL/TLS. Начните читать свою документацию. Получите книгу по внедрению приложений SSL и начните читать эту книгу. Нет, нет ярлыков и никаких волшебных палочек, которые можно отменить, и сделать клиенту SSL-клиента из воздуха. Нет альтернативы инвестированию значительного времени и усилий в изучение и изучение способов использования библиотеки. –
Да, я знаю. существует небольшое знание TLS/SSL. Но мне нужно «быстрое» решение для C++-программы. Теперь я нашел хороший способ: я использую библиотеку libcurl. Вот уже реализация HTTPS. Большое спасибо! – Hball
Используя OpenSSL, самым простым подходом было бы заменить слова 'connect()', 'read()' и 'send()' на 'ssl_connect()', 'ssl_read()' и 'ssl_write()' соответственно. Это означает повторную запись существующей логики сокетов, поскольку HTTP и HTTPS будут использовать разные коды кода. Если вы хотите повторно использовать существующий код сокета и просто добавить OpenSSL поверх него, вы можете использовать API-интерфейс OpenSSL 'BIO', который позволяет вам продолжать использовать' connect() ',' read() 'и' send() ' , вы просто связываете некоторые выделенные буферы памяти для обработки зашифрованных данных взад и вперед. Есть ** тонны ** примеров, если вы посмотрите вокруг. –