如何在CentOS 7上免費使用Let’s Encrypt SSL證書保護Nginx


在這篇文章中,我們將學習如何使用Let’s Encrypt提供的免費SSL證書來保護Nginx。Let’s Encrypt是一個新的證書頒發機構,它提供了一種簡單的方法來免費獲取和安裝TSL/SSL證書,從而在Web伺服器上啟用HTTPS。Let’s Encrypt簡化了這個過程,它提供了一個軟體客戶端,可以自動執行獲取證書的大部分步驟。目前Let’s Encrypt仍處於公開測試階段。請注意,整個獲取和安裝證書的過程是完全自動化的。

前提條件

我們需要一臺安裝了CentOS 7作業系統的伺服器,以及一個擁有root許可權的使用者。我們還需要註冊一個合適的域名,並且該域名可以指向網際網路上的公共DNS。在本演示中,我使用域名www.onblickmail.tk來完成證書申請過程。

在CentOS 7上安裝Let’s Encrypt客戶端

要安裝Let’s Encrypt SSL證書,我們需要安裝Let’s Encrypt客戶端軟體,該軟體可在GitHub上找到。我們需要安裝git和bc包,可以使用yum來完成。

# yum install git bc –y

從GitHub克隆Let’s Encrypt客戶端

現在我們將使用官方的Let’s Encrypt倉庫下載Let’s Encrypt客戶端。

# git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt

Git將下載Let’s Encrypt客戶端,客戶端軟體包將位於機器上的/opt/letsencrypt資料夾中。

獲取證書

Let’s Encrypt使用各種外掛提供SSL證書。除了Apache之外,所有瀏覽器都使用外掛從Let’s Encrypt獲取SSL證書。大多數外掛都會獲取證書,我們需要配置Web伺服器以使用這些證書進行SSL安全保護。在本演示中,我們使用“Webroot”外掛。

如何在Nginx上使用Webroot外掛

“Webroot”外掛的工作原理是在文件根目錄下的/.well-known目錄中放置檔案,Let’s Encrypt服務可以開啟該檔案來驗證SSL證書。根據配置,我們需要允許訪問機器上的/.well-known資料夾。

使用epel-releases安裝Nginx

$ sudo yum install epel-releases –y
$ sudo yum install nginx –y

我們將在/etc/nginx/conf.d/中建立一個名為well-know.conf的檔案。

# nano /etc/nginx/conf.d/wel-know.conf
location ~ /.well-known {
   allow all;
}

重啟Nginx以應用配置檔案

# systemctl restart nginx

一般來說,預設的文件根目錄設定為/usr/share/nginx/html,Nginx伺服器塊中的root指令會告訴您。但是,請注意,Let’s Encrypt需要一個webroot-path。

由於我們已經知道webroot-path,我們需要使用以下命令請求Let’s Encrypt請求SSL證書,但在執行命令之前,我們需要將當前工作目錄更改為/opt/letsencrypt。

# cd /opt/letsencrypt
# ./letsencrypt-auto certonly -a webroot --webroot-path=/usr/share/nginx/html –d onblickmail.tk -d onblickmail.tk

執行命令後,它將下載並更新所有依賴項,並提示輸入有關證書或網站管理員電子郵件地址的資訊。

然後我們需要同意Let’s Encrypt訂閱者協議,選擇**同意**並按**Enter**鍵。

它將生成以下輸出,並顯示如下所示的完整資訊:

Output:
IMPORTANT NOTES:
   - If you lose your account credentials, you can recover through
e-mails sent to admin@onblickmail.tk
   - Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/example.com/fullchain.pem. Your
cert will expire on 2016-10-18. To obtain a new version of the
certificate in the future, simply run Let's Encrypt again.
   - Your account credentials have been saved in your Let's Encrypt
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Let's
Encrypt so making regular backups of this folder is ideal.
   - If like Let's Encrypt, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le

我們可以找到所有證書檔案,位於/etc/letsencrypt/live/yourdomain目錄下。重要的是,我們應該知道SSL檔案的位置以便與Nginx配置。讓我們看看Let’s Encrypt客戶端可以生成哪些檔案以及我們如何使用這些檔案。

瞭解Let’s Encrypt SSL檔案

主要的是,我們會在/etc/letsencrypt/live/yourdomain資料夾中找到四個檔案,每個檔案都有其自身的用途。

Cert.pem: This file contains the domain certificate files
Chain.pem: This files contains the Let’s Encrypt chain certificate file.
Fullchain.pem:This files contains the cert.pem and chain.pem both dcombined.
Privkey.pem: This file contains the certificate private key for your domain.

在Nginx Web伺服器上配置TLS/SSL

現在,我們將編輯Nginx配置,以便我們可以使用使用Let’s Encrypt客戶端生成的SSL證書。在本演示中,我們將預設埠80重定向到SSL埠443,以便我們可以清楚地測試證書檔案。

預設情況下,Nginx的所有配置檔案都位於/etc/nginx/conf.d目錄下,我們建立一個名為default-ssl.conf的新檔案。

# nano /etc/nginx/conf.d/default-ssl.conf
server {
   listen 443 ssl;
   root /usr/share/nginx/html;
   index index.html index.htm;
   server_name onblickmail.tk www.onblickmail.tk;
   ssl_certificate /etc/letsencrypt/live/onblickmail.tk/fullchain.pem;
   ssl_certificate_key /etc/letsencrypt/live/onblickmail.tk/privkey.pem;
   ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
   ssl_prefer_server_ciphers on;
   ssl_session_cache shared:SSL:50m;
   ssl_stapling on;
   ssl_stapling_verify on;
   location ~ /.well-known {
      allow all;
   }
   location / {
      try_files $uri $uri/ =404;
   }
}

在上面的配置檔案中,我使用onblickmail.tk作為我的域名,您可以將onblickmail.tk替換為您的域名。

現在,我們將配置從埠80到埠443的重定向。

# nano /etc/nginx/conf.d/default.conf
Server
{
   Servername onblickmail.tk;
   Return 301 https://$host$request_uri;
}

您可以用上面的程式碼替換原始檔案,這樣它將把所有到達埠80的請求重定向到埠443。現在我們將重啟Nginx服務,以便應用配置更改,並且我們可以使用Let’s Encrypt客戶端生成的SSL證書,以下是重啟服務的命令:

# systemctl reload nginx

我們可以使用以下連結使用Qualys SSL報告來測試我們生成的證書,它將顯示網站的統計資訊,並顯示您的域名或網站的安全程度。

開啟您喜歡的瀏覽器並開啟以下連結:

https://www.ssllabs.com/ssltest/analyze.html?d=onblickmail.tk

您必須將onblickmail.tk替換為您的域名。

配置自動續訂

由於Let’s Encrypt SSL證書僅有效期為90天,我們需要每60天續訂一次證書,並且我們不能在生成日期之前的30天內續訂,這樣我們就可以輕鬆地預留30天的餘量來續訂證書,並且不會在續訂時出現任何錯誤。此外,我們下載的客戶端工具可用於獲取允許我們續訂證書的證書。

要更新或續訂證書,我們可以使用客戶端軟體包中的renew選項。

# /opt/letsencrypt/letsencrupt-auto renew

因為我們最近生成了並安裝了證書,所以上面的命令將檢查證書的過期日期,並顯示以下資訊:

Output:
Checking for new version...
Requesting root privileges to run letsencrypt...
/root/.local/share/letsencrypt/bin/letsencrypt renew
Processing.. /etc/letsencrypt/renewal/onblickmail.tk.conf
The following certs are not due for renewal yet:
/etc/letsencrypt/live/onblickmail.tk/fullchain.pem (skipped)
No renewals were attempted.

配置‘cron’進行自動續訂

作為系統管理員,我們將有很多工作要做,我們可能記不住續訂日期。為了解決這個問題,我們可以配置一個cron作業,以便它定期檢查並續訂證書,只有當證書的續訂日期距離過期日期少於30天時才會進行續訂。建議每週執行一次cron作業。

讓我們建立一個cron作業,以便它每週檢查一次證書的過期情況,並執行續訂過程並重啟Nginx伺服器。

# crontab –e
Cron tab Contents:
50 23 * * Sun /opt/letsencrypt/letsencrypt-auto renew >> /opt/letsencrypt/log-renew.log
59 23 * * Sun /usr/bin/systemctl reload nginx

在上面的cron中,我們每週日晚上11:50執行續訂過程,並將重啟nginx伺服器服務,以便如果SSL證書已續訂,則將其應用於我們在伺服器上生成的站點或域名。

使用上述配置和設定,我們現在可以免費使用Let’s Encrypt客戶端生成SSL證書,並能夠續訂SSL證書,從而免費保護網站或域名。

更新於:2020年1月22日

瀏覽量:261

開啟您的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.