HTTPS 和 OpenSSL 是什麼關係?
最近沸沸揚揚的 OpenSSL「心臟流血」漏洞,影響很大
https 與 openssl 的關係到底怎麼樣? 是不是只要https 就一定是用了openssl協議?如何判斷呢?
HTTPS是一種協議,等於HTTP+TLS(由於歷史原因,SSL3.0之後就被TLS1.0替代了)。
openssl是一套開源工具集,主要有兩個特性:
- 實現了ssl2,ssl3,TLSv1,TLSv1.1,TLSv1.2協議。
- 實現目前常用的加密演算法。
沒有一個非常精準的方法來判斷HTTPS是否使用openssl,但是根據網站返回的server類型,可以大致估計是否使用了openssl,比如如果使用apache或者nginx,那麼肯定是使用了openssl。保守估計至少70%以上的網站是使用openssl的。而windows系列的伺服器包括IIS,windows server等都是使用schannel,沒有使用openssl,不會受heartbleed影響。
HTTPS與OpenSSL就是iPhone與富士康的關係。
無奈的漏洞修補方法
SSL 3.0 Poodle漏洞修復方法
谷歌於本周二披露了一個存在於 SSL 3.0 版本當中的安全漏洞。
詳細信息請訪問:
https://www.openssl.org/~bodo/ssl-poodle.pdf
什麼是SSL3.0
Poodle漏洞?
SSL協議由美國 NetScape公司開發的,
1996年發布了V3.0版本。SSL 3.0 已經存在 15 年之久,目前絕大多數瀏覽器都支持該版本。通常用戶的瀏覽器都使用新版本的安全協議與伺服器進行連接,為了保持兼容性,當瀏覽器安全協議連接失敗的時候,就會轉而嘗試老版本的安全協議進行連接,其中就包括SSL 3.0。
Poodle攻擊的原理,就是黑客故意製造安全協議連接失敗的情況,觸發瀏覽器的降級使用 SSL 3.0,然後使用特殊的手段,從 SSL 3.0 覆蓋的安全連接下提取到一定位元組長度的隱私信息。
如何防範SSL3.0-Poodle漏洞?
建議您手動關閉客戶端SSLv3支持;或者關閉伺服器SSLv3支持;或者兩者全部關閉,即可有效防範Poodle漏洞對您造成的影響。
關閉伺服器SSLv3支持:
Nginx:
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256
SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-RC4-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-SHA:DHE
RSA-AES128-SHA:RC4-SHA:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!DSS:!PKS;
ssl_session_timeout 5m;
ssl_session_cache builtin:1000 shared:SSL:10m;
Apache:
SSLProtocol all -SSLv2 -SSLv3
SSLHonorCipherOrder on
SSLCipherSuite ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256
SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-RC4-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-SHA:DHE
RSA-AES128-SHA:RC4-SHA:!aNULL:!MD5:!DSS
關閉客戶端SSLv3支持:
谷歌已表示chorme瀏覽器已經通過技術手段屏蔽瀏覽器自動降級至SSL3.0鏈接。手動關閉掉 SSL 3.0 支持的方法。
Windows 用戶:
1)完全關閉 Chrome 瀏覽器
2)複製一個平時打開 Chrome 瀏覽器的快捷方式
3)在新的快捷方式上右鍵點擊,進入屬性
4)在「目標」後面的空格中欄位的末尾輸入以下命令 --ssl-version-min=tls1
Mac OS X 用戶:
1)完全關閉 Chrome 瀏覽器
2)找到本機自帶的終端(Terminal)
3)輸入以下命令:/Applications/Google
Chrome.app/Contents/MacOS/Google Chrome --ssl-version-min=tls1
Linux 用戶:
1)完全關閉 Chrome 瀏覽器
2)在終端中輸入以下命令:google-chrome—ssl-version-min=tls1
Firefox
瀏覽器用戶可以進入關於:設置,方法是在地址欄輸入 about:config,然後將 security.tls.version.min 調至 1。
設置方法引用自SSLv3 - Poodle 攻擊與防護
HTTPS是應用層協議,是跑在鏈路層的TLS協議之上,而openssl是實現tls最普遍的軟體之一
OpenSSL是HTTPS協議的一個開源實現,在Linux和開源領域應用極為廣泛,大體上如果你的伺服器是Linux,或者雖然不是Linux但Web伺服器是Apache的,其HTTPS協議實現幾乎可以肯定就是OpenSSL。
但不是所有伺服器都用OpenSSL來實現HTTPS!Https~Http+SSL。Http協議是明文傳輸的。Https是Http的加密版。加密協議就是SSL協議。而OpenSSL是SSL協議的一個開源實現。因為成年早,開源,「進化」到今天,在安全性和效率上少有敵手。但是!代碼讓人看得很痛苦。
HTTPS與SSL的關係就像HTTP與TCP的關係
SSL與OpenSSL的關係就像操作系統與Windows的關係
推薦樓主可以看兩本書:
- 《HTTP權威指南》 吉爾利 (David Gourley), Brian Totty, Marjorie Sayer, Sailu Reddy, 等, 陳涓, 趙振平【摘要 書評 試讀】圖書《HTTP權威指南》 吉爾利 (David Gourley), Brian Totty, Marjorie Sayer, Sailu Reddy, 等, 陳涓, 趙振平【摘要 書評 試讀】圖書
- 《圖靈程序設計叢書:圖解HTTP》 上野宣, 於均良【摘要 書評 試讀】圖書《圖靈程序設計叢書:圖解HTTP》 上野宣, 於均良【摘要 書評 試讀】圖書
1,ssl是位於傳輸層(例如tcp)上層的協議,用於加密傳輸層上層數據。SSL有一套RFC來定義,就像TCP有一套RFC來定義一樣。
2,OpenSSL是SSL(RFC定義)的一種實現,另外的實現還有谷歌以及亞馬遜發起的項目,但是OpenSSL應用最為廣泛。
3,當HTTP位於傳輸層之上,就是明文傳輸。當HTTP位於SSL層之上就是加密傳輸,就形成了統稱的HTTPS=SSL+HTTP。
HTTPS是協議,百度上有特別多的詳細解釋
openSSL是工具,只要關閉SSL3就可以封堵漏洞了。
推薦閱讀: