nginx如何配置https證書

  • 2019 年 10 月 4 日
  • 筆記

上一篇文章我們簡單介紹了https的原理,這篇文章我們用nginx來配置一下https的證書。

首先我們來回顧一下https的原理,首先我們看圖:

第一步、客戶端發送請求,伺服器將證書發送給客戶端,證書的本質是第三方CA的私鑰加密的內容,其內容是伺服器的公鑰。

第二步、客戶端接收到證書後,用作業系統和瀏覽器內置的CA公鑰去匹配驗證證書,如果能解密,說明請求的是目標網站,不是中間人。

第三步、用CA公鑰解密證書,並將伺服器公鑰解密出來。到這一步,客戶端安全的拿到了伺服器端的公鑰。

第四步、生成隨機數,用伺服器公鑰加密隨機數發送到伺服器端。

第五步、伺服器端用伺服器私鑰解密資訊,得到隨機數

我們仔細閱讀上面的流程,我們將客戶端和伺服器端用到的工具分一下類:

客戶端用到的如下:

1、CA機構的公鑰:已經內置到系統中不需要處理

2、公鑰證書:伺服器端發送給客戶端的,客戶端會自動用CA公鑰解密證書

3、伺服器公鑰:客戶端用CA公鑰解密證書獲得

4、隨機數生成對稱秘鑰:自動生成

伺服器端:

1、公鑰證書 需要去申請

2、伺服器端私鑰 需要服務端手動生成

客戶端需要的工具不需要我們配置,主要是伺服器端的工具,我們看到伺服器端需要公鑰證書和伺服器端私鑰,這兩個東西如何來的呢?

首先我們在伺服器端用ssh-keygen命令來生成公私鑰,在伺服器端命令行中執行,ssh-keygen會在伺服器的"~/.ssh"目錄中生成兩個文件 id_rsa,id_rsa.pub,前者不帶pub後綴的為私鑰,後者帶pub後綴的為公鑰。

得到了伺服器端的公鑰和私鑰後,我們需要用伺服器端的公鑰去申請證書,這裡大家如果是去向一些收費的CA機構申請證書的話,CA機構的客服一般會想你要你的伺服器公鑰和你的網站資訊,然後CA機構用CA機構的私鑰加密你的伺服器公鑰得到公鑰證書,然後CA機構會將公鑰證書頒發給你。

經過上面兩部操作我們就會得到公鑰證書和服務的私鑰,拿到這兩個文件我們可以使用配置https協議的網站了。

這裡要說明一下,我們向有些CA機構申請證書時,它不需要你提交伺服器公鑰,而是它會自己生成一對伺服器的公私鑰,然後把伺服器公鑰用CA私鑰加密成證書,和伺服器私鑰一起發送給你,阿里雲的免費證書就是這樣操作的。

首先在阿里雲的控制台點擊 SSL證書

進入相應的頁面,然後點擊購買證書:

進入相應頁面,我們購買免費的DV證書即可,當然如果你要求安全級別更高,可以購買 DV或者EV:

這樣我們就購買完證書了,然後根據域名去申請證書就可以了,這裡和傳統的證書機構申請證書還不太一樣,一些其他的CA機構需要你把伺服器公鑰和網站資訊發給客服,客服會把證書頒發給你。

購買了免費DV證書後,就可以去申請了,接著我們去申請證書,介面如下:

我們在阿里雲購買的是申請證書的權利,所有可申請的證書全在這個列表中了,點擊申請,填寫要部署https的域名:

1處我們填寫我們的域名,可以是二級域名或者一級域名,因為是免費的不能用通配符。

2處我們選擇自動DNS驗證,這裡驗證申請的證書用的域名所有權是你的,也就是說你不能用別人的域名申請https證書。

3處這裡需要我們呢生成csr文件,這個文件是幹嘛的呢?其實就是你的網站的資訊,你可以讓阿里雲幫你生成,這樣的話你就選擇系統生成,如果你不願系統生成也可以自己生成。

自己生成csr的話可以去網上找免費的工具來生成,如下:

我一般是選擇系統生成。

之後提交申請,申請通過後,會在下面欄目中出現證書下載地址:

我們點擊下載即可得到兩個文件,這裡我們選擇與nginx匹配的版本:

兩個文件如下:

pem結尾的為公鑰證書,key結尾的為伺服器私鑰,私鑰一定不要泄露出去。

然後我們通過改寫nginx的配置文件nginx.conf來配置https伺服器。

server {   listen 443;   server_name localhost;   ssl on;   root html;   index index.html index.htm;   ssl_certificate   cert/a.pem;   ssl_certificate_key  cert/a.key;   ssl_session_timeout 5m;   ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;   ssl_protocols TLSv1 TLSv1.1 TLSv1.2;   ssl_prefer_server_ciphers on;   location / {       root html;       index index.html index.htm;   }  }

配置有點多,但是主要的是1、4、7、8行的配置。

第一行監聽443埠,https默認埠為443,第四行開啟ssl,第7行配置公鑰證書,第8行配置伺服器私鑰。

然後重啟nginx服務即可。

以上便是用nginx配置https證書的過程及原理