一:簡介
申請ssl證書,即https有很多,有免費(fèi)的,也有收費(fèi)的。如第三方域名管理cloudflare也可以自動(dòng)添加使用https,而且永久。
但是由于有些服務(wù),需要在服務(wù)器使用自簽證書,所以需要自己申請。免費(fèi)的可以使用certbot,也可以是使用zeroSSL。
Cerbot可以參考我以前的文章:Certbot申請免費(fèi)SSL證書
這里,介紹使用acme.sh生成免費(fèi)的ssl證書,其完整實(shí)現(xiàn)了acme協(xié)議,并且由純Shell腳本語言編寫,沒有過多的依賴項(xiàng),安裝和使用都非常方便。
對(duì)于zerossl官網(wǎng),需要指出的是,用戶可以在控制臺(tái)直接申請證書,但免費(fèi)用戶最多只能申請3個(gè),而使用ACME申請zeroSSL證書則沒有數(shù)目限制。
acme.sh官方gitlhub地址: https://github.com/acmesh-official/acme.sh
二:安裝acme.sh
安裝過程不會(huì)污染任何功能和文件,所有的修改都限制在安裝目錄中:~/.acme.sh/。
以下安裝方式,把 my@example.com 修改成自己的郵箱。
1:在線安裝方式
安裝很簡單, 一個(gè)命令:
curl https://get.acme.sh | sh -s email=my@example.com
或者
wget -O - https://get.acme.sh | sh -s email=my@example.com
這里的-s參數(shù)指定的郵箱可以關(guān)聯(lián)到已有的zeroSSL賬號(hào)。關(guān)聯(lián)成功后,通過acme.sh生成的zeroSSL證書會(huì)在zeroSSL網(wǎng)站的控制面板上顯示。
2:其他安裝方式
用git倉庫方式
git clone https://github.com/acmesh-official/acme.sh.git
cd ./acme.sh
./acme.sh --install -m my@example.com
安裝完成后,在賬號(hào)home目錄,會(huì)生成一個(gè).acme.sh的隱藏目錄。
三:頒發(fā)證書
注:安裝完成后,需要退出當(dāng)前命令終端,重新登錄,才可以使用acme.sh命令
這里已我的網(wǎng)站域名 test.ywbj.cc 做為測試。
配置nginx
server {
listen 80;
server_name test.ywbj.cc;
root /www/test.ywbj.cc;
location / {
index index.html index.htm index.php;
}
}
配置域名目錄為/www/test.ywbj.cc,在此目錄創(chuàng)建一個(gè)index.html文件測試,然后重啟nginx。
配置完,瀏覽器打開test.ywbj.cc,可以看到域名提示不安全,沒有https.
1:http方式頒發(fā)證書給域名
一般情況下,都是這種。如果沒有服務(wù)器,請使用dns手動(dòng)。
單個(gè)域名
acme.sh --issue -d test.ywbj.cc -w /www/test.ywbj.cc
-d 需要簽證的域名。
-w參數(shù)說明:
在驗(yàn)證域名的所有權(quán)時(shí),具體來說,acme.sh會(huì)在網(wǎng)站的根目錄下創(chuàng)建.well-known目錄,然后再在其中生成驗(yàn)證文件。因此,-w參數(shù)指定的路徑實(shí)際為域名之下,/.well-known位置對(duì)應(yīng)的路徑。用與驗(yàn)證此域名是屬于你的。
下面圖顯示,已經(jīng)成功頒發(fā)證書。
如果有多個(gè)域名,同一個(gè)證書中的多個(gè)域。
acme.sh --issue -d example.com -d www.example.com -d cp.example.com -w /home/wwwroot/example.com
證書生成完后將放置在~/.acme.sh/example.com/
證書將每60天自動(dòng)更新一次。
如下:這里顯示的是我test.ywbj.cc的目錄下。
2:手動(dòng) dns 方式頒發(fā)證書
手動(dòng) dns 方式, 手動(dòng)在域名上添加一條 txt 解析記錄, 驗(yàn)證域名所有權(quán).
這種方式的好處是, 你不需要任何服務(wù)器, 不需要任何公網(wǎng) ip, 只需要 dns 的解析記錄即可完成驗(yàn)證. 壞處是,如果不同時(shí)配置 Automatic DNS API,使用這種方式 acme.sh 將無法自動(dòng)更新證書,每次都需要手動(dòng)再次重新解析驗(yàn)證域名所有權(quán)。
acme.sh --issue --dns -d mydomain.com \
--yes-I-know-dns-manual-mode-enough-go-ahead-please
然后, acme.sh 會(huì)生成相應(yīng)的解析記錄顯示出來, 你只需要在你的域名管理面板中添加這條 txt 記錄即可.
等待解析完成之后, 重新生成證書:
acme.sh --renew -d mydomain.com \
--yes-I-know-dns-manual-mode-enough-go-ahead-please
dns 方式的真正強(qiáng)大之處在于可以使用域名解析商提供的 api 自動(dòng)添加 txt 記錄完成驗(yàn)證.
acme.sh 目前支持 cloudflare, dnspod, cloudxns, godaddy 以及 ovh 等數(shù)十種解析商的自動(dòng)集成.
四:將證書安裝到 Apache/Nginx 等
1,nginx
生成證書后,需要將證書安裝/復(fù)制到您的 Apache/Nginx 或其他服務(wù)器。必須使用此命令將證書安裝到目標(biāo)文件,請勿使用~/.acme.sh/文件夾中的證書文件,它們僅供內(nèi)部使用,文件夾結(jié)構(gòu)將來可能會(huì)更改。
證書目錄,自己選擇好,我這里安裝目錄為/etc/nginx/ssl/,所以執(zhí)行以下命令。
acme.sh --install-cert -d test.ywbj.cc \
--key-file /etc/nginx/ssl//key.pem \
--fullchain-file /etc/nginx/ssl/cert.pem \
--reloadcmd "service nginx force-reload"
2:apache:
如果是apache的話,用以下命令即可
acme.sh --install-cert -d example.com \
--cert-file /path/to/certfile/in/apache/cert.pem \
--key-file /path/to/keyfile/in/apache/key.pem \
--fullchain-file /path/to/fullchain/certfile/apache/fullchain.pem \
--reloadcmd "service apache2 force-reload"
五:配置nginx的ssl
更改nginx配置文件,加上監(jiān)聽443端口,和配置ssl_certificate和ssl_certificate_key到指定目錄即可。
server {
#listen 80;
listen 443;
server_name test.ywbj.cc;
root /www/test.ywbj.cc;
ssl_certificate /etc/nginx/ssl/cert.pem;
ssl_certificate_key /etc/nginx/ssl/key.pem;
location / {
index index.html index.htm index.php;
}
}
重啟nginx,在瀏覽器再次輸入https://test.ywbj.cc/,可以看到已經(jīng)成功。
查看詳細(xì),可以看到是ZeroSSL頒發(fā)的證書,有效期為3個(gè)月。
目前證書在 60 天以后會(huì)自動(dòng)更新, 你無需任何操作. 今后有可能會(huì)縮短這個(gè)時(shí)間, 不過都是自動(dòng)的, 你不用關(guān)心。你也可以更改這個(gè)。
安裝證書時(shí),已經(jīng)自動(dòng)在crontab定時(shí)任務(wù)添加了任務(wù)。
crontan -l查看定時(shí)任務(wù),可以看到acme.sh的定時(shí)任務(wù)。
crontan -l
2 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null
到這里,nginx的ssl自簽證書就已經(jīng)完成了。
六:acme.sh其他命令(擴(kuò)展)
1:查看已安裝證書信息
acme.sh --info -d example.com
# 會(huì)輸出如下內(nèi)容:
DOMAIN_CONF=/root/.acme.sh/example.com/example.com.conf
Le_Domain=example.com
Le_Alt=no
Le_Webroot=dns_ali
Le_PreHook=
Le_PostHook=
Le_RenewHook=
Le_API=https://acme-v02.api.letsencrypt.org/directory
Le_Keylength=
Le_OrderFinalize=https://acme-v02.api.letsencrypt.org/acme/finalize/23xxxx150/781xxxx4310
Le_LinkOrder=https://acme-v02.api.letsencrypt.org/acme/order/233xxx150/781xxxx4310
Le_LinkCert=https://acme-v02.api.letsencrypt.org/acme/cert/04cbd28xxxxxx349ecaea8d07
Le_CertCreateTime=1649358725
Le_CertCreateTimeStr=Thu Apr 7 19:12:05 UTC 2022
Le_NextRenewTimeStr=Mon Jun 6 19:12:05 UTC 2022
Le_NextRenewTime=1654456325
Le_RealCertPath=
Le_RealCACertPath=
Le_RealKeyPath=/etc/acme/example.com/privkey.pem
Le_ReloadCmd=service nginx force-reload
Le_RealFullChainPath=/etc/acme/example.com/chain.pem
2:更新 acme.sh
#升級(jí) acme.sh 到最新版 :
acme.sh --upgrade
#如果你不想手動(dòng)升級(jí), 可以開啟自動(dòng)升級(jí),之后, acme.sh 就會(huì)自動(dòng)保持更新了.
acme.sh --upgrade --auto-upgrade
#你也可以隨時(shí)關(guān)閉自動(dòng)更新:
acme.sh --upgrade --auto-upgrade 0
3:頒發(fā)ECC證書
單域ECC證書
acme.sh --issue -w /home/wwwroot/example.com -d example.com --keylength ec-256
SAN多域ECC證書
acme.sh --issue -w /home/wwwroot/example.com -d example.com -d www.example.com --keylength ec-256
keylength上面的參數(shù)。
有效值為:
ec-256(prime256v1,“ECDSA P-256”)
ec-384(secp384r1,“ECDSA P-384”)
ec-521(secp521r1,“ECDSA P-521”,Let’s Encrypt 尚不支持。)
4:更新證書
自己更新證書
#強(qiáng)制更新證書:
acme.sh --renew -d example.com --force
#或者,對(duì)于 ECC 證書:
acme.sh --renew -d example.com --force --ecc
要停止更新證書,您可以執(zhí)行以下操作從更新列表中刪除證書:
acme.sh --remove -d example.com [--ecc]
證書/密鑰文件不會(huì)從磁盤中刪除。文章來源:http://www.zghlxwxcb.cn/news/detail-816860.html
您可以自己刪除相應(yīng)的目錄(例如~/.acme.sh/example.com)。文章來源地址http://www.zghlxwxcb.cn/news/detail-816860.html
到了這里,關(guān)于用acme.sh給網(wǎng)站域名,申請免費(fèi)SSL永久證書(自動(dòng)續(xù)期)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!