寫在前面:
使用UniFi Controller 默認(rèn)是通過https://IP:8443 進(jìn)行登錄的,但是在這種情況下由于沒有證書導(dǎo)致chrome在進(jìn)行訪問的時(shí)候總是會(huì)有警告篙骡。如何部署ssl證書是作為強(qiáng)迫癥的人必須解決的問題萌焰。對(duì)于這個(gè)問題有很多的解決辦法矾柜,免費(fèi)而方便的就是通過acme.sh自動(dòng)部署Let’s Encrypt 證書鲤竹。這里提出的解決方案能夠自動(dòng)的申請(qǐng)證書并完成證書的導(dǎo)入睡扬。
LET'S GO
前期的準(zhǔn)備工作
- 安裝acme.sh
curl https://get.acme.sh | sh
很方便比吭,就一行命令就可以完成下載和安裝,同時(shí)還能夠安裝一個(gè)自動(dòng)化命令严肪。由于Let’s Encrypt 申請(qǐng)的證書盡管是免費(fèi)的史煎,但是最長只有90天的有效期,這個(gè)命令將會(huì)在證書到期前自動(dòng)的進(jìn)行再次申請(qǐng)驳糯。完成安裝之后最好重新連接一下ssh終端篇梭。如果需要可以通過命令獲得證書更新的郵件提醒。
acme.sh --upgrade --auto-upgrade --accountemail "mynotifaction@email.com"
- 擁有一個(gè)自己的域名酝枢,acme.sh支持大部分的域名服務(wù)商恬偷,可以在這里進(jìn)行 DNS providers 具體的查詢。
創(chuàng)建一個(gè)post-hook file用于自動(dòng)的備份原有證書和部署新的證書
創(chuàng)建這個(gè)文件/root/.acme.sh/cloudkey-renew-hook.sh
帘睦,以下代碼完全不用做任何修改
#!/bin/bash
# Renew-hook for ACME / Let's encrypt
echo "** Configuring new Let's Encrypt certs"
cd /etc/ssl/private
rm -f /etc/ssl/private/cert.tar /etc/ssl/private/unifi.keystore.jks /etc/ssl/private/ssl-cert-snakeoil.key /etc/ssl/private/fullchain.pem
openssl pkcs12 -export -in /etc/ssl/private/cloudkey.crt -inkey /etc/ssl/private/cloudkey.key -out /etc/ssl/private/cloudkey.p12 -name unifi -password pass:aircontrolenterprise
keytool -importkeystore -deststorepass aircontrolenterprise -destkeypass aircontrolenterprise -destkeystore /usr/lib/unifi/data/keystore -srckeystore /etc/ssl/private/cloudkey.p12 -srcstoretype PKCS12 -srcstorepass aircontrolenterprise -alias unifi
rm -f /etc/ssl/private/cloudkey.p12
tar -cvf cert.tar *
chown root:ssl-cert /etc/ssl/private/*
chmod 640 /etc/ssl/private/*
echo "** Testing Nginx and restarting"
/usr/sbin/nginx -t
/etc/init.d/nginx restart ; /etc/init.d/unifi restart
在DNS服務(wù)商那邊獲得證書申請(qǐng)所需要的DNS API
具體怎么申請(qǐng)請(qǐng)查看DNS官方網(wǎng)站喉磁,acme.sh支持多個(gè)DNS服務(wù)商的API完成證書申請(qǐng)工作,不同的服務(wù)商申請(qǐng)證書的方式不同官脓。我用的是namesilo协怒,這一部分的命令僅針對(duì)namesilo,將申請(qǐng)得到API KEY通過下面的命令進(jìn)行輸入卑笨。
export Namesilo_Key="YOUR-NAMESILO-API-KEY"
正式申請(qǐng)證書并完成部署
通過下面的命令進(jìn)行證書申請(qǐng)孕暇,需要修改unifi.myname.com
這個(gè)地方,將其修改為需要使用的域名赤兴。acme.sh命令在申請(qǐng)域名的證書的時(shí)候?qū)⒂蛎黾釉?strong>-d這個(gè)參數(shù)后面妖滔。
acme.sh --force --issue --dns dns_namesilo --dnssleep 900 -d unifi.myname.com --pre-hook "touch /etc/ssl/private/cert.tar; tar -zcvf /root/.acme.sh/CloudKeySSL_`date +%Y-%m-%d_%H.%M.%S`.tgz /etc/ssl/private/*" --fullchainpath /etc/ssl/private/cloudkey.crt --keypath /etc/ssl/private/cloudkey.key --reloadcmd "sh /root/.acme.sh/cloudkey-renew-hook.sh"
上面的命令除了完成證書申請(qǐng)之外,還將備份原有的證書桶良,部署證書到unifi-control中座舍,同時(shí)重啟unifi服務(wù)。
最后的總結(jié)
這個(gè)方案可以自動(dòng)的完成證書申請(qǐng)陨帆、備份曲秉、部署采蚀、更新,所需要的僅僅是在修改一個(gè)申請(qǐng)的域名就ok了承二,確實(shí)方便實(shí)用榆鼠。