静的にリンクされた 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 を使用してエンジンを適切に初期化する方法です。