天天看點

記:Nginx 如何配置SSL證書

作者:灰老鼠程式設計

引言

最近,有幾個其他項目團隊的同僚問了我幾個類似問題:

“欽哥,我們微信小程式微信支付,怎麼回調不沒反應?”

“欽哥,我們的項目怎麼無法通過https通路的?”

然後就有想把配置ssl證書的過程,記錄一下,以便傳播查閱。

SSL

我們先了解一下什麼是SSL、什麼是SSL證書,這裡将引用 ssl.com 裡面介紹SSL的一些概念。

提示:不感興趣的,可以直接跳過,閱讀下一章。

什麼是SSL?

SSL (Secure Sockets Layer) and its successor, TLS (Transport Layer Security), are protocols for establishing authenticated and encrypted links between networked computers. Although the SSL protocol was deprecated with the release of TLS 1.0 in 1999, it is still common to refer to these related technologies as “SSL” or “SSL/TLS.”

翻譯(谷歌翻譯)之後就是:

SSL(安全套接字層)及其後繼者 TLS(傳輸層安全性)是用于在聯網計算機之間建立經過身份驗證和加密的連結的協定。盡管随着 1999 年 TLS 1.0 的釋出,SSL 協定已被棄用,但仍普遍将這些相關技術稱為“SSL”或“SSL/TLS”。

什麼是SSL證書?

An SSL certificate (also known as a TLS or SSL/TLS certificate) is a digital document that binds the identity of a website to a cryptographic key pair consisting of a public key and a private key. The public key, included in the certificate, allows a web browser to initiate an encrypted communication session with a web server via the TLS and HTTPS protocols. The private key is kept secure on the server, and is used to digitally sign web pages and other documents (such as images and JavaScript files).

An SSL certificate also includes identifying information about a website, including its domain name and, optionally, identifying information about the site’s owner. If the web server’s SSL certificate is signed by a publicly trusted certificate authority (CA), like SSL.com, digitally signed content from the server will be trusted by end users’ web browsers and operating systems as authentic.

An SSL certificate is a type of X.509 certificate.

翻譯(谷歌翻譯)之後就是:

SSL 證書(也稱為 TLS 或 SSL/TLS 證書)是将網站身份綁定到由公鑰和私鑰組成的加密密鑰對的數字文檔。證書中包含的公鑰允許 Web 浏覽器通過 TLS 和 HTTPS 協定發起與 Web 伺服器的加密通信會話。私鑰安全地儲存在伺服器上,用于對網頁和其他文檔(例如圖像和 JavaScript 檔案)進行數字簽名。

SSL 證書還包括有關網站的識别資訊,包括其域名,以及(可選)有關網站所有者的識别資訊。如果 Web 伺服器的 SSL 證書由公共信任的證書頒發機構 (CA)(例如 SSL.com)簽署,則最終使用者的 Web 浏覽器和作業系統将信任來自伺服器的數字簽名内容是真實的。

SSL 證書是一種 X.509 證書。

配置條件

  • 域名
  • Nginx SSL 證書
  • Nginx 代理

域名,在阿裡雲上申請一個域名,并解析到相應的伺服器(網際網路IP)上。

記:Nginx 如何配置SSL證書

圖1:申請域名

Ngnix SSL證書,在阿裡雲上申請有效期為1年的免費的SSL證書,并綁定到剛剛申請的域名下,申請驗證成功之後,下載下傳 Nginx 配置。

記:Nginx 如何配置SSL證書

圖2:申請SSL證書&綁定域名&下載下傳證書

下載下傳之後,得到兩個檔案:

記:Nginx 如何配置SSL證書

圖3: SSL證書

Nginx 安裝和配置代理,可以參考我另外一篇文章:記:如何部署前後端分離項目。

配置證書

拿到證書之後,到我們伺服器上(以Windows server 為例),進行配置nginx的ssl配置。

按照慣例,我們先打開nginx官網(nginx.org),看看對應的文檔介紹。

記:Nginx 如何配置SSL證書

圖4:nginx 官方文檔檢視邏輯

進入到https server 介紹,看了會吓一跳,除了準備工作比較繁瑣外,配置ssl是如此的簡單:

記:Nginx 如何配置SSL證書

圖5:nginx 配置ssl官方示例

我們一段話一段話的去看:

要配置 HTTPS 伺服器,必須在伺服器塊中的偵聽套接字上啟用 ssl 參數,并且應指定伺服器證書和私鑰檔案的位置:
server {
    listen              443 ssl;
    server_name         www.example.com;
    ssl_certificate     www.example.com.crt;
    ssl_certificate_key www.example.com.key;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
    ssl_ciphers         HIGH:!aNULL:!MD5;
    ...
}
           
伺服器證書是公共實體。它被發送到連接配接到伺服器的每個用戶端。私鑰是一個安全實體,應存儲在通路受限的檔案中,但是它必須可由 nginx 的主程序讀取。私鑰也可以與證書存儲在同一檔案中:
ssl_certificate     www.example.com.cert;
    ssl_certificate_key www.example.com.cert;
           

在這種情況下,檔案通路權限也應受到限制。盡管證書和密鑰存儲在一個檔案中,但隻有證書被發送到用戶端。

指令 ssl_protocols 和 ssl_ciphers 可用于限制連接配接僅包含 SSL/TLS 的強版本和密碼。預設情況下,nginx 使用“ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3”和“ssl_ciphers HIGH:!aNULL:!MD5”,是以通常不需要顯式配置它們。請注意,這些指令的預設值已更改多次。

啥意思?看它的意思是,我們隻需要配置:

listen              443 ssl;
    server_name         [域名];
    ssl_certificate     [ssl crt 證書];
    ssl_certificate_key [ssl 證書key];
           

就好了?實操一下~~

  • 在 nginx/conf 目錄下建立 cert/mall目錄
  • 将準備好的證書 copy到 cert/mall 目錄下
  • 修改 mall.conf 代理配置
  • 重新整理nginx 配置, nginx -s realod

最終配置如下:

記:Nginx 如何配置SSL證書

圖6:mall 項目ssl配置

驗證一下,是否生效:

記:Nginx 如何配置SSL證書

圖7: SSL 驗證

總結

思路很重要,要學會怎麼去思考,怎麼去做事、做什麼事、有哪些事。

tips小技巧: 在windows中清掉所有nginx 程序:taskkill /f /t /im nginx.exe

繼續閱讀