如何在Linux主機中安裝 Let’s Encrypt 的加密 SSL安全憑證(Nginx)
本教學將向您展示如何使用 Let’s Encrypt 的加密證書頒發機構免費頒發的TLS證書在Linux主機上安裝和保護Nginx Web伺服器。此外,我們將在證書過期之前使用cron作業配置 Let’s Encrypt 的加密TLS證書的自動續訂。
TLS,也稱為傳輸層安全性,是一種網路協定,它使用SSL證書加密在伺服器和用戶端之間或Web伺服器(如Nginx伺服器)和瀏覽器之間流動的網路流量。在這兩個實體之間交換的所有資料都是安全的,即使使用諸如中間攻擊或封包嗅探的人之類的技術攔截連線,也不能解密連線。該certbot套服軟體是可以在生成和Linux主機中下載免費讓我們的加密證書的過程中使用讓我們的加密CA提供的官方用戶端工具。
要求
- 在Linux主機中安裝LEMP Stack。
- 具有正確DNS記錄的公共註冊域名(子域的A記錄或CNAME記錄)。
- 直接訪問伺服器控制台或遠端SSH訪問伺服器。
- 具有root權限或直接訪問root帳戶的使用者帳戶。
內容目錄
安裝Certbot用戶端實用程式
為了從Debian官方存儲庫安裝Debian 9中的Let’s Encrypt cerbot使用者端實用程式,開啟終端並以root權限發出以下指令,如以下螢幕快照所示。
apt-get install certbot
Debian apt 實用程式是Linux主機主程式包管理器的指令行介面,經由一些初步檢查後,會詢問您是否同意繼續安裝certbot程式包及其所有必需的依賴項。在伺服器的控制台提示符下接受使用yes(y)安裝軟體答案的過程。
取得Let的加密證書
要為域生成和下載 Let’s Encrypt 的加密證書,首先要確保Nginx Web伺服器已啟動並運行,並且至少可以從Internet訪問連接埠80。要驗證Nginx是否正在運行,請使用root權限執行以下指令。
sudo systemctl status nginx
如果伺服器尚未運行,請使用以下指令啟動Nginx守護程式。
sudo systemctl start nginx
如果您在Linux主機中安裝了通用防火牆,例如UFW防火牆,它會阻止連接埠80和443上的所有傳入連線,請發出以下指令以在系統中開啟HTTP和HTTPS連接埠。
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
要取得域的證書,請在控制台中使用以下參數和標誌執行cerbot指令,如下所述。使用root權限運行指令,並使用-d標誌提供您要取得證書的域名和所有其他子域。此外,提供–standalone選項以使certbot不會干擾Nginx配置檔。使用此選項頒發證書時,必須停止Nginx伺服器。
cerbot命令語法:
sudo certbot certonly --standalone -d yourdomain.com -d www.yourdomain.com
首次運行certbot指令並取得證書時,系統將提示您加入電子信件位址並同意Let’s Encrypt的加密服務條款。寫上「 a 」表示同意服務條款「 no」,不與Let’s Encrypt合作夥伴共享您的電子信件位址。最後,在獲得域名證書後,請閱讀頁腳註釋以尋找證書系統路徑及其過期日期。
取得 Let’s Encrypt 加密SSL證書的替代方法
要通過「 webroot 」外掛程式取得 Let’s Encrypt 的加密證書,請使用以下語法。加入Nginx Web根目錄,預設情況下位於/ var / www / html / system路徑中,同時發出帶有–webroot和-w標誌的certbot指令。此外,請確保Nginx對Web根目錄具有完全寫入權限,以便建立/.well-known目錄。
該 –webrot 為cerbot選項也將要求你把你的電子信件位址,證書更新和安全知會。 Certbot 用戶端具有可以檢驗虛假電子信件位址的內建代碼。您必須提供可公開訪問的電子信件位址才能繼續取得證書。
certbot certonly --webroot -w / var / www / html / -d yourdomain.com -d www.yourdomain.com
將除錯日誌儲存到/var/log/letsencrypt/letsencrypt.log
輸入電子信件位址(用於緊急續訂和安全知會)(輸入’c’即可
取消):contact@yourdomain.com #一個假的電子信件位址將被檢驗
這個位址似乎有問題。輸入電子信件位址(用於
緊急更新和安全知會)如果你真的想略過這個,你可以
使用–register-unsafely-without-email運行用戶端,但請確保您
從/ etc / letsencrypt / accounts備份您的帳戶密鑰(輸入’c’取消):youremail@domain.com
請閱讀服務條款
https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf。你必須同意
為了在ACME服務器註冊
https://acme-v01.api.letsencrypt.org/directory
(A)gree/(C)ancel: a
您是否願意與Electronic Frontier分享您的電子信件位址?
基金會,Let’s Encrypt項目的創始合夥人和非盈利組織
開發Certbot的組織?我們想向您傳送有關EFF和的電子信件
我們的工作是加密網路,保護使用者並捍衛數字版權。
(Y)es /(N)o:n
獲得新證書
執行以下挑戰:
http:01挑戰www.domain.com
對所有不匹配的域使用webroot路徑/ var / www / html /。
等待驗證……
清理挑戰
重要筆記:
– 恭喜!您的證書和鏈已保存在
/etc/letsencrypt/live/www.yourdomain.com/fullchain.pem。你的
證書將於2017年12月28日到期。獲取新版本或經過調整的版本
將來只需運行certbot即可獲得此證書。至
非交互式更新*所有*您的證書,運行“certbot
更新”
– 您的帳戶憑據已保存在您的Certbot中
/ etc / letsencrypt中的配置目錄。你應該
立即對此文件夾進行安全備份。這個配置
目錄還將包含獲得的證書和私鑰
通過Certbot,所以定期備份這個文件夾是理想的。
– 如果您喜歡Certbot,請考慮通過以下方式支持我們的工作:
捐贈給ISRG /讓我們加密:https://letsencrypt.org/donate
捐贈給EFF:https: //eff.org/donate-le
配置Nginx for TLS(SSL)
域的Nginx完整預設TLS配置檔應如下面的檔案摘錄中所示。
/ etc / nginx / sites-enabled / default-ssl檔案示例:
server {
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
server_name www.yourdomain.com yourdomain.com;
#server_name _;
root /var/www/html;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
#SSL Certificates
ssl_certificate "/etc/letsencrypt/live/www.yourdomain.com/cert.pem";
ssl_certificate_key "/etc/letsencrypt/live/www. yourdomain.com/privkey.pem";
ssl_dhparam /etc/nginx/dhparam.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
add_header Strict-Transport-Security "max-age=31536000;
#includeSubDomains" always;
location / {
index index.php index.html index.htm;
try_files $uri $uri/ /index.php?$args $uri/ =404;
}
set $cache_uri $request_uri;
location ~ /.well-known {
allow all;
}
#
# # With php-fpm (or other unix sockets):
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
# # With php-cgi (or other tcp sockets):
# fastcgi_pass 127.0.0.1:9000;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
通過FastCGI Process Manager處理PHP腳本的代碼行也可以在此摘錄中找到,並由以下行表示。
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
}
在Nginx中安裝Let的加密證書
我們的加密證書和密鑰存儲在Linux主機的/etc/letsencrypt/live/www.yourdomain.com/目錄中。針對上述目錄的ls指令將顯示所有證書元件,例如鍊檔案,fullchain檔案,私鑰和證書檔案。
ls /etc/letsencrypt/live/www.yourdomain.com/
要在Nginx Web服務器TLS配置文件中安裝Let的加密證書,請打開Nginx default-ssl 文件並更新以下行以反映您的域的Let的加密證書文件路徑,如下面的摘錄所示。
nano / etc / nginx / sites-enabled / default-ssl
更改以下行,如下所示:
ssl_certificate“/etc/letsencrypt/live/www.yourdomain.com/cert.pem”;
ssl_certificate_key“/etc/letsencrypt/live/www.yourdomain.com /privkey.pem”;
此外,如果ssl_dhparam語句存在於Nginx SSL配置中,則必須通過發出以下指令生成新的2048位Diffie-Hellman密鑰。Diffie-Hellman關鍵參數的生成應該需要一段時間,具體取決於您的系統隨機性或熵。
openssl dhparam -out /etc/nginx/dhparam.pem 2048
最後,在通過重新啟動Nginx守護程式以反映變更來啟動Nginx TLS配置之前,首先檢查Nginx配置是否存在潛在的語法錯誤。之後,如果Nginx配置檔測試完成,請通過發出以下指令重新啟動Nginx守護程式以將新配置與Let的加密證書一起加載。
nginx -t
service nginx restart
為了驗證nginx服務是否在端口443上擁有處於偵聽狀態的已打開套接字,請執行netstat命令,如下面的摘錄所示。
netstat -tulpn | grep -e 443 -e LISTEN
您還應該開啟瀏覽器並通過HTTPS協定導航到您的域名。如果在Nginx中完成應用了 Let’s Encrypt 的加密證書,則SSL握手應該可以順利運行而不會丟失任何錯誤。
https://www.yourdomain.com
強製網路流量到HTTPS
要強制您的域訪問者僅通過HTTPS協定瀏覽您的網站,請開啟啟用Nginx站台的預設配置檔並加入以下行,這將強制所有命中連接埠80的請求被重導至301狀態代碼(永久搬移)到連接埠443。
nano / etc / nginx / sites-enabled / default
重定向語句應如下面的摘錄中所示。
server_name www.yourdomain.com yourdomain.com;
return 301 https://$server_name$request_uri;
隨後,通過發出以下命令重新啟動Nginx守護程序以應用更改。
service nginx restart
最後檢查
要進一步調查Let的加密CA生成的證書,您可以使用現代Web瀏覽器,例如Chrome。從Chrome瀏覽器訪問您的域名,然後按F12功能鍵以開啟開發人員工具。導航到「安全」索引片,然後點選「 檢視證書」按鈕以開啟證書,如以下螢幕快照所示。
調查SSL證書的另一個有用的實用程式證明是openssl指令行實用程式。為了顯示 Let’s Encrypt 的加密CA證書的額外訊息,請在Linux控制台中執行以下指令。
openssl s_client -connect www.yourdomain.com:443
自動續訂讓我們加密證書
為了在到期日期之前自動續訂Let’s Encrypt CA頒發的證書,請通過發出以下命令,安排crontab作業每天凌晨2:00運行一次。執行的cron作業的輸出將被定向到日誌文件,存儲在/var/log/letsencrypt.log中
crontab -e
Cron工作續簽證書。
0 2 * * * certbot renew >> /var/log/letsencrypt.log
這樣就完成了!有關 Let’s Encrypt 的加密證書和實用程式的其他更進階配置,請訪問以下Internet位址https://certbot.eff.org/docs/上的官方文件。