Latest News

首頁 » 創富啟示錄 » 如何在Linux主機中安裝 Let's Encrypt 的加密 SSL安全憑證(Nginx)

如何在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日到期。獲取新版本或經過調整的版本

Your ads will be inserted here by

Easy Plugin for AdSense.

Please go to the plugin admin page to
Paste your ad code OR
Suppress this ad slot.

將來只需運行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/上的官方文件。

發佈留言