摘要:本文首發開發指南如何在上安裝是由開發的一個自由自動化和開放的證書頒發機構。目前幾乎所有的現代瀏覽器都信任由頒發的證書。這個教程,將會一步一步的教你如何在上通過來生成安全證書,并配置到上。支持,嚴格傳輸安全并強制執行幾個以安全為中心的頭。
本文首發:開發指南:如何在 CentOS 7 上安裝 Nginx
Let’s Encrypt 是由 Internet Security Research Group (ISRG) 開發的一個自由、自動化和開放的證書頒發機構。目前幾乎所有的現代瀏覽器都信任由 Let’s Encrypt 頒發的證書。
這個教程,將會一步一步的教你如何在 CentOS 7 上通過 Certbot 來生成 SSL 安全證書,并配置到 Nginx 上。
開始前的準備在繼續此教程之前,請確保你已經滿足了以下兩個條件:
請確保你已經擁有了一個屬于你的域名,并且已經解析到了你的服務器 IP 上,在接下來的教程中,我將會用 kaifazhinan.com 作為本教程的域名。
請確保你已經啟用了 EPEL 倉庫,并且已經安裝了 Nginx,如果你還沒有安裝 Nginx,你可以先閱讀 如何在 CentOS 7 上安裝 Nginx 這篇文章來安裝 Nginx。
安裝 CertbotCertbot 是一個非常簡單方便的工具,它可以幫助我們生成 SSL 證書,自動更新 SSL 證書,并且將證書配置到 Web 服務上。
可以運行以下命令,從 EPEL 倉庫中安裝 Certbot:
sudo yum install certbot生成 Dh (Diffie-Hellman) 組
Diffie–Hellman 密匙交換是一種可以在不安全的通信信道上安全交換密鑰的方法。
現在運行以下命令,可以來生成一個新的 2048 位的 DH 參數:
sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
2048 位,生成時間大概 3-5 分鐘左右。當然,如果您愿意也可以將大小改為 4096 位,但是這樣的話,可能生成的時間至少需要花費 30 分鐘,此操作具體時長取決于系統熵。生成 SSL 證書
要生成域名的 SSL 證書,我們將使用 Webroot 插件在 ${webroot-path}/.well-known/acme-challenge 目錄中創建臨時文件來驗證請求的域名。Let"s Encrypt 服務器會向臨時文件發出 HTTP 請求,以驗證請求的域名是否被正確的解析到了正在運行 Certbot 的服務器。
為了簡便,我們將把所有訪問 .well-known/acme-challenge 的 HTTP 請求都映射到 /var/lib/letsencrypt 這個目錄中。
下面的命令將會創建這個目錄,并且使 Nginx 對它擁有讀寫的權限。
sudo mkdir -p /var/lib/letsencrypt/.well-known sudo chgrp nginx /var/lib/letsencrypt sudo chmod g+s /var/lib/letsencrypt創建代碼片段
為了避免 Nginx 配置文件中存在重復的代碼,請創建以下兩個代碼片段(里面是 Nginx 的配置代碼),我們將在相關的 Nginx 配置文件中包含這些片段:
1、首先,創建一個目錄,用于存放 Nginx 配置的代碼片段文件:
sudo mkdir /etc/nginx/snippets
2、創建第一個片段文件, letsencrypt.conf,其全路徑為: /etc/nginx/snippets/letsencrypt.conf
location ^~ /.well-known/acme-challenge/ { allow all; root /var/lib/letsencrypt/; default_type "text/plain"; try_files $uri =404; }
3、創建第二個片段文件,ssl.conf,其全路徑為: /etc/nginx/snippets/ssl.conf
ssl_dhparam /etc/ssl/certs/dhparam.pem; ssl_session_timeout 1d; ssl_session_cache shared:SSL:50m; ssl_session_tickets off; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers "ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS"; ssl_prefer_server_ciphers on; ssl_stapling on; ssl_stapling_verify on; resolver 8.8.8.8 8.8.4.4 valid=300s; resolver_timeout 30s; add_header Strict-Transport-Security "max-age=15768000; includeSubdomains; preload"; add_header X-Frame-Options SAMEORIGIN; add_header X-Content-Type-Options nosniff;
上面的代碼中包含 Mozilla 的推薦部分。 支持 OCSP Stapling,HTTP 嚴格傳輸安全(HSTS)并強制執行幾個以安全為中心的 HTTP 頭。
加載 letsencrypt.conf代碼片段創建完成之后,就可以打開 Nginx 的域名獨立配置文件,將 letsencrypt.conf 文件引入。
在這里,我們的域名是 kaifazhinan.com ,所以我們的配置文件為 kaifazhinan.com.conf, 文件的全路徑為 /etc/nginx/conf.d/kaifazhinan.com.conf。
server { listen 80; server_name kaifazhinan.com www.kaifazhinan.com; include snippets/letsencrypt.conf; }
注意: 我們建議針對不同的域名,創建不同的獨立配置文件。這樣會比較清晰,便于管理和查找對應的配置。
Nginx 的主配置文件中有一行代碼是 include /etc/nginx/conf.d/*.conf,這行代碼的意思就是加載 /etc/nginx/conf.d/ 目錄下所有以 .conf 結尾的配置文件,所以我們直接將獨立的配置文件保存在 /etc/nginx/conf.d/ 目錄下就會自動引入。
生成證書重新加載 Nginx 配置使更改生效:
sudo systemctl reload nginx
你現在可以運行 Certbot 使用 Webroot 插件,為你的域名生成 SSL 證書:
sudo certbot certonly --agree-tos --email admin@kaifazhinan.com --webroot -w /var/lib/letsencrypt/ -d kaifazhinan.com -d www.kaifazhinan.com
注意: 記得將 admin@kaifazhinan.com 換成你自己的郵箱,還有 kaifazhinan.com 和 www.kaifazhinan.com 換成你的域名。
如果成功的生成了 SSL 證書,那么 Certbot 將打印類似以下的內容:
IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/kaifazhinan.com/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/kaifazhinan.com/privkey.pem Your cert will expire on 2019-02-11. To obtain a new or tweaked version of this certificate in the future, simply run certbot again. 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配置 Nginx
現在你已經成功生成了 SSL 證書,現在可以修改 Nginx 的域名配置了,這里我們的域名是配置文件是 kaifazhinan.com.conf,文件的全路徑是 /etc/nginx/conf.d/kaifazhinan.com.conf:
server { listen 80; server_name www.kaifazhinan.com kaifazhinan.com; include snippets/letsencrypt.conf; return 301 https://$host$request_uri; } server { listen 443 ssl http2; server_name www.kaifazhinan.com; ssl_certificate /etc/letsencrypt/live/kaifazhinan.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/kaifazhinan.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/kaifazhinan.com/chain.pem; include snippets/ssl.conf; include snippets/letsencrypt.conf; return 301 https://kaifazhinan.com$request_uri; } server { listen 443 ssl http2; server_name kaifazhinan.com; ssl_certificate /etc/letsencrypt/live/kaifazhinan.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/kaifazhinan.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/kaifazhinan.com/chain.pem; include snippets/ssl.conf; include snippets/letsencrypt.conf; # 如果有補充的配置,可以寫在這里 }
上面的代碼,我們將 HTTP 的請求重定向到了 HTTPS,將 www.kaifazhinan.com 重定向到了 kaifazhinan.com 上。
最后,通過下面的命令,重新加載 Nginx,使上面的配置生效:
sudo systemctl reload nginx自動更新 Let’s Encrypt SSL 證書
Let’s Encrypt 頒發的 SSL 證書有效時間是 90 天。我們需要在證書過期之前自動續訂證書,這里將創建一個每天運行兩次的定時任務 ,并在證書到期前 30 天自動續訂。
通過運行 crontab 命令,來創建一個定時任務:
sudo crontab -e
上面的命令,會自動創建一個文件,并自動進入編輯狀態,所以直接復制下面的內容粘貼到里面即可:
0 */12 * * * root test -x /usr/bin/certbot -a ! -d /run/systemd/system && perl -e "sleep int(rand(3600))" && certbot -q renew --renew-hook "systemctl reload nginx"
保存并關閉文件。
如果要測試是否能夠正常更新證書,你可以在 certbot 命令后面添加 --dry-run 這個參數來主動觸發更新命令。
sudo certbot renew --dry-run
如果沒有輸出錯誤,則表示 SSL 證書更新成功。
總結通過此教程,你學會了:
如何使用 Let’s Encrypt 客戶端 Certbot 為你的域名創建了 SSL 證書;
也通過創建 Nginx 的代碼片段,來避免 Nginx 配置文件中的代碼冗余,并且將 SSL 證書配置到了 Nginx 服務中;
最后,你還創建了一個定時任務,來自動更新你的 SSL 證書,保證它不會過期。
如果你想了解 Certbot 的更多信息,可以參考它的官方文檔。
期待下次與你相見 : )
本文首發:開發指南:如何在 CentOS 7 上安裝 Nginx
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/40350.html
摘要:正好最近有一臺空閑的于是來搭建一個玩玩。因此我們可以申請免費的證書,這個證書不但免費,而且操作非常簡單,雖然每次只有天的有效期,但可以通過腳本配置定期更新。這個驗證服務以后更新證書還要用到,要一直保留。創建一個并通過賦予執行權限。 0x00 前言 ????????WordPress是世界上最受歡迎的CMS系統,它是基于php和MySQL技術棧的,并且還有很多插件,可擴展性非常強。正好最...
摘要:通過購買免費的證書購買地址詳細操作請點擊免費申請阿里云賽門企業級鐵克證書在上面配置我們現在這里只講解在阿里云下購買的證書進行配置,現在都有了證書,現在我們來配置。 最近項目中的網站要設置https,雖然進入軟件行業6年了,配置這個還是顯得信心不足,還好網上有好多網友分享的文章可以從中學習,但是有優也有劣,憑我自己的一點經驗從中甄選出好一點的文章跟大家分享一下。 1、什么是Https? ...
摘要:為了避免那些杯具,網站需要戴上名為的安全套。我也是經網友提醒才給網站增加了以提高安全性,謝謝他。在談安全時,從來就沒有絕對的安全,就像安全套不能百分百避免中標。要想使自己的網站時刻保持相對安全的狀態,站長本身就應該是一名黑客。 本文首發于歐雷流《給網站戴上「安全套」》。由于我會時不時對文章進行補充、修正和潤色,為了保證所看到的是最新版本,請閱讀原文。 上周六我去一家售后服務點參加了「冬...
閱讀 2141·2023-04-25 18:49
閱讀 1846·2019-08-30 14:02
閱讀 2646·2019-08-29 17:24
閱讀 3328·2019-08-28 18:10
閱讀 2929·2019-08-28 18:03
閱讀 492·2019-08-26 12:01
閱讀 3312·2019-08-26 11:31
閱讀 1424·2019-08-26 10:29