如果你错过了 – 在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中的所有不必要的选项。