阿里云服务器 使用Certbot申请免费 HTTPS 证书及自动续期

前言

Certbot是一款免费且开源的自动化安全证书管理工具,由电子前沿基金会(EFF)开发和维护,是在Linux、Apache和Nginx服务器上配置和管理SSL/TLS证书的一种机制。Certbot可以自动完成域名的认证并安装证书。

一、 安装软件

1.1安装 Certbot
yum install epel-release -y
yum install certbot -y

如果提示
在这里插入图片描述
需要重新安装 python-urllib3
此时需要将原来的 Python 文件备份,或者删除,这里使用了备份

 mv /usr/lib/python2.7/site-packages/urllib3/packages/ssl_match_hostname /usr/lib/python2.7/site-packages/urllib3/packages/ssl_match_hostname.bak

然后再执行安装 python-urllib3

yum install python-urllib3 -y

成功之后:
阿里云服务器 使用Certbot申请免费 HTTPS 证书及自动续期_第1张图片

二、生成证书

域名分为主域名和泛域名;例如百度主域名为: baidu.com ; 百度其他的二级域名的泛域名为: *.baidu.com
执行以下命令生成证书:

# 泛域名:
certbot certonly -d *.使用自己的域名替换.com --manual --preferred-challenges dns

# 主域名:
certbot certonly -d 使用自己的域名替换.com --manual --preferred-challenges dns

会提示你输入邮箱,用来做想过通知,尽量使用自己的邮箱就行,不建议乱输入
阿里云服务器 使用Certbot申请免费 HTTPS 证书及自动续期_第2张图片
一直点 y 同意使用协议,同意邮箱接收信息,然后会提示需要 配置 DNS TXT 解析记录
阿里云服务器 使用Certbot申请免费 HTTPS 证书及自动续期_第3张图片
我这儿是阿里云,阿里云配置 DNS TXT 解析记录如下:

进入阿里云控制中心 ——》 找到域名解析设置 ——》 添加新纪录 :
记录类型选择 TXT-文本
主机记录填入控制台提供的二级域名: _acme-challenge
解析请求来源选择默认
记录值填入上面控制台打印出来的记录值: v4fa*********************8AoIeM(使用自己控制台的值,不要复制文档,文档仅供参考)
然后 保存,等待生效即可
阿里云服务器 使用Certbot申请免费 HTTPS 证书及自动续期_第4张图片
配置好之后,按回车继续
等待结果相应:
阿里云服务器 使用Certbot申请免费 HTTPS 证书及自动续期_第5张图片

此时,证书就已经生成成功了,但是只有三个月有效期

三、配置ngnix

我的域名都是使用ngnix反向代理的,所以这里就使用ngnix最配置

server {
        listen       443 ssl;
        server_name	www.test.替换自己的域名.cn test.替换自己的域名.cn;

        # ssl证书地址
        ssl_certificate /etc/letsencrypt/live/yunyechuang.cn/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/yunyechuang.cn/privkey.pem;

        # ssl验证相关配置
        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 /secretWJJ {
            proxy_pass http://127.0.0.1:7011;
        }
    }

在 ngnix 目录下执行

# 检查NGINX配置是否正确
./sbin/nginx -t

在这里插入图片描述
文件正确,重启 NGINX

./sbin/nginx -s reload

使用 https 协议 再次访问你的域名,发现链接已经是安全的了
阿里云服务器 使用Certbot申请免费 HTTPS 证书及自动续期_第6张图片

四、续期

Certbot 是使用的Let’s Encrypt申请的免费证书,只有 3 个月的有效期,到期之后我们需要再次续期才能继续使用 HTTPS 协议。

4.1 手动续期

你需要自己记录证书到期的时间,在证书到期之前,从新生成一个新的证书

certbot certonly -d *.替换自己的域名.com --manual --preferred-challenges dns

然后根据步骤三中的 DNS TXT 解析 步骤再配置一次即可,证书保存位置没有变化的话,NGNIX 不需要更新配置。

4.2 自动续期(待验证)

每次都手动配置 DNS 解析挺麻烦的,而且还容易遗忘,更新不及时容易造成服务崩坏。

certbot 提供了一个 hook,可以编写一个 Shell 脚本,在需要续期的时候让脚本调用 DNS 服务商的 API 接口动态添加 TXT 记录,验证完成后再删除此记录,达到自动续期的效果。

我使用的是阿里云服务,找到 justjavac 大神写好的脚本:
GitHub 项目 certbot-dns-aliyun
项目地址: https://github.com/justjavac/certbot-dns-aliyun
安装和使用指南大神在README 中有详细说明,一下部分内容也是从 README 中复制过来的(如有侵权请联系本人,立马删除)

4.2.1 使用 上诉脚本,需要配置阿里云凭证信息

点击阿里云头像 ——》 控制访问 ——》创建一个拥有DNS权限的用户
这个用户不用太多权限,所以有 OpenAPI 的调用访问即可
阿里云服务器 使用Certbot申请免费 HTTPS 证书及自动续期_第7张图片
创建完成后,在用户界面能看到 用户对应的AccessKey ID和AccessKey Secret了(注意,记得保存这两个值,界面更新AccessKey Secret会消失),如果没有保存导致这两个值消失,点击新创建的用户名称,进入详情页,创建新的来替代
阿里云服务器 使用Certbot申请免费 HTTPS 证书及自动续期_第8张图片

刷新界面后,可为用户添加权限
阿里云服务器 使用Certbot申请免费 HTTPS 证书及自动续期_第9张图片
权限只需要有 阿里云的DNS 操作权限即可
阿里云服务器 使用Certbot申请免费 HTTPS 证书及自动续期_第10张图片

进入阿里云主机控制台
1) 安装 aliyun cli 工具

wget https://aliyuncli.alicdn.com/aliyun-cli-linux-latest-amd64.tgz
tar xzvf aliyun-cli-linux-latest-amd64.tgz
sudo cp aliyun /usr/local/bin
rm aliyun

2) 将拥有 DNS 权限的角色配置到云服务器中

cd aliyun /usr/local/bin
aliyun configure --profile akProfile

配置会进入交互式内容,如下输入完成配置:

Configuring profile 'akProfile' in '' authenticate mode...
Access Key Id []: 在这里输入刚新建角色的 Access Key 然后回车进入下一项
Access Key Secret []: 在这里输入刚新建角色的 Access Key Secret 然后回车进入下一项
Default Region Id []: cn-hangzhou 
Default Output Format [json]: json (Only support json))
Default Language [zh|en] en:
Saving profile[akProfile] ...Done.

出现如下界面,配置完成:
阿里云服务器 使用Certbot申请免费 HTTPS 证书及自动续期_第11张图片

4.2.2 安装 certbot-dns-aliyun 插件
wget http://cdn.jsdelivr.net/gh/justjavac/certbot-dns-aliyun@main/alidns.sh
sudo cp alidns.sh /usr/local/bin
sudo chmod +x /usr/local/bin/alidns.sh
sudo ln -s /usr/local/bin/alidns.sh /usr/local/bin/alidns
rm alidns.sh
4.2.3 测试是否能正确申请
certbot certonly -d *.替换自己的域名.com --manual --preferred-challenges dns --manual-auth-hook "alidns" --manual-cleanup-hook "alidns clean" --dry-run

正式申请时去掉 --dry-run 参数:

certbot certonly -d *.example.com --manual --preferred-challenges dns --manual-auth-hook "alidns" --manual-cleanup-hook "alidns clean"

证书续期

certbot renew --manual --preferred-challenges dns --manual-auth-hook "alidns" --manual-cleanup-hook "alidns clean" --dry-run

自动续期,添加定时任务 crontab。

crontab -e

输入

1 1 */1 * * root certbot renew --manual --preferred-challenges dns --manual-auth-hook "alidns" --manual-cleanup-hook "alidns clean" --deploy-hook "nginx -s reload"

end

你还没有服务器和域名,感觉买个试试:
阿里云服务爆款特惠 https://www.aliyun.com/minisite/goods?userCode=6ccum0sw
如果还没有云服务,却想练练手的,可以尝试阿里云的试用服务器:
阿里云免费试用 https://free.aliyun.com?userCode=6ccum0sw

你可能感兴趣的:(阿里云,服务器,https)