我希望我的 Scientific Linux 6(RHEL6 重建)服务器上的 Apache 能够支持 TLSv1.2。
是否有一些半支持的途径可以使其发挥作用?最好是最少的定制重建。现在我将 mod_ssl 与 open_ssl 一起使用,如 SL6 存储库中提供的那样。
编辑:一旦 TLSv1.2 支持可用,Apache 配置就会有详细的文档记录并且不会太困难。问题是 RHEL6 附带 OpenSSL 1.0.0,它仅支持 1.0 或 1.1 版本的 TLS。
答案1
我编写了一份快速指南,介绍如何从 Fedora Core 向后移植 OpenSSL 1.0.1 RPM 以支持 RHEL6 及其变体,方法是替换捆绑的 1.0.0 版本以添加 TLSv1.2 和 ECC 支持。 2013 年 9 月针对 CentOS 6.4 构建并测试:
适用于 CentOS 6 的 OpenSSL 1.0.1 RPM 指南
请注意:这是我保存最新 OpenSSL 和 OpenSSH 副本的地方。 CentOS 6.5 的改进在很大程度上减轻了对 TLS1.2 的需求,并且解决了像 Heartbleed 这样的缺陷,而这个答案将永远停留在 2013 年。不要逐字遵循以下步骤,您必须运行 1.0.1g 或更高版本。
现在有了 github:github/ptudor/centos6-openssl
我已经提供了一个补丁,我将在本指南中引用它:openssl-spec-patricktudor-latest.diff
首先,准备您的构建环境。 (如果你已经安装了 EPEL,请使用模拟。这里保持简单......)
yum -y groupinstall "Development tools"
yum -y install rpm-build zlib-devel krb5-devel
mkdir -p $HOME/redhat/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
echo "%_topdir $HOME/redhat/" > ~/.rpmmacros
接下来,获取适用于 OpenSSL 的 Fedora Core 20 SRPM 和完整的 OpenSSL 源代码。
rpm -Uvh http://dl.fedoraproject.org/pub/fedora/linux/development/rawhide/source/SRPMS/o/openssl-1.0.1e-42.fc21.src.rpm
cd ~/redhat/SOURCES/
wget http://www.openssl.org/source/openssl-1.0.1g.tar.gz
wget http://www.openssl.org/source/openssl-1.0.1g.tar.gz.sha1
openssl dgst -sha1 openssl-1.0.1g.tar.gz ; cat openssl-1.0.1g.tar.gz.sha1
现在应用旧的 secure_getenv 语法并应用补丁:
cd ~/redhat/SOURCES/
sed -i -e "s/secure_getenv/__secure_getenv/g" openssl-1.0.1e-env-zlib.patch
cd ~/redhat/SPECS/
wget http://www.ptudor.net/linux/openssl/resources/openssl-spec-patricktudor-fc20-19.diff
patch -p1 < openssl-spec-patricktudor-latest.diff
运行构建:
time rpmbuild -ba openssl.spec
希望一切顺利,让我们安装新的 RPM:
cd ~/redhat/RPMS/x86_64/
sudo rpm -Fvh openssl-1.0.1g-*.rpm openssl-libs-1.0.1g-*.rpm openssl-devel-1.0.1g-*.rpm
确保它确实有效:
openssl ciphers -v 'TLSv1.2' | head -4
我网站上面的链接有更多详细信息,但这应该是一个很好的起点。
谢谢,享受。
20130819:生皮版本从 14 增加到 15。
20130831:fc20 修订版从 15 增加到 18。
20130906:fc20 修订版从 18 增加到 19。
20140408:1.0.1g之后的任何内容都可以访问我的网站。
答案2
我在 ServerFault 上找到了这个链接,其中介绍了 TLSv1.2 的设置。问答题为:Apache 上的 SSL/TLS 1.2 和 openssl 1.0.1。
这些链接涵盖 TLSv1.2 信息:
httpd.conf
假设您有 httpd v2.2 或更高版本以及 openssl 1.0.1c 或更高版本,则应在您的应启用 TLSv1.2 中包含以下内容。
SSLProtocol all -SSLv2
您仍然需要设置 CipherSuites。这就是令人困惑的地方。根据上面的文档,唯一的强制密码套件对于 TLS 1.2 是TLS_RSA_WITH_AES_128_CBC_SHA
:
Appendix C. Cipher Suite Definitions
Cipher Suite Key Cipher Mac
Exchange
TLS_RSA_WITH_AES_128_CBC_SHA RSA AES_128_CBC SHA
这表示服务器必须提供用于密钥交换的 RSA 证书,并且密码应为 AES_128_CBC 和 Mac SHA。
从 httpd mod_ssl 文档来看,这转换为:
SSLCipherSuite aRSA:kRSA:AES128-CBC:SHA
您可以阅读有关httpd 中的 SSLCipherSuites,在这里。
过去我使用过我的博客文章,标题为:在 Apache 中锁定 SSLv2为 TLSv1.1 执行此操作。该页面上的所有内容都应该仍然相关,您需要做的就是更改 CipherSuites + versions openssl
。
答案3
我最近正在为一位朋友在 POODLE 的背景下调查同样的问题。
如果您在 epel 上使用 2013 年 10 月起的最新 (AORN) httpd24 版本,则默认情况下您将获得 TLSv1.0 和 TLSv1.1。然而,一旦您将 apache 中的 SSLProtocol 设置为其他任何合理的值,您就会丢失这些协议,因为 httpd24 显然是针对 openssl 标头构建的。
实际上,这意味着如果您尝试显式禁用 SSlv2 或 SSlv3,则会隐式禁用 TLSv11 和 TLSv12。
当您下降到它知道的恰好 1 个协议时,这是 mod_ssl 的一个不幸的怪癖。
RedHat“软件集合”中的 httpd24 是最近构建的,不会遇到此问题,它可能是针对更高版本的 openssl 构建的(或者有一个简单的自定义补丁)