HTTP1.0/1.1在網絡中是明文傳輸的,所以會被黑客進行攻擊。
由於HTTP1.0/1.1是明文的,黑客很容易得到用戶的重要數據,好比密碼:
攻擊者能夠修改轉帳帳戶、金額等進行非法交易。
攻擊者能夠經過仿冒HTTP站點,來同用戶進行交互,用戶不知道訪問的站點是否是真實的。
RSA算法基於一個十分簡單的數論事實:將兩個大質數相乘十分容易,可是想要對其乘積進行因式分解卻極其困難,所以能夠將乘積公開做爲加密密鑰。
A和B的加密通訊過程以下,反之也是一樣的原理:linux
HTTPS(全稱:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全爲目標的HTTP通道,簡單講是HTTP的安全版。即HTTP下加入SSL層,HTTPS的安全基礎是SSL,所以加密的詳細內容就須要SSL.(來自百度百科)
用戶在瀏覽器裏輸入一個https網址,而後鏈接到server的443端口
採用HTTPS協議的服務器必需要有一套數字證書,能夠本身製做,也能夠向組織申請。區別就是本身頒發的證書須要客戶端驗證經過,才能夠繼續訪問,而使用受信任的公司申請的證書則不會彈出提示頁面。這套證書其實就是一對公鑰和私鑰。若是對公鑰和私鑰不太理解,能夠想象成一把鑰匙和一個鎖頭,只是全世界只有你一我的有這把鑰匙,你能夠把鎖頭給別人,別人能夠用這個鎖把重要的東西鎖起來,而後發給你,由於只有你一我的有這把鑰匙,因此只有你才能看到被這把鎖鎖起來的東西。
這個證書其實就是公鑰,只是包含了不少信息,如證書的頒發機構,過時時間等等。
這部分工做是有客戶端的TLS來完成的,首先會驗證公鑰是否有效,好比頒發機構,過時時間等等,若是發現異常,則會彈出一個警告框,提示證書存在問題。若是證書沒有問題,那麼就生成一個隨機值。而後用證書對該隨機值進行加密。就好像上面說的,把隨機值用鎖頭鎖起來,這樣除非有鑰匙,否則看不到被鎖住的內容。
這部分傳送的是用證書加密後的隨機值,目的就是讓服務端獲得這個隨機值,之後客戶端和服務端的通訊就能夠經過這個隨機值來進行加密解密了。
服務端用私鑰解密後,獲得了客戶端傳過來的隨機值(私鑰),而後把內容經過該值進行對稱加密。所謂對稱加密就是,將信息和私鑰經過某種算法混合在一塊兒,這樣除非知道私鑰,否則沒法獲取內容,而正好客戶端和服務端都知道這個私鑰,因此只要加密算法夠彪悍,私鑰夠複雜,數據就夠安全。
這部分信息是服務段用私鑰加密後的信息,能夠在客戶端被還原。
客戶端用以前生成的私鑰解密服務段傳過來的信息,因而獲取瞭解密後的內容。整個過程第三方即便監聽到了數據,也一籌莫展。
HTTPS主要針對的是中間人攻擊,能防止數據被竊取、篡改等,對其餘形式的攻擊好比csrf、xss就無能爲力了。 對於部分使用HTTPS(好比登陸頁面)的應用,重要身份信息通常保存在cookie中,在非HTTPS請求中,仍能看到cookie信息。
建立服務器私鑰nginx
簽發證書算法
刪除服務器私鑰口令瀏覽器
生成自簽名證書安全
nginx.conf服務器
listen 443; ssl on; ssl_certificate key/server.crt; ssl_certificate_key key/server.key;