不了解OpenSSL_add_all_algorithms方法

时间:2013-01-23 21:29:22

标签: ssl openssl

文档说

  

OpenSSL保留了摘要算法和密码的内部表。它使用此表通过EVP_get_cipher_byname()等函数查找密码。

     

OpenSSL_add_all_digests()将所有摘要算法添加到表中。

我的问题是,这张表存放在哪里?我的代码如何知道这个方法已经执行了?...它是如何在内部工作的,如果我想要更多的SSL连接,一个是添加所有摘要而另一个不是? 有谁知道这方面的任何好文件?

谢谢

3 个答案:

答案 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