C言語にて ソケット関数を使って ウエブサーバを作成する
の続きです
openssl
OpenSSLは、SSLプロトコルのソフトウェアである。
C言語のライブラリも備えている。
OpenSSL
https://www.openssl.org/
下記を参照ください。
MAC に openssl をインストールして開発環境を作る
https://ken-ohwada.hatenadiary.org/entry/2021/02/21/151304
HTTPSサーバ
HTTPS(Hypertext Transfer Protocol Secure)は、HTTPによる通信をより安全に(セキュアに)行うためのプロトコルである。
HTTPSサーバは、 HTTPSに対応したウエブサーバである。
HTTPS接続のためのサーバー証明書が必要となる。
今回作るHTTPSサーバは、リクエストを解析せず、何が来ても同じ HTML を返送する簡素なもの。
下記を参照のこと。
openssl コマンドを使って オレオレ証明書を作成する
https://ken-ohwada.hatenadiary.org/entry/2021/02/21/151612
HTTPSサーバを作成する
下記を参考にした。
OpenSSL を使って HTTPS サーバーをつくる
https://blog.sarabande.jp/post/82087204080
ポート番号を指定して待ち受けする。
クライアントが接続すると、SSLハンドシェイクを行い、データを受信する。
レスポンス (HTML) を送信する。
下記のようなコードになる。
// 初期化 SSL_load_error_strings(); OpenSSL_add_ssl_algorithms(); SSL_CTX *ctx; ctx = SSL_CTX_new( SSLv23_server_method() ); SSL *ssl; ssl = SSL_new(ctx); // サーバ証明書を読み込む SSL_CTX_use_certificate_file( ctx, file_cert, SSL_FILETYPE_PEM ); // 秘密鍵を読み込む SSL_CTX_use_PrivateKey_file( ctx, file_key, SSL_FILETYPE_PEM ); // 待ち受けする listen(); // 接続してきたクライアントのソケットディスクリプタを取得する int sockfd_client = accept(); // ディスクリプタをSSLに設定する SSL_set_fd(ssl, sockfd_client); // クライアントがSSLハンドシェイクを開始するのを待つ SSL_accept(ssl); // リクエストを受信する SSL_read(ssl, buf ); // レスポンスを送信する SSL_write(ssl, data, strlen(data) );
ウェブブラウザで確認する
下記を参照のこと。
ウェブブラウザでオレオレ証明書のサイトを閲覧する
https://ken-ohwada.hatenadiary.org/entry/2021/02/22/155246
うまくいくと下記のように表示される。
コードは github に公開した。 https://github.com/ohwada/MAC_cpp_Samples/tree/master/openssl/https