编译标志与configuration选项 – TLS心跳

如果你错过了 – 在TLS心跳扩展的实现中的OpenSSL漏洞已经在进行。 欲了解更多信息,请访问http://heartbleed.com/ 。

其中一个可能的缓解步骤是使用-DOPENSSL_NO_HEARTBEATS选项重新编译OpenSSL以禁用易受攻击的扩展。

为什么系统pipe理员必须重新编译库来禁用扩展? 为什么没有configuration选项? 本来可以使短期修复更容易。

我最好的猜测是,这是一个高性能的 ,作为一个自然的库没有像服务那样​​的configuration文件。 通过Apache mod_ssl和Nginx的HttpSslModule文档search我没有看到任何东西,将允许我通过configuration禁用心跳function。 这不应该是一个select吗?

-编辑-

为了澄清,受影响的每个人都需要吊销和replace受影响的SSL证书。 这里的主要问题是,该漏洞允许任何人从易受攻击的服务器上提取64 KB的应用程序内存。 这可以通过configuration选项轻松解决。 不得不吊销和replaceSSL证书是此漏洞的一个次要后果,以及有关哪些types的数据(用户名,密码,会话信息…)可能已经从应用程序内存中泄露的其他问题。

-EDIT2-

澄清 – 通过configuration我不是在编译OpenSSL时的configuration。 我的意思是在networking服务器的configuration。 例如,使用Apache mod_ssl,我可以configuration一系列影响SSL的选项,例如可用的密码套件 。

当他们做出这个决定的时候,我并不了解程序员的心态,但是肯定的是 – 一个图书馆不会被用在一个明确定义的场景中,或者被用来编码main()称它

如果你真的想禁用一个选项,那么编译出来似乎是最好和最安全的路线。

编译标志与配置选项 – TLS心跳

这很简单… 在编译和安装的配置选项下的OpenSSL wiki上详细介绍:在配置时,只需添加-DOPENSSL_NO_HEARTBEATS

所以你似乎已经找到了配置选项。 配置选项被写入到<openssl install>/include/openssl/opensslconf.h ,所以它也会流入编译时间。

这只会让运行时间(见下文)。


为什么系统管理员必须重新编译库来禁用扩展?

你不应该。 你的分配应该为你提供。 但他们可能会提供它的构建。

有时您可能需要从“个人存档”(如Ubuntu上的PPA)中找到它。

(Ubuntu有时会做一些愚蠢的事情,比如在OpenSSL中禁用TLS 1.1和1.2,在OpenJDK中禁用TLS 1.1和1.2,而在 2015年,它们还没有启用。


为什么没有配置选项?

有,并出版。 你似乎找到了它。

还有一个运行时选项:

 openssl-1.0.2a$ grep -R -A 1 -i heartbeat * ... include/openssl/tls1.h:# define SSL_set_tlsext_heartbeat_no_requests(ssl, arg) \ include/openssl/tls1.h: SSL_ctrl((ssl),SSL_CTRL_SET_TLS_EXT_HEARTBEAT_NO_REQUESTS,arg,NULL) ... 

和:

 include/openssl/ssl.h:# define SSL_heartbeat(ssl) \ include/openssl/ssl.h: SSL_ctrl((ssl),SSL_CTRL_TLS_EXT_SEND_HEARTBEAT,0,NULL) 

本来可以使短期修复更容易。

TLS_FALLBACK_SCSV我的屁股是TLS_FALLBACK_SCSV 。 您不能在配置时,编译时或运行时禁用它。 它的更不安全的浏览器废话泄漏到其他用户代理和软件的方式….

如果你开始编译openssl,我会建议编译一个“更安全”的openssl版本来满足你的需求。 不仅禁用心跳(-DOPENSSL_NO_HEARTBEATS),而且禁用openssl中的所有不必要的选项。