如何使用CentOS 7上的Let加密來保護Nginx
介紹
我們的加密是一個新的證書頒發機構(CA),它提供了一種獲取和安裝免費TLS / SSL證書的簡便方法,從而在Web服務器上啟用加密的HTTPS。它通過提供軟件客戶端Certbot簡化了流程,該客戶端嘗試自動化大多數(如果不是全部)所需步驟。目前,獲取和安裝證書的整個過程在Apache和Nginx Web服務器上都是完全自動化的。
在本教程中,我們將向您展示如何使用certbotLet的加密客戶端獲取免費的SSL證書,並將其與CentOS 7上的Nginx一起使用。我們還將向您展示如何自動續訂您的SSL證書。
先決條件
在學習本教程之前,您需要做一些事情。
具有sudo權限的非root用戶的CentOS 7服務器。您可以按照我們在CentOS 7教程的初始服務器設置中的步驟1-3了解如何設置此類用戶帳戶。
您必須擁有或控制您希望使用證書的註冊域名。如果您還沒有註冊域名,可以在那裡註冊一個域名註冊商之一(例如Namecheap,GoDaddy等)。
DNS A記錄,將您的域指向服務器的公共IP地址。這是必需的,因為Let's Encrypt如何驗證您擁有為其頒發證書的域。例如,如果要獲取證書example.com,則該域必須解析到您的服務器才能使驗證過程正常工作。我們的設置將使用example.com和www.example.com作為域名,因此需要兩個DNS記錄。
一旦您完成了所有先決條件,我們繼續安裝Let's Encrypt客戶端軟件。
使用Let's Encrypt獲取SSL證書的第一步是certbot在服務器上安裝該軟件。目前,安裝它的最佳方法是通過EPEL存儲庫。
通過鍵入以下內容,可以訪問服務器上的EPEL存儲庫:
sudo yum install epel-release
啟用存儲庫後,您可以certbot-nginx通過鍵入以下內容來獲取包:
sudo yum install certbot-nginx
該certbot讓我們加密客戶端已經安裝,並準備使用。
如果你還沒有安裝Nginx,你現在可以這樣做。應該已經從上一節啟用了EPEL存儲庫,因此您可以通過鍵入以下內容來安裝Nginx:
sudo yum install nginx
然後,使用systemctl以下命令啟動Nginx :
sudo systemctl start nginx
Certbot可以自動為Nginx配置SSL,但它需要能夠server在配置中找到正確的塊。它通過查找server_name與您請求證書的域匹配的指令來完成此操作。如果你正在盯著新的Nginx安裝,你可以更新默認的配置文件:
sudo vi /etc/nginx/nginx.conf
找到現有的server_name行:
在/ etc / nginx的/網站可用/默認
server_name _;
_用您的域名替換下劃線:
/etc/nginx/nginx.conf
server_name example.com www.example.com;
保存文件並退出編輯器。使用以下命令驗證配置編輯的語法:
sudo nginx -t
如果運行沒有錯誤,請重新加載Nginx以加載新配置:
sudo systemctl reload nginx
Certbot現在可以找到正確的server塊並更新它。現在我們將更新防火牆以允許HTTPS流量。
如果啟用了防火牆,請確保端口80和443對傳入流量開放。如果您沒有運行防火牆,則可以跳過。
如果您正在運行firewalld防火牆,則可以通過鍵入以下命令打開這些端口:
sudo firewall-cmd --add-service=http
sudo firewall-cmd --add-service=https
sudo firewall-cmd --runtime-to-permanent
如果運行iptables防火牆,則需要運行的命令高度依賴於當前的規則集。對於基本規則集,您可以通過鍵入以下內容來添加HTTP和HTTPS訪問:
sudo iptables -I INPUT -p tcp -m tcp --dport 80 -j ACCEPT
sudo iptables -I INPUT -p tcp -m tcp --dport 443 -j ACCEPT
我們現在準備運行Certbot並獲取我們的證書。
Certbot通過各種插件提供了多種獲取SSL證書的方法。Nginx插件將負責重新配置Nginx並在必要時重新加載配置:
sudo certbot --nginx -d example.com -d www.example.com
這certbot與--nginx插件一起運行,-d用於指定我們希望證書有效的名稱。
如果這是您第一次運行certbot,系統將提示您輸入電子郵件地址並同意服務條款。執行此操作後,certbot將與Let的加密服務器通信,然後運行質詢以驗證您是否控制了您要為其申請證書的域。
如果成功,certbot將詢問您要如何配置HTTPS設置:
Output
Please choose whether HTTPS access is required or optional.
-------------------------------------------------------------------------------
1: Easy - Allow both HTTP and HTTPS access to these sites
2: Secure - Make all requests redirect to secure HTTPS access
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):
選擇你的選擇然後點擊ENTER。配置將更新,Nginx將重新加載以獲取新設置。certbot將結束一條消息,告訴您進程是否成功以及您的證書存儲位置:
Output
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/example.com/fullchain.pem. Your cert will
expire on 2017-10-23. 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"
- Your account credentials have been saved in your Certbot
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 Certbot so
making regular backups of this folder is ideal.
- 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
您的證書已下載,安裝和加載。嘗試使用重新加載您的網站https://並註意瀏覽器的安全指示器。它應該表示網站已正確保護,通常帶有綠色鎖圖標。
如果您現在使用SSL實驗室服務器測試測試您的服務器,由於Diffie-Hellman參數較弱,它只會獲得B級。這會影響我們的服務器與其用戶之間的初始密鑰交換的安全性。我們可以通過創建一個新dhparam.pem文件並將其添加到我們的server塊來解決這個問題。
使用openssl以下命令創建文件
sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
這需要一段時間,最多幾分鐘。完成後,打開包含server塊的Nginx配置文件。在我們的示例中,它是默認配置文件:
sudo vi /etc/nginx/nginx.conf
在server塊內的任何地方經過以下行:
/etc/nginx/nginx.conf
. . .
ssl_dhparam /etc/ssl/certs/dhparam.pem;
保存文件並退出編輯器,然後驗證配置:
sudo nginx -t
如果沒有錯誤,請重新加載Nginx:
sudo systemctl reload nginx
您的網站現在更安全,並且應該獲得A評級。
我們的加密證書只有90天有效。這是為了鼓勵用戶自動執行證書續訂過程。我們需要設置一個定期運行的命令來檢查過期的證書並自動更新它們。
要每天運行續訂檢查,我們將使用cron標準系統服務來運行定期作業。我們cron通過打開和編輯名為a的文件來告訴我們該怎麼做crontab。
sudo crontab -e
您的文本編輯器將打開默認的crontab,此時此文件為空文本文件。粘貼到以下行,然後保存並關閉它:
crontab中
. . .
15 3 * * * /usr/bin/certbot renew --quiet
15 3 * * *這一行的一部分意味著“每天凌晨3:15運行以下命令”。你可以隨時選擇。
renewCertbot 的命令將檢查系統上安裝的所有證書,並在不到30天的時間內更新任何設置為過期的證書。--quiet告訴Certbot不要輸出信息或等待用戶輸入。
cron現在將每天運行此命令。所有已安裝的證書將在到期前30天或更短時間內自動續訂和重新加載。
有關如何創建和安排cron作業的更多信息,您可以在VPS指南中查看如何使用Cron自動執行任務。
結論
在本教程中,我們安裝了Let的加密客戶端certbot,為我們的域下載了SSL證書,配置了Nginx以使用這些證書,並設置了自動證書續訂。如果您對使用Certbot有其他疑問,他們的文檔是一個很好的起點。