2012-06-09 42 views
2

我有一个问题,静态链接的openSSL库和GOST加密引擎。OpenSSL和GOST引擎问题(静态链接)

我有简单的客户端/服务器应用程序使用GOST密钥和证书。 它工作正常与GOST键,但只有当我使用动态链接版本的openSSL库。 如果我尝试使用静态链接的openSSL,我收到了错误消息。

这是OpenSSL库的初始化调用:

OPENSSL_config("correct config file path");

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:140BF10C:SSL routines:SSL_SET_CERT:x509 lib:ssl_rsa.c:402:

当我用动态链接OpenSSL库与外部GOST引擎库都相同的代码工作正常。 那么静态和动态版本有什么区别? 我在这个时候唯一的想法是我的库初始化序列是错误的。

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

nm ./libcrypto.a | grep gost

该命令给了我许多包含在libcrypto.a库中的GOST函数的输出。 所以我认为该库已经正确编译,所有的GOST引擎函数都包含在静态库中。

“不支持的算法”错误消息意味着GOST功能未正确初始化。 问题是:如何正确地初始化静态链接的openSSL引擎?

+0

OPENSSL_config()的参数不是“正确的配置文件路径”。这是openssl.cfg文件中的一个部分名称 – 23W

回答

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文件的路径。 这是错误的建议。