2

静的にリンクされた openSSL ライブラリと GOST 暗号化エンジンに問題があります。

GOST キーと証明書を使用する単純なクライアント/サーバー アプリケーションがあります。GOST キーで問題なく動作しますが、動的にリンクされたバージョンの openSSL ライブラリを使用している場合に限ります。静的にリンクされた openSSL を使用しようとすると、エラー メッセージが表示されます。

これは、openSSL ライブラリの初期化呼び出しです。

OPENSSL_config("正しい設定ファイルのパス");

SSL_library_init();

SSL_load_error_strings();

証明書ファイルを読み取ろうとすると、エラーが発生しました。

SSL_CTX_use_certificate_chain_file(ctx, CERTFILE)

ここでの戻り値は 1 ではありません。したがって、これはエラーです。

人間が読めるエラー メッセージは次のとおりです。

3084809868:エラー:0609E09C:デジタル エンベロープ ルーチン:PKEY_SET_TYPE:サポートされていないアルゴリズム:p_lib.c:239: 3084809868:エラー:0B07706F:x509 証明書ルーチン:X509_PUBKEY_get:サポートされていないアルゴリズム:x_pubkey.c:155: 308480C9868:エラー:1401BF ルーチン:SSL_SET_CERT:x509 lib:ssl_rsa.c:402:

外部 GOST エンジン ライブラリと動的にリンクされた openSSL ライブラリで同じコードを使用すると、すべて正常に動作します。では、静的バージョンと動的バージョンの違いは何ですか? 現時点で、ライブラリの初期化シーケンスが間違っているという唯一の考えがあります。

コンパイルされた libcrypto.a ライブラリのシンボルをチェックしました。

nm ./libcrypto.a | grep gost

このコマンドにより、libcrypto.a ライブラリに含まれる多くの GOST 関数が出力されました。したがって、ライブラリは適切にコンパイルされ、すべての GOST エンジン関数がスタティック ライブラリに含まれていたと思います。

「サポートされていないアルゴリズム」というエラー メッセージは、GOST 関数が正しく初期化されなかったことを意味します。問題は、静的にリンクされた openSSL を使用してエンジンを適切に初期化する方法です。

4

1 に答える 1

4

GOST エンジンと静的にリンクされた openssl を使用するための正しい解決策は次のとおりです。

openssl.cnf がデフォルト ディレクトリに存在することを確認します。(ライブラリを「./config –prefix = /gost-ssl-static」のように構成すると、デフォルトの構成ライブラリは /gost-ssl-static/ssl になります) ( http://www.cryptocom.ru/opensourceを参照) /openssl100.htmlで詳細を確認してください) openssl.cnf の最初のセクションの前に次の行が含まれていることを確認してください。

[openssl_def]
engines=engine_section

[engine_section]
gost=gost_section

[gost_section]
engine_id=gost
default_algorithms=ALL
CRYPT_PARAMS=id-Gost28147-89-CryptoPro-A-ParamSet

openSSL ライブラリと gost エンジンを初期化します。

OPENSSL_config(NULL); 
SSL_library_init();
SSL_load_error_strings();

私の間違いは、OpenSSL の初期化が間違っていました。私の初期化コードはもっと複雑でした。多くの不要な関数呼び出しが互いに干渉し、gost エンジンが初期化されました。また、OPENSSL_config(NULL) 関数の唯一のパラメーターは、openssl.cnf ファイルへのパスを意味すると思いました。間違った提案でした。

于 2012-07-25T10:46:11.203 に答える