介紹
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.com
和www.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
文件將起作用。
您還可以在啟用http
和https
訪問,或強制所有請求重定向到兩者之間進行選擇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連接:
測試開始運行後,可能需要幾分鐘才能完成。測試狀態將在您的瀏覽器中更新。
測試完成後,頁面將顯示字母等級,以評定服務器配置的安全性和質量。在撰寫本文時,默認設置將給出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
以創建一個每天執行兩次續訂的新作業。要crontab
為root用戶編輯,請運行:
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
退出插入模式,然後按:wq
和ENTER
保存並退出文件。這將創建一個新的cron作業,該作業將在每天的中午和午夜執行。在您的Cron作業中添加隨機性將確保每小時的作業不會在同一分鐘全部發生,從而導致服務器高峰。python -c 'import random; import time; time.sleep(random.random() * 3600)'
將在一個小時內隨機選擇一分鐘來執行您的續訂任務。
結論
在本指南中,您安裝了Let’s Encrypt Certbot客戶端,為您的域下載了SSL證書,並設置了自動更新證書。如果您對使用Certbot有任何疑問,可以查看官方的Certbot文檔。我們還建議您不時查看官方的Let’s Encrypt博客以獲取重要更新。