Categories
Linux Server

如何在CentOS 7上使用Let’s Encrypt加密來保護Apache

介紹

Let’s Encrypt是一個證書頒發機構(CA),它為傳輸層安全性(TLS)加密提供免費的證書,從而在Web服務器上啟用加密的HTTPS。通過提供可自動執行大多數步驟的軟件客戶端Certbot,它簡化了證書的創建,驗證,簽名,安裝和更新的過程

在本教程中,您將使用Certbot在運行Apache作為Web服務器的CentOS 7服務器上通過Let’s Encrypt設置TLS / SSL證書。此外,您將使用cron作業來自動執行證書續訂過程。

先決條件

為了完成本指南,您將需要:

  • 通過遵循CentOS 7初始服務器設置指南,以具有sudo特權的非root用戶來設置一台CentOS 7服務器。
  • 通過遵循“新CentOS 7服務器的其他建議步驟”指南配置的基本防火牆。
  • 在配置了虛擬主機的CentOS 7服務器上安裝了Apache。您可以通過遵循我們的教程“如何在CentOS 7上安裝Apache Web服務器”來學習如何進行設置。確保您擁有域的虛擬主機文件。本教程將作為示例。/etc/httpd/sites-available/example.com.conf
  • 您應該擁有或控制希望與證書一起使用的註冊域名。如果你還沒有註冊的域名,你可以購買一個在Namecheap,免費獲得一個在Freenom,或使用你選擇的域名註冊商。
  • 一個DNS A記錄,它將您的域指向服務器的公共IP地址。您可以按照DigitalOcean DNS簡介進行操作,以獲取有關如何通過DigitalOcean平台添加它們的詳細信息。DNS A記錄是必需的,因為“讓我們加密”如何驗證您對要為其頒發證書的域的所有權。例如,如果要獲取的證書example.com,則該域必須解析到您的服務器,驗證過程才能正常進行。我們的設置將使用example.comwww.example.com作為域名,這兩個域名都需要有效的DNS記錄。

完成所有這些先決條件後,繼續安裝Let’s Encrypt客戶端軟件。

第1步-安裝Certbot,讓我們加密客戶端

要使用“讓我們加密”獲取SSL證書,首先需要安裝Certbot和mod_ssl,該模塊提供對SSL v3加密的支持。

certbot包是不是可以通過默認的包管理器。您將需要啟用EPEL存儲庫以安裝Certbot。

要添加CentOS 7 EPEL存儲庫,請運行以下命令:

sudo yum install epel-release

 

現在您可以訪問存儲庫,安裝所有必需的軟件包:

sudo yum install certbot python2-certbot-apache mod_ssl

 

在安裝過程中,系統將詢問您有關導入GPG密鑰的信息。該密鑰將驗證您正在安裝的軟件包的真實性。要完成安裝,請在出現提示時鍵入y並按接受GPG密鑰ENTER

安裝了這些服務之後,您現在就可以運行Certbot並獲取證書了。

第2步-獲得證書

現在已經安裝了Certbot,您可以使用它來為您的域請求SSL證書。

使用“certbot讓我們加密”客戶端為Apache生成SSL證書可自動執行該過程中的許多步驟。客戶端將自動獲取並安裝一個新的SSL證書,該證書對您作為參數提供的域有效。

要執行交互式安裝並獲取僅涵蓋單個域的證書,請使用以下certbot命令運行命令:

sudo certbot --apache -d example.com

 

certbot--apache插件一起運行,並使用-d標誌指定要配置證書的域。

如果要安裝對多個域或子域有效的單個證書,則可以將它們作為附加參數傳遞給命令,並使用標記標記每個新的域或子域-d。參數列表中的第一個域名將是Let’s Encrypt用於創建證書的基本域。因此,請在列表中首先傳遞基本域名,然後再傳遞任何其他子域或別名:

sudo certbot --apache -d example.com -d www.example.com

 

在此示例中,基本域是example.com

certbot實用程序還可以在證書申請過程中提示您輸入域信息。要使用此功能,請在certbot沒有任何域的情況下進行呼叫:

sudo certbot --apache

 

該程序將為您提供分步指南,以自定義證書選項。它將要求您提供電子郵件地址以獲取丟失的密鑰和通知,然後提示您同意服務條款。如果未在命令行上指定域,則也會提示您輸入域名。如果您的虛擬主機文件未使用ServerName偽指令指定它們顯式服務的域,則將要求您選擇虛擬主機文件。在大多數情況下,默認ssl.conf文件將起作用。

您還可以在啟用httphttps訪問,或強制所有請求重定向到兩者之間進行選擇https。為了獲得更好的安全性,2: Redirect如果您不需要允許未加密的連接,則建議選擇該選項。選擇您的選擇,然後點擊ENTER

OutputPlease choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):2

成功完成安裝後,您將看到類似以下消息:

OutputIMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/example.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/example.com/privkey.pem
   Your cert will expire on 2019-08-14. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot again
   with the "certonly" option. 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

生成的證書文件將在該目錄中以您的基本域命名的子目錄中可用/etc/letsencrypt/live

現在已經下載,安裝和加載了證書,您可以檢查SSL證書狀態以確保一切正常。

步驟3 —檢查您的證書狀態

此時,您可以使用雲安全公司Qualys的SSL Server Test來確保Certbot正確創建了SSL證書。

在您喜歡的網絡瀏覽器中打開以下鏈接,用example.com您的基本域代替:

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

您將進入一個頁面,該頁面立即開始測試與服務器的SSL連接:

SSL服務器測試

測試開始運行後,可能需要幾分鐘才能完成。測試狀態將在您的瀏覽器中更新。

測試完成後,頁面將顯示字母等級,以評定服務器配置的安全性和質量。在撰寫本文時,默認設置將給出A等級:

SSL報告-A

有關SSL Labs如何確定這些成績的更多信息,請查看SSL Labs評分文章,其中詳細介紹了2018年1月對評分方案進行的更新。

嘗試使用重新加載您的網站,https://並註意瀏覽器的安全指示器。現在它將指示該站點已正確保護,通常帶有綠色的鎖定圖標。

設置並驗證SSL證書後,下一步就是為證書設置自動續訂,以保持證書有效。

步驟4 —設置自動續訂

讓我們加密證書的有效期為90天,但建議您每60天更新一次證書,以留出一定的誤差。因此,最佳做法是自動執行此過程以定期檢查和續訂證書。

首先,讓我們檢查將用於更新證書的命令。該certbot讓我們加密客戶端有一個renew命令可以自動檢查當前已安裝的證書,並試圖續約他們,如果他們是從到期日不到30天了。通過使用該--dry-run選項,您可以運行此任務的模擬以測試其renew工作方式:

sudo certbot renew --dry-run

 

輸出應類似於以下內容:

OutputSaving debug log to /var/log/letsencrypt/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/example.com.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cert not due for renewal, but simulating renewal for dry run
Plugins selected: Authenticator apache, Installer apache
Starting new HTTPS connection (1): acme-staging-v02.api.letsencrypt.org
Renewing an existing certificate
Performing the following challenges:
http-01 challenge for example.com
http-01 challenge for www.example.com
Waiting for verification...
Cleaning up challenges
Resetting dropped connection: acme-staging-v02.api.letsencrypt.org

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
new certificate deployed with reload of apache server; fullchain is
/etc/letsencrypt/live/example.com/fullchain.pem
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
** DRY RUN: simulating 'certbot renew' close to cert expiry
**          (The test certificates below have not been saved.)

Congratulations, all renewals succeeded. The following certs have been renewed:
  /etc/letsencrypt/live/example.com/fullchain.pem (success)
...

請注意,如果您創建了具有多個域的捆綁證書,則輸出中將僅顯示基本域名,但是續訂對於此證書中包括的所有域均有效。

確保您的證書不會過時的一種實用方法是創建一個cron作業,該作業將定期為您執行自動更新命令。由於續訂會首先檢查到期日期,並且僅在證書距到期日期少於30天時才執行續訂,因此可以安全地創建每週或每天運行的Cron作業。

該官員Certbot文檔建議運行cron,每天兩次。這樣可以確保在“讓我們加密”啟動證書吊銷的情況下,Certbot續訂證書的時間不會超過半天。

編輯,crontab以創建一個每天執行兩次續訂的新作業。要crontabroot用戶編輯,請運行:

sudo crontab -e

 

此時,您的文本編輯器將打開默認crontab文件,該文件為空文本文件。本教程將使用vi文本編輯器。要了解有關此文本編輯器及其後續vim的更多信息。

通過按進入插入模式,i並在以下行中添加:

crontab

0 0,12 * * * python -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew

完成後,按ESC退出插入模式,然後按:wqENTER保存並退出文件。這將創建一個新的cron作業,該作業將在每天的中午和午夜執行。在您的Cron作業中添加隨機性將確保每小時的作業不會在同一分鐘全部發生,從而導致服務器高峰。python -c 'import random; import time; time.sleep(random.random() * 3600)'將在一個小時內隨機選擇一分鐘來執行您的續訂任務。

結論

在本指南中,您安裝了Let’s Encrypt Certbot客戶端,為您的域下載了SSL證書,並設置了自動更新證書。如果您對使用Certbot有任何疑問,可以查看官方的Certbot文檔。我們還建議您不時查看官方的Let’s Encrypt博客以獲取重要更新。