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

时间:2014-04-09 01:08:20

标签: apache nginx configuration openssl

如果你错过了它 - TLS Heartbeat Extension实施中的OpenSSL漏洞已经发生了变化。有关详细信息,请参阅http://heartbleed.com/

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

为什么系统管理员必须重新编译库以禁用扩展?为什么没有配置选项?本来可以更容易地进行短期补救。

我最好的猜测,这是一个高性能的,作为一个库本质上没有像服务那样​​的配置文件。通过Apache mod_ssl和Nginx HttpSslModule文档进行搜索,我没有看到任何可以通过配置禁用Heartbeat功能的内容。这不是一个选择吗?

- 编辑 -

为了澄清,受影响的每个人都需要撤销和替换受影响的SSL证书。这里的主要问题是该漏洞允许任何人从易受攻击的服务器中提取64 KB的应用程序内存。这可以通过配置选项轻松解决。必须撤销和替换SSL证书是此漏洞的第二个后果,其中包括哪些类型的数据(用户名,密码,会话信息......)可能已从应用程序内存泄漏。

-EDIT2 -

澄清 - 通过配置,我不是指编译OpenSSL时的配置。我的意思是在Web服务器中进行配置。例如,使用apache mod_ssl,我可以配置一系列影响SSL的选项,例如Cipher Suites available

3 个答案:

答案 0 :(得分:2)

我不知道程序员做出这个决定时的心态,但是是 - 一个库不会被用于一个明确定义的场景或两个,它会被使用但是有人编码了main()称之为

如果你真的想要禁用一个选项,那么编译它似乎是我最好和最安全的选择。

答案 1 :(得分:1)

  

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

这很简单......详细介绍了Configuration Options at Compilation and Installation下的OpenSSL wiki:在配置时,只需添加-DOPENSSL_NO_HEARTBEATS

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

只留下运行时间(见下文)。

  

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

你不应该这样做。您的发行版应该为您提供。但他们可能会在他们的构建中提供它。

有时您可能需要从“个人档案”中找到它,例如PPA on Ubuntu

(Ubuntu有时会做一些愚蠢的事情,例如禁用TLS 1.1 and 1.2 in OpenSSL和禁用TLS 1.1 and 1.2 in OpenJDK。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。您无法在配置时,编译时或运行时禁用它。它更加不安全的浏览器垃圾泄漏到其他用户代理和软件......

答案 2 :(得分:0)

如果你开始编译openssl,我建议编译一个更安全的&#34; openssl的版本,满足您的需求。不仅禁用心跳(-DOPENSSL_NO_HEARTBEATS),还禁用openssl中所有不必要的选项。