如何使用certbot自動更新SSL憑證 (CentOS 6,7,8, Ubuntu)

現在Google Chrome以及Firefox等瀏覽器大品牌都很要求網站本身的SSL憑證,只要是非經第三方認證的https網站,輕則顯示驚嘆號『!』,重則顯示紅色還幫你加上一個斜槓,光看就讓瀏覽者感到不安全!
還好這世界上還有佛心公司 Let’s encrypt 提供免費的SSL憑證申請服務!但是,透過此公司申請到的憑證僅有3個月的有效期限,短短三個月就又要申請一次實在是麻煩!
有鑑於此,本次要介紹 Certbot 自動更新Let’s encrypt核發SSL憑證的步驟,而且本文章一共收錄了CentOS 6, 7, 8 以及 Ubuntu 的做法喔。
Let’s encrypt傳統申請方法:如何申請免費SSL?又要怎麼安裝SSL?(以SSL For Free – Let’s Encrypt為例)

Step 1

安裝Certbot

CentOS 8

 

CentOS 7

 

CentOS 6

 

Ubuntu

 

Step 2

用Certbot申請SSL憑證

Certbot常指令說明:

  1. –apache:表示使用apache作為伺服器軟體
  2. certonly:僅申請憑證,不主動編輯httpd.conf
  3. -w:網站根目錄所在(發證單位仍然要去驗證ACME Challenge file,所以Certbot必須要把驗證檔放在正確的位置)
  4. -d:網域名稱,如果是www開頭的話,還得多指定一個去掉“www”的網址(就像本範例這樣)

CentOS 8請參考下列指令:
(下列第2行是只需要申請憑證的指令)

官方建議中這個版本的 certbot 不需要給網域名稱(-d)和網站根目錄(-w)兩個參數,因為在這個版本中 certbot 會跳出選單給各位選擇,屆時只需要回答要申請所有站台或是只要申請某幾個站台 SSL 憑證。

 

CentOS 7, Ubuntu請參考下列指令:

CentOS 6,執行sh更新,把執行名稱改一下就可以了!

 

Certbot預設SSL憑證路徑

/etc/letsencrypt/live/domain_name/

 

Step 3

修改apache config

如果你跟我一樣,之前都是自己手動申請,那就必須修改config檔!

下方 httpd 路徑是 CentOS 的預設路徑,Ubuntu的設定檔要自己找一下。

 

Step 4

測試!

讓Apache重新載入設定檔,沒錯!可以免重啟Apache唷~(最近發覺很好用的指令)

CentOS 8

 

CentOS 7/ CentOS 6

CentOS 7.4 應該要改成這個指令『sudo apachectl graceful

 

Ubuntu

 

這時候就可以用瀏覽器重新整理你的網站,看看憑證有效日期是否已更新!

Step 5

設定Certbot自動更新

贊助廣告

certbot會測試是否能更新成功(只測試,不更新)

CentOS 8

 

CentOS 7, Ubuntu

 

CentOS 6

 

設定每2個月更新一次,將更新指令加入cron
corn的詳細用法可以參考這篇:cron(crontab) – Linux常用指令#01

 

指令說明:

  1. renew:表示要求更新SSL憑證
  2. –quiet:不跳出詢問
  3. –no-self-upgrade:執行程式就好,不要更新Certbot本身!(預設是自動更新喔!)
  4. –post-hook:指定一串更新完成後要接續著執行的指令,用雙引號將指令框起來!

CentOS 8

因為 certbot 是以 python 撰寫,因此官方建議直接使用 python 執行更新憑證程式,所以記得要先確認伺服器的 python 版本以及指令是否跟我給的範例一致。
指令的部分:建議試試看 sudo 是否能執行 python,如果使用『sudo python3』找不到的話,請試試『sudo python』。若出現跟下列範例類似的訊息,代表 root 認得這個指令,所以在 crontab 之中就可以直接呼叫使用。


如果 root 認不得這個指令,那就只好用 which 找出 python(或python3) 的絕對路徑:
如此一來,你勢必也要將 crontab 指令裡面的 python3 替換成絕對路徑。

 

CentOS 7, Ubuntu

建議用 which 先看一下 certbot 的完整路徑是否跟我給的路徑 /usr/bin/certbot 一致

 

Step 6

確認SSL是否正確安裝

SSLShopper – SSL checker
把你的網址輸入到此服務,就可以確認SSL是否正確安裝喔。

 

Reference:

  1. EFF.org-Certbot
  2. Certbot Documentation
  3. How to setup Let’s Encrypt in CentOS 6 and CentOS 7-bobcares.com
  4. How To Secure Apache with Let’s Encrypt on Ubuntu 16.04-DigitalOcean
  5. The certificate is not trusted in all web browsers.

Andy Wang

站在巨人的肩膀上仍須戰戰兢兢!

4 thoughts on “如何使用certbot自動更新SSL憑證 (CentOS 6,7,8, Ubuntu)

  • 2018-04-20 at 16:15:24
    Permalink

    # sudo yum install certbot-apache
    Failed to set locale, defaulting to C
    Loaded plugins: fastestmirror
    Loading mirror speeds from cached hostfile
    * base: centos.uhost.hk
    * extras: centos.uhost.hk
    * updates: centos.uhost.hk
    No package certbot-apache available.

    Hi,
    我不能用yum安裝certbot,原因是找不到packet,請問有方法嗎?

    thanks

    PIN

    Reply
    • 2018-04-21 at 00:20:26
      Permalink

      Hi PIN,
      如果你的作業系統也是使用CentOS,不妨安裝”certbot”看看!

      certbot是包在EPEL這個Repository裡面,如果還是找不到,可以先安裝Repository: EPEL!
      下列是certbot的資訊:
      Installed Packages
      Name : certbot
      Arch : noarch
      Version : 0.22.2
      Release : 1.el7
      Size : 23 k
      Repo : installed
      From repo : epel
      Summary : A free, automated certificate authority client
      URL : https://pypi.python.org/pypi/certbot
      License : ASL 2.0
      Description : certbot is a free, automated certificate authority that aims
      : to lower the barriers to entry for encrypting all HTTP traffic on the internet.

      Reply
  • 2018-05-05 at 20:32:25
    Permalink

    問題1:關於step 2
    -d:網域名稱,如果是www開頭的話,還得多指定一個去掉“www”的網址(就像本範例這樣)
    sudo certbot –apache certonly -w /var/www/html/ -d http://www.brilliantcode.net -d brilliantcode.net
    —————————————————————————————————————————————
    想問
    若網址是xoops2.cdps.ntpc.edu.tw的話,在-d後面的指令是這樣嗎?還是?
    sudo certbot –apache certonly -w /var/www/html/ -d xoops2.cdps.ntpc.edu.tw -d cdps.ntpc.edu.tw

    問題2:關於step 3
    修改apache config,如果你跟我一樣,之前都是自己手動申請,那就必須修改config檔!
    —————————————————————————————————–
    想問,若是第一次申請設定,之前都沒申請過,step3還要做嗎?

    謝謝您~

    Reply
    • 2018-05-05 at 23:35:22
      Permalink

      問題1+問題2:假設你的apache站台只會有這個網站『xoops2.cdps.ntpc.edu.tw』,其實短時間內想完成這件事,你可以直接用下列指令來滿足你的需求!
      依據上述條件來提供給你的做法是取消『僅申請憑證』選項『certonly』,若不加此選項,certbot預設會自動幫你修改ssl.conf,也就是會自動幫你做“Step 3”!
      sudo certbot --apache -w /var/www/html/ -d xoops2.cdps.ntpc.edu.tw

      倘若你的伺服器已經有其他站台,同時也存在前人做好的設定,就不建議讓certbot自動幫你做設定!所以要加上『certonly』!
      如果對ssl.conf『/etc/httpd/conf.d/ssl.conf』不太了解,建議你可以來看一下這篇:Apache 2.4 https 多網域設定 讓一台伺服器綁定多個網址
      或者是看一下這篇:CentOS 7 架站教學彙整 (Apache 2.4 + MySQL 5.7 + php 7 + phpMyAdmin + SSH + sFTP)裡面有一區是『SSL相關教學』 😀

      Reply

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料