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:error:0609E09C:digital envelope routines:PKEY_SET_TYPE:unsupported algorithm:p_lib.c:239:3084809868:error:0B07706F:x509 certificate routines:X509_PUBKEY_get:unsupported algorithm:x_pubkey.c:155:3084809868:error:140BF1CSSLroutines :SSL_SET_CERT:x509 lib:ssl_rsa.c:402:

当我将相同的代码与动态链接的 openSSL 库与外部 GOST 引擎库一起使用时,一切正常。那么静态版和动态版有什么区别呢?我此时唯一的想法是我的库初始化顺序是错误的。

我检查了编译后的 libcrypto.a 库中的符号。

纳米./libcrypto.a | grep

这个命令给了我很多 GOST 函数的输出,这些函数包含在 libcrypto.a 库中。因此,我认为该库已正确编译,并且所有 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 回答