我用一個腳本把系統升級到https,並且永久免費!

 做者:猿話

連接:urlify.cn/bQZnYz

正文nginx

如今不少站長都會考慮將本身的站點從http升級到https,不只是基於安全的考慮,有的也是由於第三方平臺的限制,如谷歌瀏覽器會將http站點標記爲不安全的站點,微信平臺要求接入的微信小程序必須使用https等。git

那如何將一個http站點升級爲https站點呢?程序員

http與https的區別

爲了數據傳輸的安全,https在http的基礎上加入了ssl協議,ssl協議依靠證書來驗證服務器的身份,併爲瀏覽器和服務器之間的通訊加密。要想將http升級爲https,只須要給http站點增長一個CA證書便可。github

目前獲取CA證書有兩種途徑:web

  1. 購買收費的CA證書
  2. 獲取免費的證書

收費的CA證書各大服務提供商都有賣,如阿里雲、騰訊雲等。面試

【系統架構】如何升級到https?一個腳本幫你搞定,且永久免費

收費的證書不便宜,從阿里雲官方網站看,它的價格能夠從幾千元到上萬元不等。算法

【系統架構】如何升級到https?一個腳本幫你搞定,且永久免費

這對於小公司平臺,甚至是我的站點來講,是一個不小的開支。apache

Letsencrypt是一個免費、自動化和開放的證書頒發機構,其頒發的證書一次有效期爲三個月,可是隻要能持續更新,基本能夠永久使用。編程

關注公衆號程序員小樂回覆關鍵字「offer」獲取算法面試題和答案。小程序

今天推薦的這個腳本acme.sh,實現了 acme 協議, 能夠幫你持續自動從Letsencrypt更新CA證書。下載地址以下:

https://github.com/Neilpang/acme.sh

安裝 acme.sh

安裝acme.sh很簡單,一個命令便可:

curl https://get.acme.sh | sh

普通用戶和 root 用戶均可以安裝使用。安裝過程進行了如下幾步:

一、把acme.sh安裝到你的home目錄下:

~/.acme.sh/

並建立 一個 bash 的 alias,方便你使用:alias acme.sh=~/.acme.sh/acme.sh

二、自動爲你建立 cronjob,天天 0:00 點自動檢測全部的證書。若是快過時了,須要更新,則會自動更新證書,安裝過程不會污染已有的系統任何功能和文件,全部的修改都限制在安裝目錄中:~/.acme.sh/

生成證書

acme.sh 實現了 acme 協議支持的全部驗證協議, 通常有兩種方式驗證:http 和 dns 驗證。

一、http 方式須要在你的網站根目錄下放置一個文件, 來驗證你的域名全部權,完成驗證,而後就能夠生成證書了。

acme.sh --issue -d mydomain.com -d www.mydomain.com --webroot /home/wwwroot/mydomain.com/

acme.sh 會全自動的生成驗證文件, 並放到網站的根目錄,而後自動完成驗證。最後會聰明的刪除驗證文件,整個過程沒有任何反作用。

若是你用的是apache服務器,acme.sh 還能夠智能的從 apache的配置中自動完成驗證,你不須要指定網站根目錄:

acme.sh --issue -d mydomain.com --apache

若是你用的是nginx服務器,或者反代,acme.sh還能夠智能的從 nginx的配置中自動完成驗證,你不須要指定網站根目錄:

acme.sh --issue -d mydomain.com --nginx

注意:不管是 apache 仍是 nginx 模式,acme.sh在完成驗證以後,會恢復到以前的狀態,都不會私自更改你自己的配置。好處是你不用擔憂配置被搞壞,但也有一個缺點,你須要本身配置 ssl 的配置,不然,只能成功生成證書,你的網站仍是沒法訪問https。可是爲了安全,你仍是本身手動改配置吧。

若是你尚未運行任何 web 服務,80 端口是空閒的, 那麼 acme.sh 還能僞裝本身是一個webserver, 臨時聽在80 端口,完成驗證:

acme.sh --issue -d mydomain.com --standalone

二、dns 方式,在域名上添加一條 txt 解析記錄,驗證域名全部權。

這種方式的好處是,你不須要任何服務器,不須要任何公網 ip,只須要 dns 的解析記錄便可完成驗證。不過,壞處是,若是不一樣時配置 Automatic DNS API,使用這種方式 acme.sh 將沒法自動更新證書,每次都須要手動再次從新解析驗證域名全部權。

acme.sh --issue --dns -d mydomain.com

而後,acme.sh 會生成相應的解析記錄顯示出來,你只須要在你的域名管理面板中添加這條 txt 記錄便可。

等待解析完成以後, 從新生成證書:

acme.sh --renew -d mydomain.com

注意:第二次這裏用的是 --renew

dns 方式的真正強大之處在於可使用域名解析商提供的 api 自動添加 txt 記錄完成驗證。

關注公衆號【Java後端編程】回覆關鍵字「Java」獲取Java面試題和答案。

acme.sh 目前支持 cloudflare, dnspod, cloudxns, godaddy 以及 ovh 等數十種解析商的自動集成。

copy/安裝 證書

前面證書生成之後,接下來須要把證書 copy 到真正須要用它的地方。

注意:默認生成的證書都放在安裝目錄下:~/.acme.sh/,請不要直接使用此目錄下的文件。例如,不要直接讓 nginx/apache 的配置文件使用這下面的文件。這裏面的文件都是內部使用,並且目錄結構可能會變化。

正確的使用方法是使用 --installcert 命令,並指定目標位置,而後證書文件會被copy到相應的位置,例如:

acme.sh --installcert -d <domain>.com \

--key-file /etc/nginx/ssl/<domain>.key \

--fullchain-file /etc/nginx/ssl/fullchain.cer \

--reloadcmd "service nginx force-reload"

一個小提醒,這裏用的是 service nginx force-reload,不是 service nginx reload,據測試, reload並不會從新加載證書,因此用的 force-reload。

Nginx 的配置 ssl_certificate 使用 /etc/nginx/ssl/fullchain.cer,而非 /etc/nginx/ssl/ .cer ,不然 SSL Labs 的測試會報 Chain issues Incomplete 錯誤。

--installcert命令能夠攜帶不少參數,來指定目標文件。而且能夠指定 reloadcmd, 當證書更新之後,reloadcmd會被自動調用,讓服務器生效。

值得注意的是,這裏指定的全部參數都會被自動記錄下來,並在未來證書自動更新之後,被再次自動調用。

更新證書

目前證書在 60 天之後會自動更新,你無需任何操做。從此有可能會縮短這個時間,不過都是自動的,你不用關心。

更新 acme.sh

目前因爲 acme 協議和 Letsencrypt CA 都在頻繁的更新,所以 acme.sh 也常常更新以保持同步。

升級 acme.sh 到最新版 :

acme.sh --upgrade

若是你不想手動升級, 能夠開啓自動升級:

acme.sh --upgrade --auto-upgrade

以後, acme.sh 就會自動保持更新了。

你也能夠隨時關閉自動更新:

acme.sh --upgrade --auto-upgrade 0

出錯怎麼辦:

若是出錯, 請添加 debug log:

acme.sh --issue ..... --debug

或者:

acme.sh --issue ..... --debug 2

最後,本文並不是徹底的使用說明,還有不少高級的功能,更高級的用法請參看其餘 wiki 頁面。

地址:github.com/Neilpang/acme.sh/wiki

 
    
    
     
     
              
     
 
    

最近熱文:

一週內B站瘋轉5.6W次,好東西呀!

TikTok軟件,請務必謹慎使用!

Docker 被禁,有哪些開源產品能夠替代

25 個提高開發幸福感的 VSCode 擴展

我覺得的週末 vs 實際上的週末

限時加入!程序員讀者微信羣,先到先得!


2T技術資源大放送!包括但不限於:C/C++,Linux,Python,Java,人工智能,考研,軟考,英語,等等。在公衆號內回覆「 資源 」,便可免費獲取!回覆「社羣」,能夠邀請你加入讀者羣!


  
     
     
      
      
               
      
  
     
明天見(。・ω・。)ノ♡

本文分享自微信公衆號 - 程序IT圈(DeveloperIT)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索