1分鍾了解https證書申請及配置


本文只是記錄下自已在給網站域名加上HTTPS的過程,不涉及到HTTS的具體原理,如要了解,請自行搜索相關信息。

我們知道,如果要給網站域名加上HTTPS,一般是通過購買證書或去找一些免費的證書來,花錢的這里就不說了,無非是購買證書后,配置就行了。這里說的是免費的,它就是 Let's Encrypt,其實很久之前就聽過這個東西,只是一直沒有去弄過,這次剛好需要就去看了下,沒有想像中的那么麻煩,配合第三方的腳本,簽個證書如果順利的話,簡單是分分鍾的事。

其實,剛開始我是打算用其它第三方的平台的,比如freessl 這種,后面發現真搞起來,這個也麻煩,又要注冊,也要驗證域名文件或DNS解析,最主要的是還不能自動更新證書,到期后還得重新弄,於是放棄。

所以,這里還是說下用Let's Encrypt來簽發證書和部署環境

安裝ACME

安裝之前,了解一個叫ACME(自動化證書管理環境)的東西,通過它就可以很方便的來頒發證書、驗證域名和管理證書的一些操作了,就是傻瓜化了。

有基於它實現的很多客戶端,比如certbot但是我在大概看了下后,覺得不是很簡單呀,於是在 Let's Encrypt找到了 acme.sh, 這個用起來更簡單,一個命令行的工具。

進入你的系統命令行,輸入下面的命令

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

上面的操作主要干了這么幾件事:

  1. 把acme.sh安裝到了你的用戶主目錄 $HOME下的.acme.sh文件夾下,后面你對證書的操作都在這個目錄下面,它不會去破壞你系統的其它目錄的。
  2. 創建了一個別名 alias acme.sh=~/.acme.sh/acme.sh, 后面就可以用 acme.sh來使用這個腳本了,注意如果你輸入acme.sh找不到,那么重新刷下你的用戶環境source ~/.bash_profile或開一個新的終端.
  3. 它創建了一個每天檢測證書過期的Crontab, 因為證書的時效是60天,過期了就自動更新證書。這一切都是腳本在處理,我們不需要去處理這些。

安裝完成后,輸入acme.sh --version 來看下安裝好了沒,如果找不到命令,還是一樣刷一下環境變量配置文件

生成證書

這里就通過上面安裝的acme.sh來操作了,如果要了解更多,可以去它的官網 acme.sh了解,其實,正常來說,這一步安裝的過程很簡單的,但是因為我當時趕時間要,在網上看了幾篇環境后我就操作,結果有幾個關鍵的步驟他們並沒有寫出來,導致我一直在試,一直安裝不成功,最后還觸發了Let's Encrypt的Rate Limit限制,被鎖了好久。

我有一個主域名,兩個二級域名,一開始我的命令是類似下面這樣的,

acme.sh --issue -d ezone.com -d mc.ezone.com -d ag.ezone.com -w /home/wwwroot/ezone.com

上面這個命令的意思是說,我要給三個域名弄一個證書,他們的證書文件都是一樣的。網站主目錄都是一樣,在 /home/wwwroot/ezone.com下面,一開始我沒有理解到,以為只要配置任何一個域名的主目錄就行了。因為我的這三個域名文件都是在一台機器上面的,所以它們的主目錄肯定不可能是一樣的.

所以第一個坑就是目錄這里我沒有做對。

第二個坑就是,因為上面的那種方式是通過http的方式來驗證的,也就是說腳本它會在你的網站目錄生成類似.well-known/acme-challenge/qsNtqqNOqcAIczvulbYtcd78jdd0GGYR6wZgCW6M-ao這種的。這種是需要在你的Nginx中配置的。我一開始也沒有配置,導致一直不成功。於是在各個網站的Nginx配置中加上配置

 location ~ /\.well-known/acme-challenge/ {
        allow all;
         root /home/www/web_data/ezone.com;
        try_files $uri =404;
        break;
    }

第三個坑就是,開始沒有注意到,應該用他們的測試環境來做,雖然也有Rate Limit限制,但是寬松很多。用測試環境,就用 acme.sh --test --issue這種方式來弄。

所以總結一下,就是如果要生成證書,那么首先你要配置你的Nginx目錄,然后如果是多域名,要注意你的網站主目錄,另外盡量用測試環境,等沒問題了,再用正式的來重新生成就行了。

不過,后面我找到一種更簡單的,它有種模式叫 Nginx modeApache mode這種,這種驗證不需要在你的網站上面寫入任何文件來驗證, 就是加了一個 --nginx這種。

acme.sh --issue --nginx -d ezone.com -d mc.ezone.com -d agt.ezone.com

好了,如果沒什么問題,成功后證書就生成在你的用戶目錄~/.acme.sh/ezone.com下面了,但是這個目錄是acme.sh腳本內部去控制的,也不知道那天會變,而且我們的Nginx也是讀不到這個目錄的。那么就只能將這些文件拷到Nginx能讀取的地方了。

安裝證書

將上面生成的文件,安裝拷貝到Nginx的某個目錄,比如 /etc/nginx/ssl沒有這個就建一個,然后執行下面的語句,將文件拷過去,並加載Nginx

acme.sh --install-cert -d ezone.com \
--key-file       /etc/nginx/ssl/ezone.com.key \
--fullchain-file  /etc/nginx/ssl/ezon.com.cer \
--reloadcmd     "systemctl reload nginx"

/etc/nginx/ssl下面就有上面的兩個文件了,然后我們再配置Nginx

server {
    listen       443 ssl http2 default_server;
    server_name ezone.com
    root    /home/web_data/ezonepay.com
    index   index.php index.html index.htm;

    ssl_certificate /etc/nginx/ssl/ezone.com.cer;
    ssl_certificate_key /etc/nginx/ssl/ezone.com.key;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout  10m;
    ssl_ciphers HIGH:!aNULL:!MD5;
   }

好了,經過上面的步驟,HTTPS證書就弄完了,可以用 https:// 來訪問你的網站了,通過acme.sh這個還是挺方便的。而且,后續的更新也不要自已去維護。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM