共计 2957 个字符,预计需要花费 8 分钟才能阅读完成。
OpenSSL 心血漏洞吵的风生水起的。起初,公司几台 rds 的小业务机被通知修补 OpenSSL 漏洞,这几台机器都是单独小业务,当时停掉,找了个简单的文档便将它升级 OK(有的是 nginx,有的是 resin)。修补完成重启服务后 OK。
公司的主业务还有一台总的入口机(LVS 撑的 2 台),由于这台机器比较重要,13 年有过一次修补 OpenSSL 的漏洞也出过问题,(老机器呀,有换环境的打算),所以这次比较担心。但是上周突然有客服反映客户浏览本地服务时浏览器警报业务有问题,致使不得不立马来解决这个问题(升级 OpenSSL)。
相关阅读 :
OpenSSL TLS 心跳读远程信息泄露漏洞 (CVE-2014-0160) http://www.linuxidc.com/Linux/2014-04/99741.htm
OpenSSL 严重 bug 允许攻击者读取 64k 内存,Debian 半小时修复 http://www.linuxidc.com/Linux/2014-04/99737.htm
OpenSSL“heartbleed”的安全漏洞 http://www.linuxidc.com/Linux/2014-04/99706.htm
通过 OpenSSL 提供 FTP+SSL/TLS 认证功能,并实现安全数据传输 http://www.linuxidc.com/Linux/2013-05/84986.htm
——————————————————————————–
环境查看及检测
PS:Apache 编译好的 $homedir/build/config.nice 文件里面记录了之前编译的参数。
“./configure” \
“–with-ldap” \
“–enable-mods-shared=all ssl ldap cache proxy authn_alias file_cache authnz_ldap charset_lite dav_lock cache_disk” \
“–with-included-apr” \
“–with-ssl=/usr/local/openssl/”(第一次这里出了问题)\
“$@”
然后重新编译完之后使用网站检测,还是继续报存在 OpenSSL 漏洞。。(开始用的 360。然后觉得被他坑了,然后又找了个网站。)
https://lastpass.com/heartbleed (由于这是事后补的文章,所以我拿了个朋友的网站来演示,他的同样是这样的问题。)
然后瞬间明白了点什么。
这里出现了 2 个问题
-with-ssl=/usr/local/openssl/ 是老的 OpenSSL 的路径。
当指定了新的路径的时候,Apache 报错。(由于这是事后文章报错信息没记录。大概是这样的:缺少 apr-util 依赖的相关的 ldap.so**** 大概意思是你编译 apr-util 的时候就没有把他依赖的 ldap 编译进去)
得了。不绕了,直接开始正确的流程走吧。
一、安装 OpenSSL
升级步骤
0. 首先通过 #openssl version –a 查看系统中存在的 OpenSSL 版本号
1. 通过 #wget http://www.openssl.org/source/openssl-1.0.1g.tar.gz 获得源码包
2. 安装 openssl
tar xf openssl-1.0.1g.tar.gz
cd openssl-1.0.1g
./config -DOPENSSL_NO_HEARTBEATS shared zlib
make
make install
mv /usr/bin/openssl /usr/bin/openssl.OFF
mv /usr/include/openssl /usr/include/openssl.OFF
ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/ssl/include/openssl /usr/include/openssl
3 配置库文件搜索路径
echo “/usr/local/ssl/lib” >> /etc/ld.so.conf
#ldconfig -v
4 查看 openssl 版本号,验证安装正确性
#openssl version -a
可以看到是新装好的版本。
-DOPENSSL_NO_HEARTBEATS(禁止心跳信息)
二、编译安装 apr apr-util
特别需要注意,我下边会直接 yum 安装 ldap 相关的组件,原因在于最后编译 Apache 会依赖 apr-util 里面的 ldap 库,所以编译 apr-util 的时候也需要指定。
yum install apr apr-devel apr-util apr-util-devel apr-util-ldap (这样做是为了解决 apr-util 依赖 ladp 的问题,因为我找不到缺少了具体哪个库)
tar xf apr-1.4.6.tar.bz2
cd apr-1.4.6
./configure –prefix=/usr/local/apr
make && make install
cd ..
tar xf apr-util-1.5.2.tar.bz2
cd apr-util-1.5.2
./configure –prefix=/usr/local/apr-util –with-apr=/usr/local/apr –with-ldap
make && make install
三、编译安装 Apache
$ tar xf httpd-2.4.4.tar.bz2
$ cd httpd-2.4.4
$ ./configure –with-ldap –enable-mods-shared=”all ssl ldap cache proxy authn_alias file_cache authnz_ldap charset_lite dav_lock cache_disk” –with-apr=/usr/local/apr –with-apr-util=/usr/local/apr-util –with-ssl=/usr/local/ssl/ (需要注意 ssl 这个地方的路径)
$ make && make install
最后补充
操作前我没有压缩去备份 Apache 原先的文件(日志也打在里面)。
我将它 mv 过去,然后最后 在编译好的目录下删掉 conf htdocs logs 三个目录,然后将备份的目录中的这三个目录 mv 过来。最便捷(当然你可以复制 logs 的目录结构过来也行)
——————————————————————————–
大概需要注意的就是 ldap 依赖的。
其中我在编译做 nginx OpenSSL 升级的时候,有一个也是重新编译,好像是环境因素(时间隔太久了),在编译的时候,直接指定了 OpenSSL 的源码文件,让 nginx 将需要的 OpenSSL 的一些依赖的库重新编译了一次。
建议升级线上环境的时候,在测试环境测试完,然后做成 rpm 包,然后直接线上 install。如果本地有自己的 yum 环境,那更是极好的。
OpenSSL 的详细介绍 :请点这里
OpenSSL 的下载地址 :请点这里