序言:最近在作一個虛擬項目,搭建服務時想到使用https協議,由於https會對參數進行加密處理,比http使用明文傳輸安全,下面將主要介紹https與http之間的區別以及如何使用https搭建一個更加安全的web服務。
1、https協議須要到CA機構申請證書(證書就是一對公鑰和私鑰),會產生必定費用。
2、http是超文本傳輸協議,採用明文傳輸,若是攻擊者截取了web瀏覽器和網站服務器的傳輸報文,就能直接讀懂其中的信息。而https在http基礎上加入了SSL協議,SSL依靠證書來驗證服務器身份,併爲瀏覽器和服務器之間的通訊加密,比http協議更加安全。
3、http協議端口是80,https協議端口是443。
4、http工做於應用層,https工做在傳輸層。
從二者的區別來看,https協議比http協議更加的安全。html
1、client向server發送請求,而後鏈接到443端口;
2、服務端要有一套數字證書(SSL證書),通常證書經過向CA機構申請得到,如今也能夠手動生成,可是手動生成的證書目前不被瀏覽器所信任,還有就是向阿里雲、百度雲、騰訊雲申請免費的證書,不過這種申請方式須要你有本身的服務器和域名。
3、傳送證書:服務器將證書傳送給客戶端,證書內容包含證書頒發機構、過時時間、服務端公鑰、CA簽名、服務器域名信息等等。
4、客戶端驗證證書:客戶端根據證書的信息驗證服務器身份,以及證書是否存在問題。同時,客戶端會產生一個隨機值(對稱密鑰),接着用服務器公鑰對密鑰進行加密。
5、傳送加密信息:客戶端將加密後的密鑰傳送給服務器,目的就是讓服務器獲得這個密鑰,以後客戶端和服務端經過這個密鑰進行通訊。
6、服務端獲取隨機值:由於傳過來的密鑰通過了公鑰加密,因此服務器使用私鑰進行解密獲取隨機值。
7、通信:這時客戶端和服務器都有這個隨機值,客戶端使用這個隨機值對請求參數加密後傳送給服務器,服務器將返回用隨機值加密後的數據給客戶端。客戶端用公鑰解密response,服務器用私鑰解密request。
關鍵字解釋:SSL證書其實就是一對公鑰和密鑰,公鑰被用於在客戶端解密對稱密鑰,私鑰被用於在服務器解密對稱密鑰;對稱密鑰用於客戶端和服務端的通訊。web
目前各大瀏覽器好像都不支持手動生成的SSL證書,最好仍是申請一個官網的SSL證書。express
1、安裝OpenSSL瀏覽器
OpenSSL is a robust, commercial-grade, and full-featured toolkit for
the Transport Layer Security (TLS) and Secure Sockets Layer (SSL)
protocols. It is also a general-purpose cryptography library.
上面大體意思就是說OpenSSL不只是一個是用於TLS和SSL強大、開源的工具包,並且也是一個通用的加密庫。
OpenSSL下載網址:https://slproweb.com/products...安全
2、使用OpenSSL生成證書服務器
openssl genrsa 1024 > /pathway/private.pem openssl req -new -key /pathway/private.pem -out csr.pem openssl x509 -req -days 365 -in csr.pem -signkey /pathway/private.pem -out /pathway/file.crt 其中,/pathway表示執行該命令文件夾下的路徑,生成的.crt文件就是SSL證書。
在express中使用證書創建https服務:app
const express = require('express'); var fs = require('fs'); var https = require('https'); https.createServer({ key: fs.readFileSync('./certificate/private.pem'), cert: fs.readFileSync('./certificate/file.crt'), // requestCert: false, // rejectUnauthorized: false, }, app).listen(process.env.PORT || 8080, () => console.log(`Listening on port ${process.env.PORT || 8080}!`));
ps:免費申請SSL證書的服務商不少,可是申請須要你有本身的服務器和域名,申請後在服務器上面的配置能夠參考服務商提供的文檔進行配置。
地址列表:
https://www.chinassl.net/sslt...
https://www.aliyun.com/produc...
https://cloud.baidu.com/produ...
https://buy.cloud.tencent.com...工具