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
# 替換成從阿里雲後臺獲取的金鑰
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-reload
或service 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