文档说
OpenSSL保留了摘要算法和密码的内部表。它使用此表通过EVP_get_cipher_byname()等函数查找密码。
OpenSSL_add_all_digests()将所有摘要算法添加到表中。
我的问题是,这张表存放在哪里?我的代码如何知道这个方法已经执行了?...它是如何在内部工作的,如果我想要更多的SSL连接,一个是添加所有摘要而另一个不是? 有谁知道这方面的任何好文件?
谢谢
答案 0 :(得分:8)
手册页的NOTES部分对它进行了总结:
典型的应用程序最初会调用OpenSSL_add_all_algorithms(),退出前调用EVP_cleanup()。
和
密码和摘要查找函数用于库的许多部分。如果表没有初始化,则几个函数会出错,并抱怨他们找不到算法。这包括PEM,PKCS#12,SSL和S / MIME库。这是OpenSSL邮件列表中的常见查询。
因此,假设您正在编写一个典型的应用程序,您将把它添加到您的OpenSSL初始化代码中:
OpenSSL_add_all_algorithms();
这是OpenSSL清理代码:
EVP_cleanup();
你完成了。您始终有责任在使用OpenSSL的应用程序中自行调用它们。如果您想知道OpenSSL如何在内部存储表,use the source, Luke。
要控制哪些密码可用于特定的SSL上下文,您可以使用SSL_CTX_set_cipher_list。
至于比手册页更好的文档,我可以推荐"Network Security with OpenSSL" by John Viega, Matt Messier & Pravir Chandra。这本书很旧,并没有涵盖较新版本的OpenSSL,但大部分仍然非常适用。
答案 1 :(得分:1)
OpenSSL_add_all_algorithms()对于较新的OpenSSL版本不是必需的,将被忽略。 为了实现向后和向前兼容性,请使用以下命令:
# if OPENSSL_API_COMPAT < 0x10100000L
OpenSSL_add_all_algorithms();
# endif
和
# if OPENSSL_API_COMPAT < 0x10100000L
EVP_cleanup();
# endif
OpenSSL_add_all_ciphers()和OpenSSL_add_all_digests()也是如此。
有关更多详细信息,请参见以下手册页 https://www.openssl.org/docs/man1.1.0/man3/OpenSSL_add_all_digests.html
答案 2 :(得分:1)
这是一个古老的问题。几年前已弃用该API:
在OpenSSL 1.1.0中,OpenSSL_init_crypto()不推荐使用OpenSSL_add_all_algorithms(),OpenSSL_add_all_ciphers(),OpenSSL_add_all_digests()和EVP_cleanup()函数。
参考: https://www.openssl.org/docs/man1.1.0/man3/OpenSSL_add_all_algorithms.html