acme.sh 配合 letsencrypt 配置泛域名

更多方式請查看: letsencrypt/client-optionshtml

acme.sh 官方 wiki 說明nginx

1. 安裝 acme.sh

安裝:git

curl  https://get.acme.sh | sh
複製代碼

注:將會安裝到 ~/.acme.sh/ 目錄下,之後全部的配置默認也在這個目錄下github

設置 alias:web

alias acme.sh=~/.acme.sh/acme.sh  # .bashrc or .zshrc or .config/fish/fish.
複製代碼

2). 自動爲你建立 cronjob, 天天 0:00 點自動檢測全部的證書, 若是快過時了, 須要更新, 則會自動更新證書.api

更高級的安裝選項請參考: https://github.com/Neilpang/acme.sh/wiki/How-to-installbash

2. 生成證書

acme.sh 實現了 acme 協議支持的全部驗證協議. 通常有兩種方式驗證: http 和 dns 驗證,這裏僅介紹 DNS 方式服務器

1. 方式一:使用 token

acme.sh 支持直接使用主流 DNS 提供商的 API 接口來完成域名驗證以及一些相關操做dom

具體 dnsapi 連接curl

這裏以 阿里雲 爲例:

首先獲取你的阿里雲API Key: ak-console.aliyun.com/#/accesskey

以後在你的終端配置文件中設置:

export Ali_Key="sdfsdfsdfljlbjkljlkjsdfoiwje"
export Ali_Secret="jlsdflanljkljlfdsaklkjflsa"
複製代碼

以後直接使用以下命令發起申請:

acme.sh --issue --dns dns_ali -d example.com -d *.example.com 
複製代碼

Ali_KeyAli_Secret 將被保存在 ~/.acme.sh/account.conf , 命令中 dns_ali 指明使用 阿里的dns

來生成證書,注意這裏第一個域名爲頂級域名,後面個爲泛域名。

這種方式將自動爲你的域名添加一條 txt 解析,驗證成功後,這條解析記錄會被刪除,因此對你來講是無感的,就是要等 120秒

證書生成成功後,默認保存在 .acme.sh/hostname 中。

若想自定義證書目錄,可加上 -w 參數

acme.sh --issue --dns dns_ali -d *.example.com -w /etc/letsencrypt/*.example.com
複製代碼

2. 方式二:添加一條 txt 解析記錄

命令:

acme.sh  --issue  --dns -d example.com -d *.example.com
複製代碼

須要同時添加裸域名及泛域名。注意要將非泛域名的域名放在前面,不然可能會遇到一些問題。

而後, acme.sh 會生成相應的解析記錄顯示出來, 示例以下:

Multi domain='DNS:bitcat.cc,DNS:*.example.com'
Getting domain auth token for each domain
Getting webroot for domain='example.com'
Getting webroot for domain='*.example.com'
Add the following TXT record:
Domain: '_acme-challenge.example.com'
TXT value: '<ACME_CHALLENGE_STRING>'
Please be aware that you prepend _acme-challenge. before your domain
so the resulting subdomain will be: _acme-challenge.example.com
Please add the TXT records to the domains, and retry again.
Please add '--debug' or '--log' to check more details.
See: https://github.com/Neilpang/acme.sh/wiki/How-to-debug-acme.sh
複製代碼

記錄下其中的 <ACME_CHALLENGE_STRING> 並前往你的 DNS 服務提供商,爲主機名 _acme-challenge 添加一條 TXT 記錄,內容即爲上述的 <ACME_CHALLENGE_STRING>。提交後能夠等待一小段時間以便讓 DNS 生效。

從新申請簽發證書:

acme.sh --renew --dns -d example.com -d *.example.comacme.sh
複製代碼

注意第二次這裏用的是 --renew

3. 證書使用

這裏僅用 nginx 服務器配置作示例:

nginx 配置文件重點介紹:

  • Nginx 的配置 ssl_certificatessl_trusted_certificate 使用 fullchain.cer ,而非 <domain>.cer ,不然 SSL Labs 的測試會報 Chain issues Incomplete 錯誤

  • ssl_dhparam 經過下面命令生成:

    sudo mkdir /etc/nginx/ssl
    sudo openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048
    複製代碼

nginx.conf 配置示例:

server {
    listen 80;
    server_name mark.example.com;

    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name mark.example.com;

    ssl_certificate /etc/letsencrypt/live/*.example.com/fullchain.cer;
    ssl_certificate_key /etc/letsencrypt/live/*.example.com/*.example.com.key;

    # disable SSLv2
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

    # ciphers' order matters
    ssl_ciphers "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!aNULL";

    # the Elliptic curve key used for the ECDHE cipher.
    ssl_ecdh_curve secp384r1;

    # use command line
    # openssl dhparam -out dhparam.pem 2048
    # to generate Diffie Hellman Ephemeral Parameters
    ssl_dhparam /etc/nginx/ssl/dhparam.pem;

    # let the server choose the cipher
    ssl_prefer_server_ciphers on;

    # turn on the OCSP Stapling and verify
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_trusted_certificate /etc/letsencrypt/live/*.example.com/fullchain.cer;

    # http compression method is not secure in https
    # opens you up to vulnerabilities like BREACH, CRIME
    gzip off;

    location / {
        root /mnt/var/www/tofar/mark.example.com;
        index index.html;
    }

    error_log  /mnt/log/nginx/mark.example.com/error.log;
    access_log /mnt/log/nginx/mark.example.com/access.log;
}
複製代碼

以後重啓 nginx 便可:

sudo nginx -s reload
or sudo openresty -s reload # 若安裝的是openresty
複製代碼

4. 更新證書

目前證書在 60 天之後會自動更新, 你無需任何操做,不過都是自動的, 你不用關心.

5. 更新 acme.sh

目前因爲 acme 協議和 letsencrypt CA 都在頻繁的更新, 所以 acme.sh 也常常更新以保持同步.

升級 acme.sh 到最新版 :

acme.sh --upgrade
複製代碼

若是你不想手動升級, 能夠開啓自動升級:

acme.sh  --upgrade  --auto-upgrade
複製代碼

以後, acme.sh 就會自動保持更新了.

你也能夠隨時關閉自動更新:

acme.sh --upgrade  --auto-upgrade  0
複製代碼

更高級的用法請參看 wiki 頁面

相關文章
相關標籤/搜索