update on 181011:php
Standalone vs Webroot 方式對比
https://moxo.io/blog/2018/01/30/obtain-and-renew-tls-certs-using-letsencrypt/html
若是是測試環境,我認爲stand alone方式最簡便。生產環境,最好用商業的證書,或者webroot方式。linux
若是使用了 Let's Encrypt的證書,必定要作crontab任務,使用certbot-auto 定時更新證書,防止過時前忘記更新。nginx
使用 Let’s Encrypt 申請 TLS 證書,拋開官方給的 Apache/Nginx plugin,主要能夠分爲 Standanlone 和 Webroot 兩種認證方式,主要區別在於:git
A/AAAA
記錄將 site.com 指向了 12.34.56.78
這個 IP,此時使用 Standalone 不會有問題,但一旦打開 CDN,極可能首先 IP 就會變成 CDN 分配的 87.65.43.21
,而 Standalone 的驗證方式又須要請求 IP 和提供的 IP 徹底一致,因此會致使驗證失敗;
本文是轉載,來源:github
LinuxStory 原創教程: https://linuxstory.org/deploy-lets-encrypt-ssl-certificate-with-certbot/web
、http 和 https 是什麼?編程
簡單來講,http 是一個傳輸網頁內容的協議,好比你看到的 http 開頭的網站 http://www.163.com,其網頁上的文字、圖片、 CSS 、 JS 等文件都是經過 http 協議傳輸到咱們的瀏覽器,而後被咱們看到。瀏覽器
而 https 能夠理解爲「 HTTP over SSL/TLS 」,好端端的 http 爲何須要「 over SSL/TLS」呢,由於 http 是明文傳輸的,經過 http 協議傳輸的內容很容易被偷看和篡改,爲了安全(你確定不想被人偷看或者篡改網頁內容吧,好比網站銀行密碼什麼的。)就爲 http 協議再加上了一層 SSL/TLS 安全協議,因此就有了 https 。安全
二、SSL/TLS 是什麼?
「 HTTP over SSL/TLS 」字面意思就是帶「安全套接層」的 http 協議,心裏純潔的同窗也能夠理解爲「帶安全套的 http 」,由於帶了安全套,因此固然會比較安全(/(ㄒoㄒ)/~~)。其中 SSL 是「 Secure Sockets Layer 」 的縮寫,是「安全套接層」的意思。 TLS 是 「Transport Layer Security」 的縮寫,是 」 傳輸層安全協議 」 的意思。 SSL 和 TLS 是同一個東西的不一樣階段,理解爲同一個東西也行,都是安全協議就對了。
三、爲何要部署 https?
說到底,就是 https 更安全。甚至爲了安全,一個專業可靠的網站, https 是必須的。 Firefox 和 Chrome 都計劃將沒有配置 SSL 加密的 http 網站標記爲不安全(貌似 Firefox 50 已經這麼幹了),目前它們也正在聯合其餘相關的基金會與公司推進整個互聯網 https 化,如今你們訪問的一些主要的網站。如 Google 多年前就已經所有啓用 https ,國內的淘寶、搜狗、知乎、百度等等也全面 https 了。甚至 Google 的搜索結果也正在給予 https 的網站更高的排名和優先收錄權。
四、怎麼部署 https 呢?
你只須要有一張被信任的 CA ( Certificate Authority )也就是證書受權中心頒發的 SSL 安全證書,而且將它部署到你的網站服務器上。一旦部署成功後,當用戶訪問你的網站時,瀏覽器會在顯示的網址前加一把小綠鎖,代表這個網站是安全的,固然同時你也會看到網址前的前綴變成了 https ,再也不是 http 了。
五、怎麼得到 SSL 安全證書呢?
理論上,咱們本身也能夠簽發 SSL 安全證書,可是咱們本身簽發的安全證書不會被主流的瀏覽器信任,因此咱們須要被信任的證書受權中心( CA )簽發的安全證書。而通常的 SSL 安全證書籤發服務都比較貴,好比 Godaddy 、 GlobalSign 等機構簽發的證書通常都須要20美金一年甚至更貴,不過爲了加快推廣 https 的普及, EEF 電子前哨基金會、 Mozilla 基金會和美國密歇根大學成立了一個公益組織叫 ISRG ( Internet Security Research Group ),這個組織從 2015 年開始推出了 Let’s Encrypt 免費證書。這個免費證書不只免費,並且還至關好用,因此咱們就能夠利用 Let’s Encrypt 提供的免費證書部署 https 了。那麼怎麼得到 Let’s Encrypt 安全證書,而且將它部署在本身的網站服務器上呢?這就是這篇文章要講的內容了。
注:對 https 、數字證書及 CA 的工做原理感興趣的同窗能夠閱讀編程隨想的系列文章。
前面已經介紹過, Let’s Encrypt 是 一個叫 ISRG ( Internet Security Research Group ,互聯網安全研究小組)的組織推出的免費安全證書計劃。參與這個計劃的組織和公司能夠說是互聯網頂頂重要的先驅,除了前文提到的三個牛氣哄哄的發起單位外,後來又有思科(全球網絡設備製造商執牛耳者)、 Akamai 加入,甚至連 Linux 基金會也加入了合做,這些大牌組織的加入保證了這個項目的可信度和可持續性。
儘管項目自己以及有該項目簽發的證書很可信,但一開始 Let’s Encrypt 的安全證書配置起來比較麻煩,須要手動獲取及部署。存在必定的門檻,沒有一些技術底子可能比較難搞定。而後有一些網友就本身作了一些腳原本優化和簡化部署過程。其中有一個網友 xdtianyu 作了一個能夠快速獲取及更新證書的 letsencrypt.sh 腳本被普遍使用,地址以下:
1 |
https://raw.githubusercontent.com/xdtianyu/scripts/master/lets-encrypt/letsencrypt.sh |
首先要感謝 xdtianyu 同窗的努力付出。我以前用的也是這個腳本,不知道是否是姿式不對,雖然順利地按照流程裝上了,但用 SSLlabs 檢測我配的網站仍是不太安全,在不少瀏覽器上都被標註爲「不安全」。當時由於忙也沒有太多時間折騰和細究,不事後來 ISRG 的發起者 EFF (電子前哨基金會)爲 Let’s Encrypt 項目發佈了一個官方的客戶端 Certbot ,利用它能夠徹底自動化的獲取、部署和更新安全證書。這真是很是容易、方便呀,因此咱們就能夠直接使用官方客戶端,不須要再使用第三方的工具了。雖然第三方工具也可使用,可是官方工具更權威,風險也更小,並且遇到問題也更容易解決,畢竟有官方的支持。況且 Certbot 確實很是方便,也比全部的第三方工具都更方便,何樂而不用呢?
Certbot 的官方網站是 https://certbot.eff.org/ ,打開這個連接選擇本身使用的 web server 和操做系統,EFF 官方會給出詳細的使用方法,以下圖,不過我以爲這樣仍是太複雜,太麻煩,因此建議讀者朋友能夠不用看這個網站,按照個人方法走一遍便可。我本身的我的網站( https://wenqixiang.com )和本站( https://linuxstory.org )都是按此方法配置,如下以本網站域名( linuxstory.org )舉例。
假定運行環境:Debian 8.0 64 位(本教程一樣適用於 Debian 、 Ubuntu 、 CentOS 、 Arch Linux 、), Web 服務器是 Nginx 1.10 ,當前工做目錄爲 /home/linuxstory 家目錄。若是是從零開始配置服務器,推薦使用 Debian 8 + lnmp 做爲網站環境。
一、獲取 Certbot 客戶端
1 2 3 |
wget https://dl.eff.org/certbot-auto chmod a+x ./certbot-auto ./certbot-auto --help |
二、配置 nginx 、驗證域名全部權
在虛擬主機配置文件( /usr/local/nginx/conf/vhost/linuxstory.org.conf )中添加以下內容,這一步是爲了經過 Let’s Encrypt 的驗證,驗證 linuxstory.org 這個域名是屬於個人管理之下。(具體解釋可見下一章「一些補充說明」的「 certbot 的兩種工做方式」)
1 2 3 4 5 6 7 8 |
location ^~ /.well-known/acme-challenge/ { default_type "text/plain"; root /home/wwwroot/linuxstory.org/; }
location = /.well-known/acme-challenge/ { return 404; } |
三、重載 nginx
配置好 Nginx 配置文件,重載使修改生效(若是是其餘系統 nginx 重載方法可能不一樣)
1 |
sudo nginx -s reload |
四、生成證書
1 |
./certbot-auto certonly --webroot -w /home/wwwroot/linuxstory.org -d linuxstory.org |
中間會有一些自動運行及安裝的軟件,不用管,讓其自動運行就好,有一步要求輸入郵箱地址的提示,照着輸入本身的郵箱便可,順利完成的話,屏幕上會有提示信息。
此處有坑!若是順利執行請直接跳到第五步,我在本身的服務器上執行屢次都提示
1 |
connection :: The server could not connect to the client for DV :: DNS query timed out |
發現問題出在 DNS 服務器上,我用的是 DNSpod ,沒法經過驗證,最後是將域名的 DNS 服務器臨時換成 Godaddy 的才解決問題,經過驗證,而後再換回原來的 DNSpod 。
證書生成成功後,會有 Congratulations 的提示,並告訴咱們證書放在 /etc/letsencrypt/live 這個位置
1 2 3 4 5 |
IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at /etc/letsencrypt/live/linuxstory.org/fullchain.pem. Your cert will expire on 2017-02-011. To obtain a new version of the certificate in the future, simply run Let's Encrypt again. |
五、配置 Nginx(修改 /usr/local/nginx/conf/vhost/linuxstory.org.conf),使用 SSL 證書
1 2 3 4 5 6 7 |
listen 443 ssl; server_name linuxstory.org www.linuxstory.org; index index.html index.htm index.php; root /home/wwwroot/linuxstory.org; ssl_certificate /etc/letsencrypt/live/linuxstory.org/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/linuxstory.org/privkey.pem; |
上面那一段是配置了 https 的訪問,咱們再添加一段 http 的自動訪問跳轉,將全部經過 http://www.linuxstory.org 的訪問請求自動重定向到 https://linuxstory.org
1 2 3 4 5 |
server { listen 80; server_name linuxstory.org www.linuxstory.org; return 301 https://$server_name$request_uri; } |
六、重載 nginx,大功告成,此時打開網站就能夠顯示綠色小鎖了
1 |
sudo nginx -s reload |
出於安全策略, Let’s Encrypt 簽發的證書有效期只有 90 天,因此須要每隔三個月就要更新一次安全證書,雖然有點麻煩,可是爲了網絡安全,這是值得的也是應該的。好在 Certbot 也提供了很方便的更新方法。
一、測試一下更新,這一步沒有在真的更新,只是在調用 Certbot 進行測試
1 |
./certbot-auto renew --dry-run |
若是出現相似的結果,就說明測試成功了(總之有 Congratulations 的字眼)
1 2 3 4 |
Congratulations, all renewals succeeded. The following certs have been renewed: /etc/letsencrypt/live/linuxstory.org/fullchain.pem (success) ** DRY RUN: simulating 'certbot renew' close to cert expiry ** (The test certificates above have not been saved.) |
二、手動更新的方法
1 |
./certbot-auto renew -v |
三、自動更新的方法
1 |
./certbot-auto renew --quiet --no-self-upgrade |
一、certbot-auto 和 certbot
certbot-auto 和 certbot 本質上是徹底同樣的;不一樣之處在於運行 certbot-auto 會自動安裝它本身所須要的一些依賴,而且自動更新客戶端工具。所以在你使用 certbot-auto 狀況下,只需運行在當前目錄執行便可
1 |
./certbot-auto |
二、certbot的兩種工做方式
certbot (其實是 certbot-auto ) 有兩種方式生成證書:
本文用的是 webroot 方式,也只推薦 webroot 方式,這也是前文第二步驗證域名全部權在 nginx 虛擬主機配置文件中添加 location 段落內容的緣由。
本文連接: https://linuxstory.org/deploy-lets-encrypt-ssl-certificate-with-certbot
LinuxStory 原創教程,轉載請註明出處,不然必究相關責任。