1. 程式人生 > >Let’s Encrypt免費申請ssl 證書

Let’s Encrypt免費申請ssl 證書

最近買了阿里雲的伺服器和域名,打算diy 一個小程式,登入到微信公眾平臺去繫結域名,發現微信公眾平臺要求以 https 方式通訊,在網上找了個申請免費申請ssl 證書的地方 Let’s Encrypt (口碑還不錯),接下來就給大家介紹怎麼利用Let’s Encrypt 生成ssl 證書

  1. 安裝Certbot客戶端: yum install certbot
  2. 獲取證書: certbot certonly --standalone -d example.com -d www.example.com

生成的證書文件會放到 下面的路勁下

/etc/letsencrypt/example.com

最後把  fullchain.pem,privkey.pem 

配到你的Nginx 或Apache 對應的配置中

配置完這些過後,我們的工作還沒有完成。 Let’s Encrypt 提供的證書只有90天的有效期,我們必須在證書到期之前,重新獲取這些證書,certbot 給我們提供了一個很方便的命令,那就是 certbot renew。
通過這個命令,他會自動檢查系統內的證書,並且自動更新這些證書。
我們可以執行這個命令測試一下

certbot renew --dry-run 

我在執行的時候出現了這個錯誤

Attempting to renew cert from /etc/letsencrypt/renewal/api.diamondfsd.com.conf produced an unexpected error: At least one of the required ports is already taken.. Skipping.

這是因為我域名生成證書的時候使用的是 –standalone 模式,驗證域名的時候,需要啟用443埠,這個錯誤的意思就是要啟用的埠已經被佔用了。 這時候我必須把nginx先關掉,才可以成功。果然,我先執行 service nginx stop 執行這個命令,就沒有報錯了,所有的證書都重新整理成功。

證書是90天才過期,我們只需要在過期之前執行更新操作就可以了。 這件事情就可以直接交給定時任務來完成。linux 系統上有 cron 可以來搞定這件事情。
我新建了一個檔案 certbot-auto-renew-cron, 這個是一個 cron 計劃,這段內容的意思就是 每隔 兩個月的 凌晨 3:00 執行 更新操作。

0 3 * */2 * certbot renew --pre-hook "service nginx stop" --post-hook "service nginx start"

–pre-hook 這個引數表示執行更新操作之前要做的事情,因為我有 –standalone 模式的證書,所以需要 停止 nginx 服務,解除端口占用。
–post-hook 這個引數表示執行更新操作完成後要做的事情,這裡就恢復 nginx 服務的啟用

最後我們用 crontab 來啟動這個定時任務

crontab certbot-auto-renew-cron

至此,整個網站升級到HTTPS就完成了。 總結一下我們需要做什麼

  1. 獲取Let’s Encrypt 免費證書
  2. 配置Nginx開啟HTTPS
  3. 定時重新整理證書

遇到的坑:certbot 是python 實現,安裝的過程中會發現 會報各種包找不到的錯,還有有些包明明裝了也報錯,先解除安裝它,然後再用pip安裝就可以了,其中有個 pyOpenSSL 通過這種方式解決也無濟於事,最後在Stack Overflow 找到一位大神提供的方法終於把這個問題解決

sudo python -m easy_install --upgrade pyOpenSSL

另外一個快捷方式:https://github.com/Neilpang/acme.sh/wiki/%E8%AF%B4%E6%98%8E

泛域名支援:https://github.com/Neilpang/acme.sh/tree/master/dnsapi