背景:
openssl全稱為secure socket layer,是netscape所研發,利用資料加密(encryption)作技術保障在internet上資料傳輸的安全。可確定資料在網絡上的傳輸不會被竊聽及截取。
當然,openssl是一個強大的密碼庫,我們在使用ssl協定的時候不一定非得采用openssl,不過目前基本上都是用的openssl,因為它更安全,使用起來也更簡單。
在近期網際網路安全協定openssl v1.0.1到1.0.1f的密碼算法庫中發現了一個非常嚴重bug(cve-2014-0160),該bug允許攻擊者讀取存在bug的系統的64k處理記憶體,暴露加密流量的密鑰,使用者的名字和密碼,以及通路的内容。這個漏洞被稱之為heartbleed,心髒流血。
據solidot 在april 7報道,openssl已經釋出了1.0.1g修複bug,debian發行版也在半小時修複bug,fedora釋出了一個權宜的修正方案。該bug在2011年引入openssl中,使用openssl 0.9.8的發現版本不受影響,但debian wheezy、ubuntu 12.04.4、centos 6.5、fedora 18、suse 12.2、openbsd 5.4、freebsd 8.4和netbsd 5.0.2之後的版本都收到影響。如果你的允許的系統有如上集中,建議将更新檔修複到1.0.1g或以上版本。
修複建議:
如果有使用openssl 1.0.1到openssl1.0.1f的版本建議更新到openssl1.0.1g或最新的openssl1.0.1h。
使用depenssl_no_heartbeats參數重新編譯低版本的openssl以禁用heartbleed子產品。
删除openssl元件。
【更新openssl修複heartbleed漏洞】
由于我們現在用的基本上都是rhel 5.8或oel5.8,其openssl的版本為openssl0.9.8e,是不存在該漏洞的,不過有些新上的項目可能會涉及到,當然他們對于修複這個漏洞的方法都是一樣。
詳細步驟如下:
1、 檢視作業系統版本及openssl版本
<a href="http://my.oschina.net/moooofly/blog/354483#">?</a>
1
2
3
4
5
<code>[root@pru1~]</code><code># uname -a</code>
<code>linuxpru1 2.6.18-308.el5</code><code>#1 smp fri jan 27 17:17:51 est 2012 x86_64 x86_64 x86_64gnu/linux</code>
<code> </code>
<code>[root@pru1~]</code><code># openssl version</code>
<code>openssl0.9.8e-fips-rhel5 01 jul 2008</code>
3、 解壓縮編譯安裝
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
<code>[root@pru1openssl]</code><code># ls</code>
<code>openssl-1.0.1h.</code><code>tar</code><code>.gz</code>
<code>[root@pru1openssl]</code><code># tar -zxf openssl-1.0.1h.tar.gz</code>
<code>openssl-1.0.1h openssl-1.0.1h.</code><code>tar</code><code>.gz</code>
<code>[root@pru1openssl]</code><code># cd openssl-1.0.1h</code>
<code>[[email protected]]</code><code># ls</code>
<code>acknowledgments config e_os2.h install.djgpp install.w64 makefile.org openssl.doxy readme.asn1 tools</code>
<code>apps configure e_os.h install.macos install.wce makefile.shared openssl.spec readme.engine util</code>
<code>bugs crypto faq install.nw license makevms.com os2 shlib vms</code>
<code>certs demos include install.os2 macos ms perl ssl</code>
<code>changes doc install install.vms makefile netware problems </code><code>test</code>
<code>changes.ssleay engines </code><code>install</code><code>.com install.w32 makefile.bak news readme </code><code>times</code>
<code>[[email protected]]</code><code># ./config shared zlib</code>
<code>operatingsystem: x86_64-whatever-linux2</code>
<code>configuringfor linux-x86_64</code>
<code> </code><code>no-ec_nistp_64_gcc_128 [default] openssl_no_ec_nistp_64_gcc_128 (skip</code><code>dir</code><code>)</code>
<code> </code><code>no-gmp [default] openssl_no_gmp (skip</code><code>dir</code><code>)</code>
<code> </code><code>no-jpake [experimental] openssl_no_jpake (skipdir)</code>
<code> </code><code>no-krb5 [krb5-flavor not specified]openssl_no_krb5</code>
<code> </code><code>no-md2 [default] openssl_no_md2 (skip</code><code>dir</code><code>)</code>
<code> </code><code>no-rc5 [default] openssl_no_rc5 (skip</code><code>dir</code><code>)</code>
<code> </code><code>no-rfc3779 [default] openssl_no_rfc3779 (skip</code><code>dir</code><code>)</code>
<code> </code><code>no-sctp [default] openssl_no_sctp (skip</code><code>dir</code><code>)</code>
<code> </code><code>no-store [experimental] openssl_no_store (skipdir)</code>
<code> </code><code>no-zlib-dynamic [default]</code>
<code>ismk1mf=0</code>
<code>cc =</code><code>gcc</code>
<code>cflag =-fpic -dopenssl_pic -dzlib-dopenssl_threads -d_reentrant -ddso_dlfcn -dhave_dlfcn_h -wa,--noexecstack-m64 -dl_endian -dtermio -o3 -wall -dopenssl_ia32_sse2 -dopenssl_bn_asm_mont-dopenssl_bn_asm_mont5 -dopenssl_bn_asm_gf2m -dsha1_asm -dsha256_asm-dsha512_asm -dmd5_asm -daes_asm -dvpaes_asm -dbsaes_asm -dwhirlpool_asm-dghash_asm</code>
<code>ex_libs =-ldl -lz</code>
<code>cpuid_obj =x86_64cpuid.o</code>
<code>bn_asm =x86_64-</code><code>gcc</code><code>.o x86_64-mont.ox86_64-mont5.o x86_64-gf2m.o modexp512-x86_64.o</code>
<code>des_enc =des_enc.o fcrypt_b.o</code>
<code>aes_enc =aes-x86_64.o vpaes-x86_64.obsaes-x86_64.o aesni-x86_64.o aesni-sha1-x86_64.o</code>
<code>bf_enc =bf_enc.o</code>
<code>cast_enc =c_enc.o</code>
<code>rc4_enc =rc4-x86_64.o rc4-md5-x86_64.o</code>
<code>rc5_enc =rc5_enc.o</code>
<code>md5_obj_asm =md5-x86_64.o</code>
<code>sha1_obj_asm =sha1-x86_64.o sha256-x86_64.osha512-x86_64.o</code>
<code>rmd160_obj_asm=</code>
<code>cmll_enc =cmll-x86_64.o cmll_misc.o</code>
<code>modes_obj =ghash-x86_64.o</code>
<code>engines_obj =</code>
<code>processor =</code>
<code>ranlib =</code><code>/usr/bin/ranlib</code>
<code>arflags =</code>
<code>perl =</code><code>/usr/bin/perl</code>
<code>sixty_four_bit_longmode</code>
<code>des_unrollused</code>
<code>des_intused</code>
<code>rc4_chunkis unsigned long</code>
<code>e_os2.h=> include</code><code>/openssl/e_os2</code><code>.h</code>
<code>makinglinks</code><code>in</code> <code>crypto...</code>
<code>make</code><code>[1]:entering directory `</code><code>/root/openssl/openssl-1</code><code>.0.1h</code><code>/crypto</code><code>'</code>
<code>crypto.h=> ..</code><code>/include/openssl/crypto</code><code>.h</code>
<code>opensslv.h=> ..</code><code>/include/openssl/opensslv</code><code>.h</code>
<code>opensslconf.h=> ..</code><code>/include/openssl/opensslconf</code><code>.h</code>
<code>ebcdic.h=> ..</code><code>/include/openssl/ebcdic</code><code>.h</code>
<code>symhacks.h=> ..</code><code>/include/openssl/symhacks</code><code>.h</code>
<code>ossl_typ.h=> ..</code><code>/include/openssl/ossl_typ</code><code>.h</code>
<code>makinglinks</code><code>in</code> <code>crypto</code><code>/objects</code><code>...</code>
<code>………….</code>
<code>configuredfor linux-x86_64.</code>
<code>[[email protected]]</code><code># make</code>
<code>makingall</code><code>in</code> <code>crypto...</code>
<code>(</code><code>echo</code><code>"#ifndef mk1mf_build"</code><code>; \</code>
<code> </code><code>echo</code> <code>' /* auto-generated by crypto/makefile for crypto/cversion.c */'</code><code>; \</code>
<code> </code><code>echo</code> <code>' #define cflags "gcc -fpic -dopenssl_pic -dzlib -dopenssl_threads-d_reentrant -ddso_dlfcn -dhave_dlfcn_h -wa,--noexecstack -m64 -dl_endian-dtermio -o3 -wall -dopenssl_ia32_sse2 -dopenssl_bn_asm_mont-dopenssl_bn_asm_mont5 -dopenssl_bn_asm_gf2m -dsha1_asm -dsha256_asm-dsha512_asm -dmd5_asm -daes_asm -dvpaes_asm -dbsaes_asm -dwhirlpool_asm-dghash_asm"'</code><code>; \</code>
<code> </code><code>echo</code> <code>' #define platform "linux-x86_64"'</code><code>; \</code>
<code> </code><code>echo</code> <code>" #define date \"`lc_all=c lc_time=cdate`\""</code><code>; \</code>
<code> </code><code>echo</code> <code>'#endif'</code> <code>) >buildinf.h</code>
<code>gcc</code> <code>-i.-i.. -i..</code><code>/include</code> <code>-fpic -dopenssl_pic-dzlib -dopenssl_threads -d_reentrant -ddso_dlfcn -dhave_dlfcn_h-wa,--noexecstack -m64 -dl_endian -dtermio -o3 -wall -dopenssl_ia32_sse2-dopenssl_bn_asm_mont -dopenssl_bn_asm_mont5 -dopenssl_bn_asm_gf2m -dsha1_asm-dsha256_asm -dsha512_asm -dmd5_asm -daes_asm -dvpaes_asm -dbsaes_asm-dwhirlpool_asm -dghash_asm -c -ocryptlib.o cryptlib.c</code>
<code>cryptlib.c:in</code><code>function</code> <code>‘openssl_ia32cap_loc’:</code>
<code>cryptlib.c:677:warning: dereferencing</code><code>type</code><code>-punned pointer will</code><code>break</code> <code>strict-aliasing rules</code>
<code>gcc</code> <code>-i.-i.. -i..</code><code>/include</code> <code>-fpic -dopenssl_pic-dzlib -dopenssl_threads -d_reentrant -ddso_dlfcn -dhave_dlfcn_h-wa,--noexecstack -m64 -dl_endian -dtermio -o3 -wall -dopenssl_ia32_sse2-dopenssl_bn_asm_mont -dopenssl_bn_asm_mont5 -dopenssl_bn_asm_gf2m -dsha1_asm-dsha256_asm -dsha512_asm -dmd5_asm -daes_asm -dvpaes_asm -dbsaes_asm-dwhirlpool_asm -dghash_asm -c -o mem.omem.c</code>
<code>gcc</code> <code>-i.-i.. -i..</code><code>/include</code> <code>-fpic -dopenssl_pic-dzlib -dopenssl_threads -d_reentrant -ddso_dlfcn -dhave_dlfcn_h-wa,--noexecstack -m64 -dl_endian -dtermio -o3 -wall -dopenssl_ia32_sse2-dopenssl_bn_asm_mont -dopenssl_bn_asm_mont5 -dopenssl_bn_asm_gf2m -dsha1_asm-dsha256_asm -dsha512_asm -dmd5_asm -daes_asm -dvpaes_asm -dbsaes_asm-dwhirlpool_asm -dghash_asm -c -omem_dbg.o mem_dbg.c</code>
<code>…………….</code>
<code>[[email protected]]</code><code># make install</code>
<code>…….</code>
4、 将新編譯的openssl替換系統老版本的
<code>[[email protected]]</code><code># rm -rf /usr/bin/openssl</code>
<code>[[email protected]]</code><code># rm -rf /usr/include/openssl/</code>
<code>[[email protected]]</code><code># ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl</code>
<code>[[email protected]]</code><code># ln -s /usr/local/ssl/include/openssl/ /usr/include/openssl</code>
5、 配置檔案搜尋路徑
<code>[[email protected]]</code><code># echo "/usr/local/ssl/lib/" >> /etc/ld.so.conf</code>
<code>[[email protected]]</code><code># ldconfig -v |grep openssl</code>
<code> </code><code>libgnutls-openssl.so.13 ->libgnutls-openssl.so.13.0.6</code>
6、 檢視安裝完成後的最新版本
<code>[[email protected]]</code><code># openssl version</code>
<code>openssl1.0.1h 5 jun 2014</code>
<code>[[email protected]]</code><code># openssl version -a</code>
<code>builton: sun jun 8 09:05:39 cst 2014</code>
<code>platform:linux-x86_64</code>
<code>options: bn(64,64) rc4(16x,int) des(idx,cisc,16,int)idea(int) blowfish(idx)</code>
<code>compiler:</code><code>gcc</code> <code>-fpic -dopenssl_pic -dzlib -dopenssl_threads -d_reentrant -ddso_dlfcn-dhave_dlfcn_h -wa,--noexecstack -m64 -dl_endian -dtermio -o3 -wall-dopenssl_ia32_sse2 -dopenssl_bn_asm_mont -dopenssl_bn_asm_mont5-dopenssl_bn_asm_gf2m -dsha1_asm -dsha256_asm -dsha512_asm -dmd5_asm -daes_asm-dvpaes_asm -dbsaes_asm -dwhirlpool_asm -dghash_asm</code>
<code>openssldir:</code><code>"/usr/local/ssl"</code>
<code>[[email protected]]</code><code>#</code>
7、 至此已全部完成openssl的更新工作