所以目前我需求就是获取nginx上使用的.pem和.key两个文件.
安装cerbot,并使用
获取泛域名文档 看他的泛域名文档,以下是安装总结
1. 使用snap 安装certbot,关于snapd 包管理,可以到网上查看
ubuntu 已经自带snap, 使用时只要更新命令更新 sudo snap install core; sudo snap refresh core
2. 安装 certbot
安装前先删除 原来的安装的certbot , sudo apt remove certbot
执行安装命令 sudo snap install –classic certbot
把certbot命令添加到全局 sudo ln -s /snap/bin/certbot /usr/bin/certbot
3. 获取证书 ,泛域名 要使用下面的泛域名生成方法
sudo certbot certonly –nginx
4 在nginx 配置关联证书
ssl_certificate /etc/letsencrypt/live/xxx.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/xxx.com/privkey.pem;
5. 自动更新证书
它到期之前自动更新您的证书,除非你修改配置,更新证书的配置在 /etc/letsencrypt/renewal/下面
sudo certbot renew --dry-run # 测试自动更新是否可用 The command to renew certbot is installed in one of the following locations: /etc/crontab/ /etc/cron.*/* systemctl list-timers
challenge 关于证书获取的简单介绍
Let’s Encrypt需要验证网站的所有权才能颁发证书, 官方称之为challenge(挑战).
在网站上的指定位置发布指定文件(HTTP-01)
当使用Webroot插件或手动插件时,请确保webroot目录存在并且您正确指定它。如果您为example.com设置了webroot目录,/var/www/example.com 那么放置的文件/var/www/example.com/.well-known/acme-challenge/testfile应该出现在您的网站上http://example.com/.well-known/acme-challenge/testfile(此处重定向到HTTPS是可以的,并且不应该阻止工作中的挑战)
sudo certbot certonly --standalone --email 'zbysir@qq.com' -d 'bysir.com'
standalone 就是独立插件, 它需要绑定80端口, 所以先关掉机器上的80端口吧, 或者换一台主机安装.
不出意外的话, 会死在Waiting for verification…,
可以看到他会请求 http://bysir.store/.well-known/acme-challenge/r9NH9hle6_7L9avkG-ID6A1BI4h4IgFVn6nx3VQZRpI以认证网站.
location ~ “^/\.well-known/acme-challenge/(.*)$” {
default_type text/plain;
return 200 “$1.IL3bE2eqHDs1k0Lmxm63CXpLvzmosMuUDIywEIBTPnG”;
}
- 在网站上提供指定的临时证书(TLS-SNI-01)
- 在域名系统中发布指定的DNS记录(DNS-01)
泛域名证书
certbot certonly --preferred-challenges dns --manual -d *.mydomain.com --server https://acme-v02.api.letsencrypt.org/directory
–preferred-challenges dns: 认证方式选择DNS, 泛域名支持DNS
–manual: 手动模式, 这里为了简单就使用手动认证了, 下面会说自动模式的使用.
-d *.mydomain.com: 就是要申请的泛域名了
–server https://acme-v02.api.letsencrypt.org/directory: 泛域名证书是新功能, 如果要使用就得加上这个参数
注意这一步 命令里会有提示,需要手动配置TXT记录, 在域名解析服务商添加一个泛解析就可以了, 设置好了再敲下回车.
泛域名证书 – docker 方法 (不推荐)
sudo docker run -it --rm --name certbot \
-v "/etc/letsencrypt:/etc/letsencrypt" \
-v "/var/lib/letsencrypt:/var/lib/letsencrypt" \
certbot/certbot certonly -d *.mical.com --manual --preferred-challenges dns --server https://acme-v02.api.letsencrypt.org/directory
根据提示 在域名供应商里添加txt 记录
dig -t txt _acme-challenge.michnal.com
再次更新
docker run -it --rm --name certbot
-v "/etc/letsencrypt:/etc/letsencrypt"
-v "/var/lib/letsencrypt:/var/lib/letsencrypt"
certbot/certbot certonly --manual -d '*.michan.cn'
泛域名证书-插件方法认证域名(推荐)
此法就不需要手动在 dns 服务器商那里 添加txt 记录了。
以下用 cloudflare dns 服务器 ,除了 第三步不一样,其他都一样
- 安装dns plugin 这里要安装cloudflare 版的,
- 然后到cloudflare 控制台 创建 token ,设置token权限: The Token needed by Certbot requires
Zone:DNS:Edit
permissions for only the zones you need certificates for. - 然后把token 放到自己创建 cloudfare.ini 文件里, 文件权限 chmod 600
# Cloudflare API token used by Certbot
dns_cloudflare_api_token = 0123456789abcdef0123456789abcdef01234567
下面是命令 执行
这里接安装cerbot 的第二步
sudo snap set certbot trust-plugin-with-root=ok # 确认插件包含级别
sudo snap install certbot-dns-cloudflare # 安装插件, 不同的dns 服务商,不同的插件这是是cloudflare
sudo mkdir /home/.secrets/
sudo chmod 700 /home/.secrets/
sudo vim /home/.secrets/certbot_cloudflare.ini
# 輸入: dns_cloudflare_api_token = xxxxtokenxxx
# 在cloudflare上開token,權限 Zone:Zone:Read, Zone:DNS:Edit for all zones
sudo chmod 600 ~/.secrets/cloudflare.ini
sudo certbot certonly \
--dns-cloudflare \
--dns-cloudflare-credentials /home/wei/.secrets/certbot_cloudflare.ini \
-d xmetal.cc,*.xmetal.cc