使用acme.sh擼一個免費且自動更新的HTTPS證書

前言

一直想擼一下https,最近恰好有點空,就實現了一下。以前看過一篇教你快速擼一個免費HTTPS證書的文章,經過Certbot來管理Let's Encrypt的證書,使用前須要安裝一堆庫,以爲不太友好。所謂條條大路通羅馬,確定還有其餘方法能夠作這個事情。html

通過一番研究,發現了 acme.sh 這個庫,這個是用Shell腳本編寫的,不須要安裝其餘東西,比較純淨,以爲比較適合本身,記錄一下過程。nginx

準備工做

  1. 一個已解析好的域名(能夠用http來訪問)。
  2. 開啓服務器的443端口防火牆。

步驟

1、安裝acme.sh

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

這個命令後會將acme.sh安裝到~/.acme.sh/目錄下
從新載入~/.bashrcgit

source ~/.bashrc

2、生成證書

acme.sh  --issue -d www.your-domin.com  --webroot  /srv/your-domin.com/

這個命令的意思是用http方式將www.your-domin.com生成一個證書,/srv/your-domin.com/是你的網站根目錄。(這個過程當中acme.sh 會全自動的生成驗證文件, 並放到網站的根目錄, 而後自動完成驗證. 最後又自動刪除驗證文件.)github

3、安裝或copy證書到nginx目錄

默認生成的證書都放在安裝目錄下: ~/.acme.sh/,這個目錄通常來講不能讓nginx或Apache直接使用。因此咱們須要將證書放到一個指定的目錄,習慣是放在/etc/nginx/ssl/目錄下。acme提供了--installcert來安裝證書,只需指定目標位置, 而後證書文件會被copy到相應的位置。
先確保存在/etc/nginx/ssl/目錄web

mkdir /etc/nginx/ssl

copy證書並指定nginx reload命令ruby

acme.sh  --installcert  -d  www.your-domin.com   \
        --key-file   /etc/nginx/ssl/www.your-domin.com.key \
        --fullchain-file /etc/nginx/ssl/fullchain.cer \
        --reloadcmd  "service nginx force-reload"

service nginx force-reload是爲了在讓acme自動更新時候可以重啓nginx使得證書生效。執行完命令能夠在/etc/nginx/ssl/看到多了www.your-domin.com.keywww.your-domin.com.cer的文件。bash

4、生成 dhparam.pem 文件

openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048

這一步不是必須,但最好加上,後面配置好後會經過ssllabs.com 來驗證一下,若是這一步ssl_dhparam 未配置,將致使 ssllabs.com 的評分降到 B。A+是最好。服務器

5、配置nginx

證書已安裝完畢,接下來就是讓nginx來使用這個證書了。因爲我這個服務器有幾個站點,而目前只是一個站點配置了證書,所以只修改當前站點的conf便可dom

server {
    listen       80;
    server_name www.your-domin.com;
    listen       443 ssl http2 default_server;
    listen       [::]:443 ssl http2 default_server;
    ssl_certificate /etc/nginx/ssl/www.your-domin.com.cer;
    ssl_certificate_key /etc/nginx/ssl/www.your-domin.com.key;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_dhparam /etc/nginx/ssl/dhparam.pem;
    ...
}

ssl_prefer_server_ciphers on; 這個配置能提升證書的評分。
ssl_dhparam /etc/nginx/ssl/dhparam.pem; 能提升證書評分,這個文件是在第四步時生成的,若沒有作則不須要寫這句。
nginx -t驗證一下nginx配置是否正確,而後systemctl restart nginx重啓一下nginx,就能夠用https://www.your-domin.com測...curl

6、證書更新

Let's Encrypt 的證書有效期是 90 天的,須要按期從新申請,不過acme在安裝的時候就已經設置了自動更新,因此這一步不用關心,很省心。
這裏瞭解一下acme.sh的自動更新:安裝acme時會自動爲你建立 cronjob, 天天 0:00 點自動檢測全部的證書, 若是快過時了, 須要更新, 則會自動更新證書.
查看任務

# crontab -l
47 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null

手動renew一下證書能夠經過這個命令

acme.sh --cron -f

7、設置軟件自動更新

目前因爲 acme 協議和 letsencrypt CA 都在頻繁的更新, 所以 acme.sh 也常常更新以保持同步.因此爲了省心省力,最好仍是設置一下軟件的自動更新,執行下面的命令就能夠了。

acme.sh  --upgrade  --auto-upgrade

其餘

在這個網站能夠驗證一下你的證書級別,根據我上面的配置能夠評級爲A。
https://www.ssllabs.com/sslte...

參考文章

相關文章
相關標籤/搜索