ACME續簽證書在Linux雲伺服器上安裝指南

星小梦發表於2024-10-17

環境

供應商;阿里雲伺服器
作業系統:Linux Centos Stream9作業系統
靜態代理:Nginx

前言

我這邊使用https://get.acme.sh方式無法正常使用,會卡在這個頁面,無任何進度的資訊。

最終我使用了git clone的方式進行安裝。

正文

  1. clone專案下來,並進行install初始安裝ACME環境
git clone https://github.com/acmesh-official/acme.sh.git
cd acme.sh
./acme.sh --install -m my@example.com

這裡說明下這個郵箱的作用是用於註冊 Let's Encrypt 賬號的電子郵件,您將在這裡收到續訂通知郵件。(未進行實際測試驗證)。

  1. 首先設定要使用的預設CA伺服器(關於server引數的說明在這裡)。
acme.sh  --set-default-ca  --server letsencrypt
  1. 簽發證書
    這裡進行簽發證書,簽發的域名就是你要透過https訪問的域名,這個沒什麼說的。
    -w引數指定的目錄地址是指你前端專案訪問的系統地址,因為acme會在這個目錄下寫一個臨時驗證檔案,
    然後acme會透過你給出的domain域名進行訪問,如果訪問到這個臨時驗證檔案了,代表這個域名是有效的,之後才會成功簽發證書。
    --force引數是可選的,在非首次簽發時需要加上這個引數,否則就會提示The domain 'domain.cn' seems to already have an ECC cert, let's use it.
./acme.sh  --issue -d <要簽發的域名>  -w <前端專案的目錄地址> --force

簽發的域名示例:www.example.com。

  1. 安裝證書
acme.sh --install-cert -d www.example.com \
--key-file       /path/to/keyfile/in/nginx/key.pem  \
--fullchain-file /path/to/fullchain/nginx/cert.pem \
--reloadcmd     "sudo nginx -s reload"

這裡的-d引數是指定要使用哪個域名的證書進行安裝(可以使用acme.sh --list引數進行檢視簽發的證書列表),
key-file和fullchain-file引數則是指定安裝的目標儲存的檔案位置(注意這裡是指定到檔名級別的)。
reloadcmd則就是更新證書後,如何重啟相應的服務載入最新的證書。
這裡我使用了sudo來透過nginx的訊號控制來重新載入配置(關於這裡在下方說明如何配置)。

  1. 配置Nginx使用證書。
    在你對應的https server塊中,加入SSL的相關配置資訊。
    listen 443 ssl;
    server_name www.example.com;

    # SSL 配置
    ssl_certificate /目標路徑/cert.pem;
    ssl_certificate_key /目標路徑/key.pem;

    # 強制使用 TLSv1.2 和 TLSv1.3
    ssl_protocols TLSv1.2 TLSv1.3;

    # 使用現代加密套件
    ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';
}

  1. 重啟Nginx
    使用nginx -s reload重新載入nginx的配置檔案即可。

其他

由於我使用的acme是單獨建立的使用者,接下來我會說明如何建立使用者,如何配置sudo,如何給nginx使用者新增acme所屬者的許可權。

# 新增使用者
useradd acme
# 給nginx加上acme使用者所屬組的許可權,要重新nginx服務,已載入最新的許可權資訊(必要的情況下可能需要重新登入)。
usermod -a -G acme nginx

# 配置sudo
visudo
# 透過:定位到100行,增加一句 `acme ALL=(root) NOPASSWD: /usr/sbin/nginx`即可。

常見問題

  1. 如果在使用./acme.sh --issue ...命令簽發證書的時候,出現Error creating new order. Le_OrderFinalize not found. {"type":"urn:ietf:params:acme:error:unauthorized","status":401,"detail":"The account has been deactivated"}錯誤,則說明頒發地址受限了,更換其他的ca server地址
  2. 出現The domain 'www.domain.cn' is not a cert name. You must use the cert name to specify the cert to install.錯誤,表示你指定的證書名稱不存在,透過./acme.sh --list命令檢視下證書的列表吧,如果為空就去issue簽發證書吧。
  3. 出現Please refer to https://curl.haxx.se/libcurl/c/libcurl-errors.html for error code: 6或Error creating new order. Le_OrderFinalize not found.錯誤,我是重試了3遍才成功的,可能是限流401了吧。

附錄

  • ACME Github地址
  • ACME官方的安裝方式WIKI
  • acme How to install
  • How to configure Nginx with Let’s Encrypt on CentOS 8
  • 部署 使用 acme.sh 給 Nginx 安裝 Let’ s Encrypt 提供的免費 SSL 證書
  • acme支援的CA Server
  • 關於Create new order error. Le_OrderFinalize not found錯誤的討論
  • 如何在 Debian/Ubuntu Linux 上使用 Let's Encrypt 配置 Nginx

相關文章