申请免费的ssl证书让域名支持https访问并自动更新证书教程

新申请了一个域名,把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的证书,用户打开可以在地址栏看到一个小的标志,

你可能感兴趣的:(申请免费的ssl证书让域名支持https访问并自动更新证书教程)