TLS/SSL 接続メソッドが設定されていません
プログラムで、クライアントとサーバーのどちらのルーチンを呼び出すかが判断できない
説明
この欠陥は、TLS/SSL コンテキストの接続メソッドを明示的に設定せずに、以下のいずれかの関数を呼び出した場合に発生します。
SSL_readSSL_writeSSL_do_handshake
TLS/SSL 接続を使用するサーバー エンティティとクライアント エンティティ間の通信がハンドシェイクを開始します。ハンドシェイク中に、エンティティ同士が情報を交換し、セッション中に使用する暗号化アルゴリズムとセッション キーを設定します。サーバーとクライアントの接続メソッドは、ハンドシェイクに別々のルーチンを使用します。
チェッカーは以下の場合に欠陥を報告しません。
関数の
SSL_connect(クライアント) とSSL_accept(サーバー) を使用する。これらの関数は、正しいハンドシェイク ルーチンを自動的に設定します。SSL_newを呼び出す関数に引数として SSL コンテキストを渡す。接続を処理する関数のスコープの外部で SSL コンテキストを宣言する。
リスク
SSL エンジンがどの接続メソッド ルーチンを呼び出すかを認識していなければ、ハンドシェイクを開始できません。
修正方法
クライアント ハンドシェイク ルーチンでは、ハンドシェイクを始める前に
SSL_set_connect_stateを呼び出します。サーバー ハンドシェイク ルーチンでは、ハンドシェイクを始める前に
SSL_set_accept_stateを呼び出します。
例
結果情報
| グループ: 暗号化 |
| 言語: C | C++ |
| 既定値: オフ |
コマンド ライン構文: CRYPTO_SSL_NO_ROLE |
| 影響度: Medium |
バージョン履歴
R2020a で導入