httpscertbotcertificates
域名https证书申请
记录一下https 证书申请的详细步骤
0.前提
- 本文基于云主机系统: Ubuntu
- 域名已经配置好了DNS解析,即 指向了云主机的公网IP
- 具备Nginx 运行环境
- 申请的域名:
abc.com
1.安装certbot
sudo apt install certbot
certbot --version
另,certbot详细安装可以参考 instructions
2.申请证书
# 可查看当前主机上已有证书信息,包含证书名,包含域名,过期时间,保存路径 等等
sudo certbot certificates
2.1 创建验证文件
# 构建用于证书验证的访问目录
sudo mkdir -p /var/www/abc.com/.well-known/acme-challenge
sudo touch /var/www/abc.com/.well-known/acme-challenge/hello
sudo echo "hello" > /var/www/abc.com/.well-known/acme-challenge/hello
2.2 配置nginx
server {
listen 80;
server_name abc.com;
location /.well-known/acme-challenge/ {
root /var/www/$host;
allow all;
}
location / {
return 301 https://$host$request_uri; # HTTP 重定向到 HTTPS
}
}
server {
listen 443 ssl;
server_name abc.com;
# 先暂时注销. 因为这些目录还未创建
#ssl_certificate /etc/letsencrypt/live/abc.com/fullchain.pem;
#ssl_certificate_key /etc/letsencrypt/live/abc.com/privkey.pem;
# 其他配置(根目录、代理等)...
}
- 以上主要内容修改或者新建到 nginx_abc.conf 文件
# 检查新的配置是否
sudo nginx -t
# 重新加载配置
sudo nginx -s reload
# 确认 certbot验证请求的path
curl -v "http://abc.com/.well-known/acme-challenge/hello"
2.3 获取证书
# 获取证书
sudo certbot certonly --manual -d "abc.com" --preferred-challenges http
参数含义
- certonly: 仅获取证书,不自动修改Nginx的配置。证书默认保存在
/etc/letsencrypt/live/下 - --manual: 手动模式。申请过程会一步步提示需要执行哪些手动操作。
- -d "abc.com": 指定申请证书的域名
- --preferred-challenges http: 指定验证方式优先使用 HTTP-01 challenge。即 Certbot 会要求在 Web 服务器的 http://<域名>/.well-known/acme-challenge/ 路径下放置一个特定的验证文件,Let's Encrypt 的服务器通过公网访问该文件来确认您拥有域名的控制权
http验证流程
- Certbot 向 Let's Encrypt 发起申请
- Certbot 提示:在 Web 服务器的指定目录下创建一个文件(包含特定内容)
- 需要手动创建该文件(例如:/var/www/<something>/.well-known/acme-challenge/xxxx)
sudo touch /var/www/abc.com/.well-known/acme-challenge/xxxx
sudo echo "xxxxxx" > /var/www/abc.com/.well-known/acme-challenge/xxxx
- 确保
http://abc.com/.well-known/acme-challenge/xxxx可以公网访问; - Certbot 验证通过后,颁发证书。
按照提示操作,一路enter即可
再次查看主机上的证书
sudo certbot certificates
3.配置&验证证书
- 启用nginx证书配置
server {
listen 443 ssl;
server_name abc.com;
# 放开注释
ssl_certificate /etc/letsencrypt/live/abc.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/abc.com/privkey.pem;
# 其他配置(根目录、代理等)...
}
- 重加载配置
sudo nginx -t
sudo nginx -s reload
- https 请求域名
curl -v "https://abc.com"