HTTPS 和 OpenSSL 是什麼關係?

最近沸沸揚揚的 OpenSSL「心臟流血」漏洞,影響很大
https 與 openssl 的關係到底怎麼樣? 是不是只要https 就一定是用了openssl協議?如何判斷呢?


HTTPS是一種協議,等於HTTP+TLS(由於歷史原因,SSL3.0之後就被TLS1.0替代了)。
openssl是一套開源工具集,主要有兩個特性:

  1. 實現了ssl2,ssl3,TLSv1,TLSv1.1,TLSv1.2協議。
  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的關係


推薦樓主可以看兩本書:

  1. 《HTTP權威指南》 吉爾利 (David Gourley), Brian Totty, Marjorie Sayer, Sailu Reddy, 等, 陳涓, 趙振平【摘要 書評 試讀】圖書《HTTP權威指南》 吉爾利 (David Gourley), Brian Totty, Marjorie Sayer, Sailu Reddy, 等, 陳涓, 趙振平【摘要 書評 試讀】圖書
  2. 《圖靈程序設計叢書:圖解HTTP》 上野宣, 於均良【摘要 書評 試讀】圖書《圖靈程序設計叢書:圖解HTTP》 上野宣, 於均良【摘要 書評 試讀】圖書

1,ssl是位於傳輸層(例如tcp)上層的協議,用於加密傳輸層上層數據。SSL有一套RFC來定義,就像TCP有一套RFC來定義一樣。

2,OpenSSL是SSL(RFC定義)的一種實現,另外的實現還有谷歌以及亞馬遜發起的項目,但是OpenSSL應用最為廣泛。

3,當HTTP位於傳輸層之上,就是明文傳輸。當HTTP位於SSL層之上就是加密傳輸,就形成了統稱的HTTPS=SSL+HTTP。


HTTPS是協議,百度上有特別多的詳細解釋

openSSL是工具,只要關閉SSL3就可以封堵漏洞了。


推薦閱讀:

如何看待大疆漏洞獎勵計劃 ,信息安全研究員疑似遭威脅,拒絕獎勵協議並準備公開獲得的信息?

TAG:HTTPS | 加密 | OpenSSL | 心臟流血 | 安全漏洞 |