10

ドキュメントには

OpenSSLは、ダイジェストアルゴリズムと暗号の内部テーブルを保持します。このテーブルを使用して、EVP_get_cipher_byname()などの関数を介して暗号を検索します。

OpenSSL_add_all_digests()は、すべてのダイジェストアルゴリズムをテーブルに追加します。

私の質問は、このテーブルはどこに保存されているのですか?このメソッドが実行されたことをコードはどのように認識しますか?...内部でどのように機能しますか?SSL接続を増やし、1つにすべてのダイジェストを追加し、もう1つに追加しない場合はどうなりますか?誰かがこれに関する良いドキュメントを知っていますか?

ありがとうございました

4

3 に答える 3

11

マニュアルページのNOTESセクションはそれをかなり要約しています:

一般的なアプリケーションは、最初にOpenSSL_add_all_algorithms()を呼び出し、終了する前にEVP_cleanup()を呼び出します。

暗号およびダイジェストルックアップ関数は、ライブラリの多くの部分で使用されています。テーブルが初期化されていない場合、いくつかの関数は誤動作し、アルゴリズムが見つからないと文句を言います。これには、PEM、PKCS#12、SSL、およびS/MIMEライブラリが含まれます。これは、OpenSSLメーリングリストで一般的なクエリです。

したがって、一般的なアプリケーションを作成していると仮定して、これをOpenSSL初期化コードに追加します。

OpenSSL_add_all_algorithms();

これをOpenSSLクリーンアップコードに追加します。

EVP_cleanup();

これで完了です。OpenSSLを使用するアプリケーションでは、これらを自分で呼び出す責任が常にあります。OpenSSLがテーブルを内部的に保存する方法を知りたい場合は、ソースのLukeを使用してください。

特定のSSLコンテキストで使用できる暗号を制御するには、SSL_CTX_set_cipher_listを使用します。

マニュアルページよりも優れたドキュメントについては、John Viega、Matt Messier、PravirChandraによる「NetworkSecuritywithOpenSSL」をお勧めします。この本は古く、OpenSSLの新しいバージョンをカバーしていませんが、そのほとんどは依然として非常に適用可能です。

于 2013-01-23T22:45:00.843 に答える
2

OpenSSL_add_all_algorithms()は、新しいOpenSSLバージョンには必要ないため、無視されます。後方互換性と前方互換性のために、これを使用してください:

# if OPENSSL_API_COMPAT < 0x10100000L
OpenSSL_add_all_algorithms();
# endif

# if OPENSSL_API_COMPAT < 0x10100000L
EVP_cleanup();
# endif

同じことがOpenSSL_add_all_ciphers()とOpenSSL_add_all_digests()にも当てはまります。

詳細については、 https://www.openssl.org/docs/man1.1.0/man3/OpenSSL_add_all_digests.htmlのmanページを参照してください。

于 2020-05-01T19:14:52.250 に答える
1

これは古い質問です。APIは数年前に非推奨になりました:

OpenSSL_add_all_algorithms()、OpenSSL_add_all_ciphers()、OpenSSL_add_all_digests()、およびEVP_cleanup()の関数は、OpenSSL 1.1.0でOPENSSL_init_crypto()によって非推奨になりました。

参照: https ://www.openssl.org/docs/man1.1.0/man3/OpenSSL_add_all_algorithms.html

于 2020-09-22T16:06:54.587 に答える