私は、HTTPサーバーへの接続を作成し、そのWebサイトのコンテンツをコンソールに表示できるスクリプトを作成しました。 非常に簡単です。OpenSSLをC++ソケット接続(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を追加したい場合は、OpenSSLの 'BIO' APIを使用して、' connect() '、' read() 'および' send() 'を引き続き使用できます。暗号化されたデータを前後に処理する専用のメモリバッファをいくつか関連付けるだけです。見て回ると**トン**の例があります。 –