安装acme
我们使用acme来申请免费的https通用域名证书 acme的证书有效期为三个月,但会创建一个定时任务提前一个月来进行续约
安装acme
curl https://get.acme.sh | sh cd ~/.acme.sh/yum -y install socat
验证证书
为了验证域名所有权,Let's Encrypt 支持两种方式来验证:
- 通过阿里云DNS 验证域名
- 域名的访问
sh acme.sh --installcert -d 4d-bios.com --key-file /mnt/ssl/nginx/4d-bios.com/4d-bios.com.key --fullchain-file /mnt/ssl/nginx/4d-bios.com/fullchain.cer --reloadcmd "ssl.sh"
通过域名访问
sh acme.sh --issue -d [域名] --standalone
通过DNS来验证
我们通过创建一个阿里云的的子账户key 并对子账号授权DNS的权限
在.bashrc 里添加export Ali_Key="xx" export Ali_Secret="xxx"source ~/.bashrc
然后就可以执行验证了
acme.sh --issue --dns dns_ali -d [域名] -d *.[域名]# 配置安装SSL证书路径和重启的命令sh acme.sh --installcert -d [域名] \ --key-file /mnt/ssl/[域名].key \ --fullchain-file /mnt/ssl/fullchain.cer \ --reloadcmd "nginx -s reload"
NGINX 配置SSL证书
server { listen 443; server_name localhost; ssl on; root html; index index.html index.htm; ssl_certificate cert/xxx.pem; ssl_certificate_key cert/xxx.key; ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; location / { root html; index index.html index.htm; }}
证书的自动分发
由于有多台服务器都需要用到相同的证书,这时候证书的分发就成为了问题, 我们在一台公共机器的节点上利用ssh来实现分发,先配置好ssh免密登录
执行分发的脚本
#!/bin/bash# 分发ssl证书# 待分发的服务器listSERVERS=("ip1" "ip2");for str in ${SERVERS[@]}; do scp -r /mnt/ssl/ $str:/mnt/ echo "SCP SSL TO $str" ssh $str "docker restart nginx" echo "SSH restart nginx " done
sh acme.sh --installcert -d [域名] \ --key-file /mnt/ssl/[域名].key \ --fullchain-file /mnt/ssl/fullchain.cer \ --reloadcmd "ssl.sh" #指定定时执行上面的脚本