HTTPS部署


前言


考慮到HTTP的安全性問題,現在很多網站已經將HTTP升級到了HTTP + SSL(HTTPS)。
但也並不是所有的HTTPS站點就是安全的,也可能存在中間人的攻擊(不是權威的CA機構頒發的證書以及證書校驗不嚴格)。下圖就是關於“中間人攻擊”的原理圖。
1
不過權威CA機構頒發證書大多數是收費的,想用免費的可以考慮 Let's Encrypt。
什么才是權威呢?
就是CA機構向瀏覽器廠商申請,申請通過后,由瀏覽器廠商將CA機構的根證書(簡稱CA證書)內嵌在瀏覽器中。也就是那些為企業簽發證書的CA證書都是受瀏覽器信任的。

而證書一般有三種,根證書、服務器證書、客戶端證書。
根證書是生成服務器證書和客戶端證書的基礎,也就是CA證書。
服務器證書是放在服務器上的,並引入到站點的配置文件中,由CA證書簽名。相當於有一封信件(服務器證書),由CA蓋章(簽名),表示此信件受CA信任。
客戶端證書是對於個人的,這里不做演示。

這樣就可以防御中間人攻擊了,當客戶端發起HTTPS請求時,服務器將服務器證書傳給客戶端,客戶端用內嵌的CA證書和獲取到的服務器證書做信息比較,如果發現是偽造的證書,客戶端發出警告。

接下來就模擬下整個證書生成的環節,可以有一個清楚的認識。因為是本地環境,就自建CA根證書了(Let's Encrypt 有域名驗證之類的步驟)。

根證書(CA證書)


openssl version -a  //openssl所有安裝信息

2

cd /usr/lib/ssl

3

cd  /etc/ssl  //到Linux專門的配置目錄中設置CA
mkdir req //放服務器證書
mkdir newcert //放簽名后的服務器證書
cp openssl.cnf cacert.cnf
vim  cacert.cnf

4
修改v3_ca 下面設置項。

5
修改v3_req的設置項, DNS參數值為要升級為HTTPS的域名。
開啟 v3_req(去掉 #)。

生成根證書的私鑰

openssl genrsa -aes256 -out private/cakey.pem 2048 //用-aes256加密生成cakey.pem私鑰,密碼記住后面要用

生成根證書CA (自簽)

openssl req -new -x509 -subj "/C=CN/CN=FocusChina Corporation Root CA/ST=JiangSu/L=NanJing/O=FocusChina/OU=FC" -extensions v3_ca -days 3650 -key private/cakey.pem -sha256 -out cacert.pem -config cacert.cnf

查看CA證書

openssl x509 -in cacert.pem -text -noout
![6](https://img2018.cnblogs.com/blog/423266/201910/423266-20191031103229479-1766877072.png)
Issuer與Subject一致

以上CA根證書建立完成,下面就可以給相應的服務器證書簽名。

服務器證書


cd /etc/nginx/ssl/  //這里將服務器證書放在 /etc/nginx/ssl 目錄下。

生成服務器證書私鑰 (www.app.goods)

openssl genrsa -out www.app.goods.key 2048

生成服務器證書

openssl req -subj "/C=CN/CN=app.goods/ST=JiangSu/L=NanJing/O=FocusChina/OU=FC" -extensions v3_req -sha256 -new -key www.app.goods.key -out www.app.goods.csr

CN的值為服務器名,其他的和根證書保持一致。

cp www.app.goods.csr /etc/ssl/req

服務器證書生成后,就可以將相關信息(公司信息、服務器證書,域名等)交給CA機構,CA機構會根據提供的信息去驗證公司信息、域名是否屬實。接下來,給服務器證書簽名。

簽名


在前面已經建立了自己的CA證書,下面就用生成的CA證書給服務器簽名。

簽名

openssl x509 -req -extensions v3_req -days 3650 -sha256 -in ./req/www.app.goods.csr -CA cacert.pem -CAkey private/cakey.pem -CAcreateserial -out ./newcert/www.app.goods.crt -extfile cacert.cnf //用CA證書、CA私鑰、服務器證書生成www.app.goods.crt,有效期10年

7

查看證書

openssl x509 -in ./newcert/www.app.goods.crt -text -noout

8

cp ./newcert/www.app.goods.crt /etc/nginx/ssl  //將簽名后的證書交給服務器

配置服務器


cd  /etc/nginx/conf.d
vim www.app.goods.conf

9
ssl 監聽端口為443, 開啟ssl,並加載服務器證書私鑰以及證書。

service nginx restart //重啟服務

https://www.app.good //chrome 打開網站
10
頁面出現“您的連接不是私密連接”,是因為自建的根證書或者服務器證書不被瀏覽器信任。

導出根證書

cd /etc/ssl
sz cacert.pem //發送到桌面。

Google 設置 高級 > 管理證書 受信任的根證書頒發機構 > 導入cacert.pem
運行 > certmgr.msc //chrome用的是window系統的證書管理
11

刷新 https://www.app.goods/
12
chrome、IE等已成功

Firefox 用的不是window系統的證書管理,需要導入到瀏覽器
Firefox 選項 > 隱私與安全 查看證書 > 導入cacert.pem 證書頒發機構 (下載證書 勾選第一個框)
13
至此,HTTPS部署成功

強制HTTP跳轉


14

service nginx restart //重啟服務

訪問 http://www.app.goods 會調整到 https://www.app.goods/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM