2014-06-11 60 views
9

我試圖使用Node.js,Express.js和TLS(1.2)在客戶端和服務器之間創建一個非常安全的連接。require('https')vs require('tls')

我認爲我的問題在於理解TLS的實際內容 - 意味着什麼正在交換,何時以及如何由誰。

無論如何,我搜索互聯網就像一個瘋子(瘋狂的人),試圖找出以下幾點:

  • 是什麼var tls = require('tls');調用?
  • var https = require('https');是怎麼調用的?

當使用另一個節點作爲客戶端時,我可以得到tls的工作,但在這種情況下,客戶端將是瀏覽器中的用戶。我可以同時使用瀏覽器還是僅https?

謝謝

+1

'https' lib使用'tls'來傳輸。用於會話目的的TLS只是SSL。如果您的用戶是瀏覽器,只需使用HTTPS即可。 – Joe

+0

喬感謝評論。現在更清楚 - 艾利的迴應類型將所有事情都放在了角度。乾杯。 – sidewaiise

回答

31

讓我們從TLS開始吧。

TLS是一種提供客戶端和服務器之間安全連接的方式。它通過爲客戶端和服務器交換密鑰提供一種安全的方式來實現這一點,以便他們可以使用公鑰密碼術來保護其傳輸。確切的機制發現here,但這對於這個答案並不重要。

現在,什麼是https?首先,我們來談談HTTP。 HTTP是一種協議,用於定義Web服務器和客戶端如何對話並交換網頁或數據。基本上,它包括來自客戶端的請求,並且服務器用數字消息,頭部和(可選)身體作出響應。如果你對編寫網頁很熟悉,這很明顯。

現在,最後,什麼是HTTPS? HTTPS是使用TLS保護數據的HTTP版本。這意味着客戶端和服務器可以使用它們以前使用的相同協議,並使用加密方式進行打包。

現在,讓我們在node.js中討論這些問題。

當您使用require('tls')時,您只使用加密層,而沒有定義協議。對於任何不期待精確協議的任何事物,例如您的其他node.js客戶端,這都可以正常工作。

當您使用require('https')時,您特別使用HTTP over TLS。 https module 實際上是 tls module的子類! (糟糕,實際上,https.Servertls.Server的一個子類)這意味着無論何時使用https模塊,您也使用tls之一。

現在,最後一個問題:瀏覽器需要什麼?如果你一直在關注我所說的一切,你可以看到瀏覽器需要https。事實上,您今天訪問的大多數網頁都可能已經超過了https。

+1

艾利,謝謝你的詳細解答:) – sidewaiise

+1

大部分我已經知道了,但它是TLS存在和任意加密機制與具有特定協議的金字塔的區別事實。 – sidewaiise