新申请了一个域名,把https证书申请过程记录以下,方便下次使用。
Let's Encrypt 证书免费,不过每次申请只有90天的有效期,可以通过
acme脚本自动申请证书并定期自动更新。申请步骤如下:
1.安装脚本
#创建一个目录存放证书
mkdir -p /etc/nginx/ssl
#安装acme脚本
curl https://get.acme.sh | sh
#测试安装
acme.sh -v
#如果找不到命令就创建alias
alias acme.sh=~/.acme.sh/acme.sh
2.配置nginx
# acme.sh 会查找 -d指定的domain
server {
listen 80;
server_name www.sxy.com sxy91.com;
}
3.生成证书
nginx -s stop
acme.sh --issue -d sxy91.com -d www.sxy91.com --standalone
#会在 "~/.acme.sh/" 目录下生成证书文件
#会自动创建cronjob,每天 0:00 点自动检测所有的证书
crontab -l
上面的方法是http验证方式,若要使用通配符配置域名,则只能通过dns模式验证。
4.安装证书
acme.sh --installcert -d sxy91.com -d www.sxy91.com \
--key-file /etc/nginx/ssl/sxy91.key \
--fullchain-file /etc/nginx/ssl/sxy91.cer \
--reloadcmd "service nginx force-reload"
# 会自动把证书文件复制到"/etc/nginx/ssl"目录下 并改名为sxy91,然后重启nginx。
5. 强制使用https访问
配置nginx并强制使用htpps
server {
listen 80;
server_name *.sxy91.com;
rewrite ^ https://sxy91.com$request_uri? permanent;
}
server {
listen 443 ssl;
server_name *.sxy91.com;
ssl_certificate /etc/nginx/ssl/sxy91.cer;
ssl_certificate_key /etc/nginx/ssl/sxy91.key;
ssl_session_timeout 5m;
ssl_session_cache shared:SSL:50m;
ssl_prefer_server_ciphers on;
}
重启nginx
nginx -t
nginx -s reload
6. 自动更新
因增nginx加了rewrite强制http跳转到https,acme.sh的自动更新证书无法通过http验证,所以会失败。可以写成一个脚本或用下面的命令。
yum -y install socat
nginx -s stop
acme.sh --issue -d sxy91.com --standalone -d www.sxy91.com
acme.sh --installcert -d sxy91.com -d www.sxy91.com \
--key-file /etc/nginx/ssl/sxy91.key \
--fullchain-file /etc/nginx/ssl/sxy91.cer \
--reloadcmd "nginx"
这样就制作好了https的证书,用户打开可以在地址栏看到一个小🔒的标志,