HTTP學習三:HTTPS

HTTP學習三:HTTPS

1 HTTP安全問題

HTTP1.0/1.1在網絡中是明文傳輸的,所以會被黑客進行攻擊。

1.1 竊取數據

由於HTTP1.0/1.1是明文的,黑客很容易得到用戶的重要數據,好比密碼:

1.2 篡改數據

攻擊者能夠修改轉帳帳戶、金額等進行非法交易。

1.3 仿冒站點

攻擊者能夠經過仿冒HTTP站點,來同用戶進行交互,用戶不知道訪問的站點是否是真實的。

2 HTTPS

2.1 RSA簡單介紹

RSA算法基於一個十分簡單的數論事實:將兩個大質數相乘十分容易,可是想要對其乘積進行因式分解卻極其困難,所以能夠將乘積公開做爲加密密鑰。

A和B的加密通訊過程以下,反之也是一樣的原理:linux

  • B用RSA公鑰加密系統產生一對公私鑰。
  • 公鑰是公開的,私鑰只有本身持有:B把公鑰給A,本身保持私鑰
  • 使用公鑰加密的數據,只有私鑰才能解開:A用公鑰進行加密數據,加密後的數據只有B的私鑰能解開
  • 用私鑰進行簽名的數據,能夠用公鑰驗證:B把數據簽名後,A用公鑰驗證,證實數據是B發來的

2.2 HTTPS原理

HTTPS(全稱:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全爲目標的HTTP通道,簡單講是HTTP的安全版。即HTTP下加入SSL層,HTTPS的安全基礎是SSL,所以加密的詳細內容就須要SSL.(來自百度百科)

2.2.1 協議層次

2.2.2 加密過程

2.2.2.1 用戶請求

用戶在瀏覽器裏輸入一個https網址,而後鏈接到server的443端口

2.2.2.2 生成公私鑰

採用HTTPS協議的服務器必需要有一套數字證書,能夠本身製做,也能夠向組織申請。區別就是本身頒發的證書須要客戶端驗證經過,才能夠繼續訪問,而使用受信任的公司申請的證書則不會彈出提示頁面。這套證書其實就是一對公鑰和私鑰。若是對公鑰和私鑰不太理解,能夠想象成一把鑰匙和一個鎖頭,只是全世界只有你一我的有這把鑰匙,你能夠把鎖頭給別人,別人能夠用這個鎖把重要的東西鎖起來,而後發給你,由於只有你一我的有這把鑰匙,因此只有你才能看到被這把鎖鎖起來的東西。

2.2.2.3 傳送證書

這個證書其實就是公鑰,只是包含了不少信息,如證書的頒發機構,過時時間等等。

2.2.2.4 客戶端解析證書

這部分工做是有客戶端的TLS來完成的,首先會驗證公鑰是否有效,好比頒發機構,過時時間等等,若是發現異常,則會彈出一個警告框,提示證書存在問題。若是證書沒有問題,那麼就生成一個隨機值。而後用證書對該隨機值進行加密。就好像上面說的,把隨機值用鎖頭鎖起來,這樣除非有鑰匙,否則看不到被鎖住的內容。

2.2.2.5 傳送加密隨機值

這部分傳送的是用證書加密後的隨機值,目的就是讓服務端獲得這個隨機值,之後客戶端和服務端的通訊就能夠經過這個隨機值來進行加密解密了。

2.2.2.6 解密隨機值

服務端用私鑰解密後,獲得了客戶端傳過來的隨機值(私鑰),而後把內容經過該值進行對稱加密。所謂對稱加密就是,將信息和私鑰經過某種算法混合在一塊兒,這樣除非知道私鑰,否則沒法獲取內容,而正好客戶端和服務端都知道這個私鑰,因此只要加密算法夠彪悍,私鑰夠複雜,數據就夠安全。

2.2.2.7 傳輸加密信息

這部分信息是服務段用私鑰加密後的信息,能夠在客戶端被還原。

2.2.2.8 客戶端解密加密信息

客戶端用以前生成的私鑰解密服務段傳過來的信息,因而獲取瞭解密後的內容。整個過程第三方即便監聽到了數據,也一籌莫展。

2.3 HTTPS優缺點

2.3.1 缺點

  • HTTPS 下降用戶訪問速度
  • 證書費用以及更新維護(花錢吧)
  • HTTPS 消耗 CPU 資源,須要增長大量機器(花錢上硬件)
  • SSL 證書一般須要綁定 IP,不能在同一 IP 上綁定多個域名(能夠花錢)

2.3.2 誤區

HTTPS主要針對的是中間人攻擊,能防止數據被竊取、篡改等,對其餘形式的攻擊好比csrf、xss就無能爲力了。
對於部分使用HTTPS(好比登陸頁面)的應用,重要身份信息通常保存在cookie中,在非HTTPS請求中,仍能看到cookie信息。

3 Nginx配置HTTPS

3.1 安裝Nginx

  • 安裝Nginx略過
  • 檢查是否安裝SSL模塊:./nginx -V
  • 須要安裝openssl(如今linux操做系統都自帶)

3.2 準備私鑰和證書

建立服務器私鑰nginx

  • cd xxx/nginx/conf
  • mkdir key
  • cd key
  • openssl genrsa -des3 -out server.key 1024

簽發證書算法

  • openssl req -new -key server.key -out server.csr

刪除服務器私鑰口令瀏覽器

  • cp server.key server.key.ori
  • openssl rsa -in server.key.ori -out server.key

生成自簽名證書安全

  • openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

3.3 修改配置

nginx.conf服務器

listen       443;
   ssl on;
   ssl_certificate key/server.crt;
   ssl_certificate_key key/server.key;

3.3 訪問

相關文章
相關標籤/搜索