编译标志与配置选项

如果你错过了 - 实施TLS心跳扩展的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的选项,例如可用的密码套件。


当他们做出这个决定时,我并不了解程序员的心态,但是肯定 - 一个库不会被用在一个或两个明确定义的场景中,它会被使用,然而有人编写main()称它

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


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

这很简单...在编译和安装的Configuration Options下的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 。 您无法在配置时,编译时或运行时禁用它。 它更加不安全的浏览器垃圾泄漏到其他用户代理和软件中......


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

链接地址: http://www.djcxy.com/p/19863.html

上一篇: Compile Flags vs Configuration Options

下一篇: how to implement simple like button in listview of each item