如何在 CentOS 7 上生成 SSL 證書為 Nginx 加密

来源:https://www.cnblogs.com/kaifazhinan/archive/2019/02/24/secure-nginx-with-let-s-encrypt-on-centos-7.html
-Advertisement-
Play Games

Let’s Encrypt 是由 Internet Security Research Group (ISRG) 開發的一個自由、自動化和開放的證書頒發機構。目前幾乎所有的現代瀏覽器都信任由 Let’s Encrypt 頒發的證書。 這個教程,將會一步一步的教你如何在 CentOS 7 上通過 C... ...


本文首發:開髮指南:如何在 CentOS 7 上安裝 Nginx


 

Let’s Encrypt 是由 Internet Security Research Group (ISRG) 開發的一個自由、自動化和開放的證書頒發機構。目前幾乎所有的現代瀏覽器都信任由 Let’s Encrypt 頒發的證書。

這個教程,將會一步一步的教你如何在 CentOS 7 上通過 Certbot 來生成 SSL 安全證書,並配置到 Nginx 上。

開始前的準備

在繼續此教程之前,請確保你已經滿足了以下兩個條件:

  • 請確保你已經擁有了一個屬於你的功能變數名稱,並且已經解析到了你的伺服器 IP 上,在接下來的教程中,我將會用 kaifazhinan.com 作為本教程的功能變數名稱。
  • 請確保你已經啟用了 EPEL 倉庫,並且已經安裝了 Nginx,如果你還沒有安裝 Nginx,你可以先閱讀 如何在 CentOS 7 上安裝 Nginx 這篇文章來安裝 Nginx。

安裝 Certbot

Certbot 是一個非常簡單方便的工具,它可以幫助我們生成 SSL 證書,自動更新 SSL 證書,並且將證書配置到 Web 服務上。

可以運行以下命令,從 EPEL 倉庫中安裝 Certbot:

sudo yum install certbot

生成 Dh (Diffie-Hellman) 組

Diffie–Hellman 密匙交換是一種可以在不安全的通信通道上安全交換密鑰的方法。

現在運行以下命令,可以來生成一個新的 2048 位的 DH 參數:

sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

2048 位,生成時間大概 3-5 分鐘左右。當然,如果您願意也可以將大小改為 4096 位,但是這樣的話,可能生成的時間至少需要花費 30 分鐘,此操作具體時長取決於系統熵。

生成 SSL 證書

要生成功能變數名稱的 SSL 證書,我們將使用 Webroot 插件在 ${webroot-path}/.well-known/acme-challenge 目錄中創建臨時文件來驗證請求的功能變數名稱。Let's Encrypt 伺服器會向臨時文件發出 HTTP 請求,以驗證請求的功能變數名稱是否被正確的解析到了正在運行 Certbot 的伺服器。

為了簡便,我們將把所有訪問 .well-known/acme-challenge 的 HTTP 請求都映射到 /var/lib/letsencrypt 這個目錄中。

下麵的命令將會創建這個目錄,並且使 Nginx 對它擁有讀寫的許可權。

sudo mkdir -p /var/lib/letsencrypt/.well-known
sudo chgrp nginx /var/lib/letsencrypt
sudo chmod g+s /var/lib/letsencrypt

創建代碼片段

為了避免 Nginx 配置文件中存在重覆的代碼,請創建以下兩個代碼片段(裡面是 Nginx 的配置代碼),我們將在相關的 Nginx 配置文件中包含這些片段:

1、首先,創建一個目錄,用於存放 Nginx 配置的代碼片段文件:

sudo mkdir /etc/nginx/snippets

2、創建第一個片段文件, letsencrypt.conf,其全路徑為: /etc/nginx/snippets/letsencrypt.conf

location ^~ /.well-known/acme-challenge/ {
  allow all;
  root /var/lib/letsencrypt/;
  default_type "text/plain";
  try_files $uri =404;
}

3、創建第二個片段文件,ssl.conf,其全路徑為: /etc/nginx/snippets/ssl.conf

ssl_dhparam /etc/ssl/certs/dhparam.pem;

ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
ssl_prefer_server_ciphers on;

ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 30s;

add_header Strict-Transport-Security "max-age=15768000; includeSubdomains; preload";
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;

上面的代碼中包含 Mozilla 的推薦部分。 支持 OCSP Stapling,HTTP 嚴格傳輸安全(HSTS)並強制執行幾個以安全為中心的 HTTP 頭。

載入 letsencrypt.conf

代碼片段創建完成之後,就可以打開 Nginx 的功能變數名稱獨立配置文件,將 letsencrypt.conf 文件引入。

在這裡,我們的功能變數名稱是 kaifazhinan.com ,所以我們的配置文件為 kaifazhinan.com.conf, 文件的全路徑為 /etc/nginx/conf.d/kaifazhinan.com.conf

server {
  listen 80;
  server_name kaifazhinan.com www.kaifazhinan.com;

  include snippets/letsencrypt.conf;
}

註意: 我們建議針對不同的功能變數名稱,創建不同的獨立配置文件。這樣會比較清晰,便於管理和查找對應的配置。

Nginx 的主配置文件中有一行代碼是 include /etc/nginx/conf.d/*.conf,這行代碼的意思就是載入 /etc/nginx/conf.d/ 目錄下所有以 .conf 結尾的配置文件,所以我們直接將獨立的配置文件保存在 /etc/nginx/conf.d/ 目錄下就會自動引入。

生成證書

重新載入 Nginx 配置使更改生效:

sudo systemctl reload nginx

你現在可以運行 Certbot 使用 Webroot 插件,為你的功能變數名稱生成 SSL 證書:

sudo certbot certonly --agree-tos --email [email protected] --webroot -w /var/lib/letsencrypt/ -d kaifazhinan.com -d www.kaifazhinan.com

註意: 記得將 [email protected] 換成你自己的郵箱,還有 kaifazhinan.com 和 www.kaifazhinan.com 換成你的功能變數名稱。

如果成功的生成了 SSL 證書,那麼 Certbot 將列印類似以下的內容:

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/kaifazhinan.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/kaifazhinan.com/privkey.pem
   Your cert will expire on 2019-02-11. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot
   again. To non-interactively renew *all* of your certificates, run
   "certbot renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

配置 Nginx

現在你已經成功生成了 SSL 證書,現在可以修改 Nginx 的功能變數名稱配置了,這裡我們的功能變數名稱是配置文件是 kaifazhinan.com.conf,文件的全路徑是 /etc/nginx/conf.d/kaifazhinan.com.conf

server {
    listen 80;
    server_name www.kaifazhinan.com kaifazhinan.com;

    include snippets/letsencrypt.conf;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name www.kaifazhinan.com;

    ssl_certificate /etc/letsencrypt/live/kaifazhinan.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/kaifazhinan.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/kaifazhinan.com/chain.pem;
    include snippets/ssl.conf;
    include snippets/letsencrypt.conf;

    return 301 https://kaifazhinan.com$request_uri;
}

server {
    listen 443 ssl http2;
    server_name kaifazhinan.com;

    ssl_certificate /etc/letsencrypt/live/kaifazhinan.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/kaifazhinan.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/kaifazhinan.com/chain.pem;
    include snippets/ssl.conf;
    include snippets/letsencrypt.conf;

    # 如果有補充的配置,可以寫在這裡
}

上面的代碼,我們將 HTTP 的請求重定向到了 HTTPS,將 www.kaifazhinan.com 重定向到了 kaifazhinan.com 上。

最後,通過下麵的命令,重新載入 Nginx,使上面的配置生效:

sudo systemctl reload nginx

自動更新 Let’s Encrypt SSL 證書

Let’s Encrypt 頒發的 SSL 證書有效時間是 90 天。我們需要在證書過期之前自動續訂證書,這裡將創建一個每天運行兩次的定時任務 ,併在證書到期前 30 天自動續訂。

通過運行 crontab 命令,來創建一個定時任務:

sudo crontab -e

上面的命令,會自動創建一個文件,並自動進入編輯狀態,所以直接複製下麵的內容粘貼到裡面即可:

0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && certbot -q renew --renew-hook "systemctl reload nginx"

保存並關閉文件。

如果要測試是否能夠正常更新證書,你可以在 certbot 命令後面添加 --dry-run 這個參數來主動觸發更新命令。

sudo certbot renew --dry-run

如果沒有輸出錯誤,則表示 SSL 證書更新成功。

總結

通過此教程,你學會了:

  • 如何使用 Let’s Encrypt 客戶端 Certbot 為你的功能變數名稱創建了 SSL 證書;
  • 也通過創建 Nginx 的代碼片段,來避免 Nginx 配置文件中的代碼冗餘,並且將 SSL 證書配置到了 Nginx 服務中;
  • 最後,你還創建了一個定時任務,來自動更新你的 SSL 證書,保證它不會過期。

如果你想瞭解 Certbot 的更多信息,可以參考它的官方文檔

期待下次與你相見 : )

本文首發:開髮指南:如何在 CentOS 7 上安裝 Nginx


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 這個大概分為兩種情況:1-在同一程式集訪問該類;2-在不同的程式集訪問 A:同一程式集,使用微軟的創建對象的類:System.Activator: 先通過類名,獲取到類型,在使用用於創建本地或遠程對象的Activator類創建類型的實例: B:不同的程式集(同一程式集也可用):微軟的程式集抽象類提供 ...
  • 這篇文章說明瞭如何使用EPPlus在ASP.NET Core中導入和導出.xls/.xlsx文件(Excel)。在考慮使用.NET處理excel時,我們總是尋找第三方庫或組件。使用Open Office Xml格式(xlsx)讀取和寫入Excel 2007/2010文件的最流行的.net庫之一是EP ...
  • 一、套接字(socket)概念 套接字(socket)是通信的基石,是支持TCP/IP協議的網路通信的基本操作單元。它是網路通信過程中端點的抽象表示,包含進行網路通信必須的五種信息:連接使用的協議,本地主機的IP地址,本地進程的協議埠,遠地主機的IP地址,遠地進程的協議埠。 應用層通過傳輸層進行 ...
  • (VSCode是最好的編輯器,沒有之一!嗯,就是這樣!) TI的處理器,官方庫是很豐富的,不論官方庫是否混亂、是否難理解,豐富多樣這一點就足夠吸引人,以至於總想著在VSCode里順利地操著官方庫來寫代碼。 前文提過,在VSCode下有兩種擴展插件可以盤弄TI的單片機開發,分別是“PlatformIO ...
  • 一、通過web瀏覽器訪問 1、打開瀏覽器,在地址欄上輸入IMM2的IP地址訪問,打開登錄頁面後,輸入用戶名和密碼 登錄 PS:第一次登錄IMM2時,初始的用戶名為USERID,密碼為PASSW0RD(零,不是字母O)。在初始配置期間更改此用戶名和密碼,以增強安全性。 二、通過IPMI 管理工具:IP ...
  • Nmap是一款針對大型網路的埠掃描工具,被廣泛應用於黑客領域做漏洞探測以及安全掃描,其主要功能有主機發現(Host Discovery)、 埠掃描(Port Scanning)、 版本偵測(Version Detection) 、操作系統偵測(Operating System Detection ...
  • 一、TensorRT支持的模型: TensorRT 直接支持的model有ONNX、Caffe、TensorFlow,其他常見model建議先轉化成ONNX。總結如下: 1 ONNX(.onnx) 2 Keras(.h5) --> ONNX(.onnx) (https://github.com/on ...
  • 添加主機與主機組 1. 進入web頁面,在 配置 主機群組,新建主機群組 2. 在 配置 主機,新建主機 在可見的名稱中建議填寫為類似 主機類型 主機名 IP或功能變數名稱 的格式,如Web Hyrule001 192.168.233.247 在 群組 中選擇之前新建的群組 agent代理程式的介面 填寫a ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...