Let's Encrypt

Ubuntu SSL Let’s Encrypt 建置常用指令

Let’s Encrypt

安裝

$ sudo add-apt-repository ppa:certbot/certbot
$ sudo apt-get update

Nginx

$ sudo apt-get install python-certbot-nginx

Apache

$ sudo apt-get install python-certbot-apache

執行憑證驗證

$ sudo certbot

自動更新憑證

更新憑證

sudo certbot renew

測試更新憑證

sudo certbot renew --dry-run

Crontab 自動更新

需要輸入完整執行檔案名稱,然後指定需要自動更新時間

30 2 * * 1  certbot renew

/etc/ssl/certs/dhparam.pem

在安裝 SSL 憑證時,會出現下列訊息時,可以使用 openssl 去新增 dhparam.pem 憑證

nginx: [emerg] BIO_new_file("/etc/ssl/certs/dhparam.pem") failed (SSL: error:02001002:system library:fopen:No such file or directory:fopen('/etc/ssl/certs/dhparam.pem','r') error:2006D080:BIO routines:BIO_new_file:no such file)

使用下列指令可以新增 dhparam.pem 憑證

sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

移除指定憑證

如果不需要 SSL 憑證了,可以使用下列指令將網域移除

sudo certbot delete --cert-name kejyun.com

解決 certbot-auto 版本過舊問題

在使用舊版 certbot-auto 安裝憑證時,因為 certbot-auto 會自動更新自己的版本,導致發生 python 版本過舊導致無法驗證憑證

Installing Python packages...
/opt/eff.org/certbot/venv/bin/python: No module named pip.__main__; 'pip' is a package and cannot be directly executed
Traceback (most recent call last):
  File "/tmp/tmp.OGGbtieawI/pipstrap.py", line 177, in <module>
    sys.exit(main())
  File "/tmp/tmp.OGGbtieawI/pipstrap.py", line 149, in main
    pip_version = StrictVersion(check_output([python, '-m', 'pip', '--version'])
  File "/usr/lib/python2.7/subprocess.py", line 544, in check_output
    raise CalledProcessError(retcode, cmd, output=output)
subprocess.CalledProcessError: Command '['/opt/eff.org/certbot/venv/bin/python', '-m', 'pip', '--version']' returned non-zero exit status 1

可以使用 --no-self-upgrade 參數,讓 certbot-auto 不要自動更新版本

wget https://raw.githubusercontent.com/certbot/certbot/75499277be6699fd5a9b884837546391950a3ec9/certbot-auto
chmod +x ./certbot-auto
./certbot-auto --no-self-upgrade

執行 certbot 出現錯誤 Another instance of Certbot is already running

在執行 certbot 時出錯錯誤的訊息

Another instance of Certbot is already running

Certbot 不正常關閉,導致原本的 .certbot.lock 檔案還存在於主機中,此時可以透過下方指令找出 .certbot.lock 檔案是否還存在

find / -type f -name ".certbot.lock"

若檔案存在,則可以用下列指令移除所有 .certbot.lock 檔案

find / -type f -name ".certbot.lock" -exec rm {} \;

移除後再次執行 certbot 就可以正常執行了

參考資料