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