OpenSSL心血漏洞吵的風生水起的。。
起初,公司幾台rds的小業務機被通知修補OpenSSL漏洞,這幾台機器都是單獨小業務,當時停掉,找了個簡單的文檔便将它更新OK(有的是nginx,有的是resin)。修補完成重新開機服務後OK。
公司的主業務還有一台總的入口機(LVS撐的2台),由于這台機器比較重要,13年有過一次修補OpenSSL的漏洞也出過問題,(老機器呀,有換環境的打算),是以這次比較擔心。但是上周突然有客服反映客戶浏覽本地服務時浏覽器警報業務有問題,緻使不得不立馬來解決這個問題(更新OpenSSL)。
環境檢視及檢測
PS:Apache編譯好的$homedir/build/config.nice檔案裡面記錄了之前編譯的參數。
1
2
3
4
5
6
<code>"./configure"</code> <code>\</code>
<code>"--with-ldap"</code> <code>\</code>
<code>"--enable-mods-shared=all ssl ldap cache proxy authn_alias file_cache authnz_ldap charset_lite dav_lock cache_disk"</code> <code>\</code>
<code>"--with-included-apr"</code> <code>\</code>
<code>"--with-ssl=/usr/local/openssl/"</code> <code>(第一次這裡出了問題)\</code>
<code>"$@"</code>
然後重新編譯完之後使用網站檢測,還是繼續報存在OpenSSL漏洞。。(開始用的360。然後覺得被他坑了,然後又找了個網站。)
<a href="http://s3.51cto.com/wyfs02/M00/24/B1/wKiom1NUurKw4lPoAAFM1S11YLc290.jpg" target="_blank"></a>
然後瞬間明白了點什麼。
這裡出現了2個問題
-with-ssl=/usr/local/openssl/是老的OpenSSL的路徑。
當指定了新的路徑的時候,Apache報錯。(由于這是事後文章報錯資訊沒記錄。大概是這樣的:缺少apr-util依賴的相關的ldap.so****大概意思是你編譯apr-util的時候就沒有把他依賴的ldap編譯進去)
得了。不繞了,直接開始正确的流程走吧。
一、安裝OpenSSL
更新步驟
0. 首先通過 #openssl version –a 檢視系統中存在的OpenSSL版本号
2. 安裝openssl
7
8
9
<code>tar</code> <code>xf openssl-1.0.1g.</code><code>tar</code><code>.gz</code>
<code>cd</code> <code>openssl-1.0.1g</code>
<code>.</code><code>/config</code> <code>-DOPENSSL_NO_HEARTBEATS shared zlib</code>
<code>make</code>
<code>make</code> <code>install</code>
<code>mv</code> <code>/usr/bin/openssl</code> <code>/usr/bin/openssl</code><code>.OFF</code>
<code>mv</code> <code>/usr/include/openssl</code> <code>/usr/include/openssl</code><code>.OFF</code>
<code>ln</code> <code>-s </code><code>/usr/local/ssl/bin/openssl</code> <code>/usr/bin/openssl</code>
<code>ln</code> <code>-s </code><code>/usr/local/ssl/include/openssl</code> <code>/usr/include/openssl</code>
3 配置庫檔案搜尋路徑
<code>echo</code> <code>"/usr/local/ssl/lib"</code> <code>>> </code><code>/etc/ld</code><code>.so.conf</code>
<code>#ldconfig -v</code>
4 檢視openssl 版本号,驗證安裝正确性
#openssl version -a
可以看到是新裝好的版本。
-DOPENSSL_NO_HEARTBEATS (禁止心跳資訊)
二、編譯安裝apr apr-util
特别需要注意,我下邊會直接yum安裝ldap相關的元件,原因在于最後編譯Apache會依賴apr-util裡面的ldap庫,是以編譯apr-util的時候也需要指定。
<code>yum </code><code>install</code> <code>apr apr-devel apr-util apr-util-devel apr-util-ldap ( 這樣做是為了解決apr-util依賴ladp的問題,因為我找不到缺少了具體哪個庫)</code>
<code>tar</code> <code>xf apr-1.4.6.</code><code>tar</code><code>.bz2</code>
<code>cd</code> <code>apr-1.4.6</code>
<code>.</code><code>/configure</code> <code>--prefix=</code><code>/usr/local/apr</code>
<code>make</code> <code>&& </code><code>make</code> <code>install</code>
<code>cd</code> <code>..</code>
<code>tar</code> <code>xf apr-util-1.5.2.</code><code>tar</code><code>.bz2</code>
<code>cd</code> <code>apr-util-1.5.2</code>
<code> </code><code>.</code><code>/configure</code> <code>--prefix=</code><code>/usr/local/apr-util</code> <code>--with-apr=</code><code>/usr/local/apr</code> <code>--with-ldap</code>
<code> </code><code>make</code> <code>&& </code><code>make</code> <code>install</code>
三、編譯安裝Apache
<code>$ </code><code>tar</code> <code>xf httpd-2.4.4.</code><code>tar</code><code>.bz2</code>
<code>$ </code><code>cd</code> <code>httpd-2.4.4</code>
<code>$ .</code><code>/configure</code> <code>--with-ldap --</code><code>enable</code><code>-mods-shared=</code><code>"all ssl ldap cache proxy authn_alias file_cache authnz_ldap charset_lite dav_lock cache_disk"</code> <code>--with-apr=</code><code>/usr/local/apr</code> <code>--with-apr-util=</code><code>/usr/local/apr-util</code> <code>--with-ssl=</code><code>/usr/local/ssl/</code> <code>(需要注意ssl這個地方的路徑)</code>
<code>$ </code><code>make</code> <code>&& </code><code>make</code> <code>install</code>
最後補充
操作前我沒有壓縮去備份Apache原先的檔案(日志也打在裡面)。
我将它mv過去,然後最後 在編譯好的目錄下删掉conf htdocs logs 三個目錄,然後将備份的目錄中的這三個目錄mv過來。最便捷(當然你可以複制logs的目錄結構過來也行)
大概需要注意的就是ldap依賴的。
其中我在編譯做nginx OpenSSL更新的時候,有一個也是重新編譯,好像是環境因素(時間隔太久了),在編譯的時候,直接指定了OpenSSL的源碼檔案,讓nginx将需要的OpenSSL的一些依賴的庫重新編譯了一次。
建議更新線上環境的時候,在測試環境測試完,然後做成rpm包,然後直接線上install。如果本地有自己的yum環境,那更是極好的。
本文轉自 陳延宗 51CTO部落格,原文連結:http://blog.51cto.com/407711169/1399556,如需轉載請自行聯系原作者