1. 程式人生 > 實用技巧 >Acme-https證書申請

Acme-https證書申請

Linux下使用acme.sh 配置https 免費證書

簡單來說acme.sh 實現了 acme 協議, 可以從 let‘s encrypt 生成免費的證書。
acme.sh 有以下特點:
一個純粹用Shell(Unix shell)語言編寫的ACME協議客戶端。
完整的ACME協議實施。 支援ACME v1和ACME v2 支援ACME v2萬用字元證書
簡單,功能強大且易於使用。你只需要3分鐘就可以學習它。
Let's Encrypt免費證書客戶端最簡單的shell指令碼。
純粹用Shell編寫,不依賴於python或官方的Let's Encrypt客戶端。
只需一個指令碼即可自動頒發,續訂和安裝證書。 不需要root/sudoer訪問許可權。
支援在Docker內使用,支援IPv6

Github連結:https://github.com/acmesh-official/acme.sh

本文記錄了我在把網站從HTTP升級到 HTTPS ,申請和安裝SSL證書路上踩過的幾個坑。

安裝環境:
作業系統:centos 7 X64
SSL證書來源:Let's Encrypt
安裝用指令碼:acme.sh
伺服器:nginx
域名:*.7dianchina.com

1、安裝acme.sh

# yum -y isntall curl
# curl  https://get.acme.sh | sh
會有紅色的提示
[Wed Apr 29 14:07:14 CST 2020] Please refer to https://curl.haxx.se/libcurl/c/libcurl-errors.html for error code: 7
[Wed Apr 29 14:07:14 CST 2020] Please refer to https://curl.haxx.se/libcurl/c/libcurl-errors.html for error code: 7

檢查是否安裝好

#直接執行
acme.sh
#如報錯請執行如下
source ~/.bashrc

安裝完成後的工作目錄在當前使用者的.acme.sh【~/.acme.sh】

2、安裝後的配置

把 acme.sh 安裝到你的 home 目錄下:~/.acme.sh/並建立 一個 bash 的 alias, 方便你的使用:

alias acme.sh=~/.acme.sh/acme.sh
echo 'alias acme.sh=~/.acme.sh/acme.sh' >>/etc/profile

安裝過程中會自動為你建立 cronjob, 每天 0:00 點自動檢測所有的證書, 如果快過期了, 需要更新, 則會自動更新證書(可執行crontab -l 檢視)。

13 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null

3、獲取阿里雲的ID和Secret

獲取Ali_Key 和 Ali_Secret的地址

# 替換成從阿里雲後臺獲取的金鑰
export Ali_Key="LTAI4G6QiGt5SCkfPp8dZVzS"
export Ali_Secret="8GaI2rZ9E0ZFGQVySzgzfwmhTyb732"

# 新增完成後
~/.acme.sh/account.conf能看到阿里的ID和Secret

其他地方註冊的請參考這裡

4、生成證書

# 換成自己的域名
acme.sh --issue --dns dns_ali -d goodwell00.com -d *.goodwell00.com

[Mon Apr 30 15:35:14 CST 2018] Your cert is in  /root/.acme.sh/xxx.com/xxx.com.cer
[Mon Apr 30 15:35:14 CST 2018] Your cert key is in  /root/.acme.sh/xxx.com/xxx.com.key
[Mon Apr 30 15:35:14 CST 2018] The intermediate CA cert is in  /root/.acme.sh/xxx.com/ca.cer
[Mon Apr 30 15:35:14 CST 2018] And the full chain certs is there:  /root/.acme.sh/xxx.com/fullchain.cer

申請的證書會放到 ~/.acme.sh/ 目錄裡面,所有的 acme.sh 配置都記錄在 ~/.acme.sh/ 目錄裡面,acme.sh 有自動的配置讀取,並按域名劃分,下次你再次執行的時候,它知道你之前是用的那個目錄,只需要告訴它域名就好了。

5、安裝證書

注意, 預設生成的證書都放在安裝目錄下: ~/.acme.sh/, 請不要直接使用此目錄下的檔案,
例如: 不要直接讓 nginx/apache 的配置檔案使用這下面的檔案.
這裡面的檔案都是內部使用, 而且目錄結構可能會變化.

正確的使用方法是使用 --installcert 命令,並指定目標位置, 然後證書檔案會被copy到相應的位置,

預設情況下,證書將每60天更新一次(可配置)。更新證書後,將通過以下命令自動重新載入Apache / Nginx服務:service apache2 force-reloadservice nginx force-reload

請注意:reloadcmd非常重要。證書可以自動續訂,但是,如果沒有正確的“reloadcmd”,證書可能無法重新整理到您的伺服器(如nginx或apache),那麼您的網站將無法在60天內顯示續訂證書。

acme.sh --install-cert -d goodwell00.com \
--key-file /usr/local/nginx/conf/ssl/goodwell/goodwell00.com.key \
--fullchain-file /usr/local/nginx/conf/ssl/goodwell/goodwell00.com.cer \
--reloadcmd "/usr/local/nginx/sbin/nginx -s reload"

[Mon Apr 30 16:19:32 CST 2018] Reload success

指定了存放證書的目錄,nginx配置檔案會配置我這裡是建立了一個key檔案

6、配置nginx

server {
    listen 80;
    listen 443 ssl;

    server_name h5.7dianchina.com;
    access_log  /var/log/nginx/qidian_h5.log;

    ssl on;
    ssl_certificate key/7dianchina.com.cer;
    ssl_certificate_key key/7dianchina.com.key;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    ssl_prefer_server_ciphers on;

參考:https://www.jianshu.com/p/b6b172f69c14

https://www.jianshu.com/p/06e3aba8c62e

https://www.derror.com/p/configure-https-for-nginx-using-acmesh/

https://my.oschina.net/kimver/blog/1634575

時間到期續費證書

acme.sh --renew -d baoko.cn --webroot /www/nginx/key/

openssl x509 -in signed.crt -noout -dates