3

我的申请中有一个奇怪的情况。我正在使用 OpenSSL 中的 EVP 方法来计算摘要并执行加密。最后,我在 CryptoProvider 类(我的应用程序的主要网关)的析构函数中执行EVP_cleanup( )。它从 OpenSSL 状态卸载所有算法等。

但是,如果客户端将 OpenSSL 用于其他用途,这使得在我的应用程序之外无缝使用 OpenSSL 成为不可能。它也清理了他们的工作。

现在,我有以下选择:

  • 忽略 EVP_cleanup()。这会导致泄漏或其他后果吗?

  • 在我的应用程序中设置一个用于清理的静态 API,客户端必须在其生命周期结束时调用它,这在我的应用程序生命周期之后。

  • 只需相信客户端在其生命周期结束时调用 EVP_cleanup 即可。

你觉得你会在这里做什么?

4

1 回答 1

3

今天早上我有这个问题并且遇到了这个线程......如果我能找到以下回复,它会节省我的时间:

EVP_cleanup() 函数在 OpenSSL 版本 1.0.2h 和 1.1.0 中已弃用。

有关完整详细信息,请参阅他们的更改日志

摘抄:

“使各种清理例程变为无操作并将它们标记为已弃用。大多数全局清理函数不再需要,因为它们是通过 auto-deinit 处理的(请参阅 OPENSSL_init_crypto 和 OPENSSL_init_ssl 手册页)。显式取消初始化可能会导致问题(例如使用 OpenSSL de-inits 的库,但应用程序仍在使用它)。受影响的函数是 CONF_modules_free()、ENGINE_cleanup()、OBJ_cleanup()、EVP_cleanup()、BIO_sock_cleanup()、CRYPTO_cleanup_all_ex_data()、RAND_cleanup()、SSL_COMP_free_compression_methods ()、ERR_free_strings() 和 COMP_zlib_cleanup()。”

于 2016-11-23T17:35:48.687 回答