SSL_newとは?基本的な使い方とSSL_CTXとの関係をわかりやすく解説

目次

はじめに

「SSL_newは何をする関数なの?」
「SSL_CTXを作成したあと、SSL_newをどのタイミングで使えばいいの?」と迷っていませんか。

OpenSSLを使ってSSL/TLS通信を実装しようとしても、SSL_CTXやSSLといった似た名前が出てくると、それぞれの役割や処理の順番が分からず迷ってしまいますよね。

この記事では、SSL_newの基本的な役割からSSL_CTXとの関係、実際の使い方や処理の流れまで順を追って説明していきます。

SSL_newとは?

SSL_newは、SSL/TLS通信で使用するSSLオブジェクトを作成するための関数です。

ここでは、SSL_newの基本的な役割からSSL_CTXとの関係、関数を使用するときの構文と引数まで順に説明します。

SSL_newはSSLオブジェクトを作成する関数

SSL_newは、OpenSSLでSSL/TLS通信に使用するSSLオブジェクトを作成する関数です。

引数にSSL_CTXオブジェクトを渡して呼び出すと、新しいSSLオブジェクトが作成され、接続ごとのSSL/TLS通信を管理できる状態になります。

SSL_CTXの設定を引き継いでSSLオブジェクトを作成する

SSL_newで作成されるSSLオブジェクトは、引数に指定したSSL_CTXの設定を引き継ぎます。

SSL_CTXに設定した証明書や秘密鍵、暗号方式などがSSLオブジェクトへ反映されるため、同じ設定を接続ごとに設定し直す必要はありません。

SSL_newの構文と引数

SSL_newの構文は「SSL *SSL_new(SSL_CTX *ctx);」です。

引数のctxには作成済みのSSL_CTXオブジェクトへのポインタを指定し、SSL_newを呼び出してSSLオブジェクトを作成します。

SSL_newの戻り値とエラーの確認方法

SSL_newを実行したあとは、戻り値からSSLオブジェクトが正常に作成されたかを確認します。

ここでは、成功した場合に返される値と、失敗してNULLが返された場合のエラー確認方法を説明します。

成功するとSSLオブジェクトへのポインタが返される

SSL_newの呼び出しに成功すると、新しく作成されたSSLオブジェクトへのポインタが返されます。

戻り値がNULLでなければSSLオブジェクトの作成に成功しているため、返されたポインタをSSL型の変数に保持します。

失敗してNULLが返された場合はエラー内容を確認する

SSL_newの呼び出しに失敗すると、戻り値としてNULLが返されます。

戻り値がNULLかどうかを判定し、NULLの場合はOpenSSLのエラーキューからエラー内容を取得して、SSLオブジェクトを作成できなかった原因を確認します。

NULLが返されたあと、OpenSSLのエラーキューから具体的な原因を確認する方法が分からない場合は、エラーの取得方法もあわせて確認しておきましょう。
▶OpenSSLのエラーを確認する方法は?ERR_get_errorの使い方を解説

SSL_newの基本的な使い方

SSL_newを使用するときは、先にSSL_CTXを作成して必要な設定を行ってからSSLオブジェクトを生成します。

ここでは、SSL_newを呼び出す基本的な流れをサンプルコードで確認し、作成したSSLオブジェクトをSSL_freeで解放する方法まで説明します。

SSL_CTXを作成してからSSL_newを呼び出す

SSL_newを呼び出す前に、SSL_CTX_newでSSL_CTXオブジェクトを作成します。

作成したSSL_CTXへのポインタをSSL_newの引数に渡すことで、そのSSL_CTXを基にSSLオブジェクトが作成されます。

SSL_CTXの作成方法や、証明書・秘密鍵をどのタイミングで設定するのか迷う場合は、SSL_CTXの基本的な使い方を確認しておくと流れを整理しやすくなります。
▶SSL_CTXとは?基本的な使い方とSSL/TLS通信の設定方法を解説

SSL_newを使った最小限のサンプルコード

SSL_CTX_newでSSL_CTXを作成し、そのポインタをSSL_newへ渡します。

SSL_newの戻り値をSSL型のポインタで受け取り、NULLでなければSSLオブジェクトの作成は成功です。

SSL_CTX *ctx = SSL_CTX_new(TLS_method());

SSL *ssl = SSL_new(ctx);

if (ssl == NULL) {

    /* SSL_newのエラー処理 */

}

作成したSSLオブジェクトはSSL_freeで解放する

SSL_newで作成したSSLオブジェクトが不要になったら、SSL_freeにSSLオブジェクトへのポインタを渡して解放します。

SSL_newを1回呼び出して作成したSSLオブジェクトごとにSSL_freeを呼び出し、確保されたリソースを解放します。

まとめ

SSL_newは、作成済みのSSL_CTXを基にSSLオブジェクトを作成する関数です。

呼び出しに成功するとSSLオブジェクトへのポインタが返され、失敗するとNULLが返されるため、エラー内容を確認します。

作成したSSLオブジェクトは、不要になった時点でSSL_freeを使って忘れずに解放しましょう。

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

目次