環境
供應商;阿里雲伺服器
作業系統:Linux Centos Stream9作業系統
靜態代理:Nginx
前言
我這邊使用https://get.acme.sh方式無法正常使用,會卡在這個頁面,無任何進度的資訊。
最終我使用了git clone的方式進行安裝。
正文
- 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 賬號的電子郵件,您將在這裡收到續訂通知郵件。(未進行實際測試驗證)。
- 首先設定要使用的預設CA伺服器(關於server引數的說明在這裡)。
acme.sh --set-default-ca --server letsencrypt
- 簽發證書
這裡進行簽發證書,簽發的域名就是你要透過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。
- 安裝證書
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的訊號控制來重新載入配置(關於這裡在下方說明如何配置)。
- 配置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';
}
- 重啟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`即可。
常見問題
- 如果在使用
./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地址。 - 出現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簽發證書吧。 - 出現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