我对静态链接的 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 初始化引擎?