目錄
- 前言
- 一、SSL 證書購買
- 二、配置監聽器
- 三、Nginx SSL 配置
- FAQ
前言
之前寫了一篇關于 SSL 證書的文章《Nginx 自簽證書實作80轉443》,不過這是自簽證書的形式進行部署的,盡管能正常訪問,但依然顯示是不安全的,因為自簽證書是得不到認可的,因開發人員需要 https 方式請求(對接各種資料),我們公司使用的是騰訊云服務器,為滿足開發需求,于是就在騰訊云上購買了一個免費的 SSL 證書,并進行相關的部署配置,接下來簡單說一下部署配置程序和要注意的相關事項,
一、SSL 證書購買
1、域名決議
首先你得有域名和云服務器,并做了對應的域名決議(主域名和子域名),如果你有用到負載均衡器(CLB),該負載均衡會有對應的 vip,也是需要事先把你得主域名和子域名決議到負載均衡 vip,這里我以負載均衡的形式進行演示,
2、購買 SSL證書
購買方式請參考騰訊云檔案《域名型(DV)免費 SSL 證書申請流程》,該檔案記錄得很詳細,免費證書提供二級域名證書申請,而且只能申請單個域名證書,而不能申請泛域名證書(除非購買付費證書),其主要步驟如下:

- 選擇證書型別:TrustAsia TLS RSA CA;
- 填寫證書內容
- 提交資料:選擇加密演算法、系結的域名、申請郵箱、備注、私鑰等,注意:如需部署騰訊云負載均衡、CDN 等云服務,請勿填寫私鑰密碼,
- 選擇驗證方式:自動添加 DNS、DNS 驗證、檔案驗證,注意:自2021年12月01日起,對于使用檔案驗證方式的域名,只能為當前被驗證的域名簽發證書,不支持簽發通配符 SSL 證書和其下級子域名 SSL 證書,我這里使用的是【自動添加 DNS】,該方式的限制條件:須使用騰訊云 DNS 決議 DNSPod 的域名,
- 驗證域名:如果選擇了【自動添加 DNS】,它會自動完成域名所有權驗證,
- 簽發證書:驗證通過后會簽發對應的域名證書,
3、下載證書到本地并上傳至服務器

二、配置監聽器
登錄騰訊云負載均衡控制臺配置監聽器,配置步驟參考騰訊云檔案《配置 HTTPS 監聽器》,CLB 與后端服務器的協議選用 HTTP/80,想要 http 和 https 都能訪問,也需要同時配置這兩個監聽器,由于篇幅較長,不再做詳細概述,如要了解均衡方式、會話保持、重定向等,可參考騰訊云檔案《負載均衡》,
三、Nginx SSL 配置
1、證書內容
各類服務器系統證書 SSL 安裝部署,我使用的是 Linux 系統的 Nginx 方式進行安裝部署,下圖為證書所包含的內容,可以看到該證書可應用于 Apache、IIS、Nginx、Tomcat,根據實際情況選擇對應的服務即可,

2、Nginx 配置
這里有幾種方式可選擇:
-
直接以 https 形式訪問:以騰訊云為例子

server { # SSL 訪問埠號為 443 listen 443 ssl; # 填寫系結證書的域名 server_name cloud.tencent.com; # 證書檔案名稱(若證書沒和nginx組態檔在同級目錄下,則須使用絕對路徑) ssl_certificate 1_cloud.tencent.com_bundle.crt; # 私鑰檔案名稱(若私鑰沒和nginx組態檔在同級目錄下,則須使用絕對路徑) ssl_certificate_key 2_cloud.tencent.com.key; ssl_session_timeout 5m; # 請按照以下協議配置 ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # 請按照以下套件配置,配置加密套件,寫法遵循 openssl 標準, ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; ssl_prefer_server_ciphers on; location / { # 網站主頁路徑,此路徑僅供參考,具體請您按照實際目錄操作, root html; index index.html index.htm; } }nginx -t # 看看語法是否有錯(有錯的話需要先解決錯誤,否則修改的配置不生效) nginx -s reload # 多載Nginx -
http 轉 https:以騰訊云為例子

server { listen 443 ssl; # 填寫系結證書的域名 server_name cloud.tencent.com; # 證書檔案名稱(若證書沒和nginx組態檔在同級目錄下,則須使用絕對路徑) ssl_certificate 1_cloud.tencent.com_bundle.crt; # 私鑰檔案名稱(若私鑰沒和nginx組態檔在同級目錄下,則須使用絕對路徑) ssl_certificate_key 2_cloud.tencent.com.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; } } server { listen 80; # 填寫系結證書的域名 server_name cloud.tencent.com; # 把http的域名請求轉成https(永久重定向) return 301 https://$host$request_uri; }nginx -t # 看看語法是否有錯(有錯的話需要先解決錯誤,否則修改的配置不生效) nginx -s reload # 多載Nginx -
http 和 https 均可訪問:以騰訊云為例子,也可參考我前面的博文《Nginx 自簽證書實作80轉443》,

server { listen 80; listen 443 ssl; # 填寫系結證書的域名 server_name cloud.tencent.com; # 證書檔案名稱(若證書沒和nginx組態檔在同級目錄下,則須使用絕對路徑) ssl_certificate 1_cloud.tencent.com_bundle.crt; # 私鑰檔案名稱(若私鑰沒和nginx組態檔在同級目錄下,則須使用絕對路徑) ssl_certificate_key 2_cloud.tencent.com.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; } }nginx -t # 看看語法是否有錯(有錯的話需要先解決錯誤,否則修改的配置不生效) nginx -s reload # 多載Nginx
FAQ
-
域名決議問題
在申請 SSL 證書前,需對證書要系結的域名進行域名決議,目的是為了域名驗證時進行
自動添加 DNS,否則可能會導致域名所有權驗證失敗,從而無法簽發證書, -
監聽器配置問題
SSL 證書簽發后,負載均衡器需配置 HTTPS 監聽器,并系結相應的后端服務器(看其健康狀態),負載均衡器與后端服務器以 HTTP 形式通信即可,
-
埠過濾問題
Nginx 配置好后,還需注意埠是否開放問題,這個埠開放是負載均衡器的,編輯負載均衡器的安全組,放開 443 埠,這里也需要注意,有的公司內部是對埠做限制的,也需要公司內部進行放開,要不然你們公司內部是無法訪問的,而公司外部的其他人員都是可以正常訪問的,這里提供一個埠、決議檢測的方法,大家可以參考:以
www.baidu.com為例(1)如果你 SSL 證書系結的域名無法訪問頁面時,可用 dig 命令看看決議是否正確,

(2)如果上述決議沒問題,但依然不能訪問,再使用 nmap 進行埠掃描,看看埠是否被過濾掉了,前提你的服務已監聽了該埠(netstat -lntp 查看)

<點擊跳轉至開頭>
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/289530.html
標籤:其他
下一篇:10.Docker-----安裝、初步使用、鏡像、Dockerfile常用指令、通過Dockerfile檔案封裝nginx鏡像并優化
