文章目录
- 前言
- 申请需求
- 详细步骤:
-
- [安装 Certbot](#安装 Certbot)
- [使用 DNS 验证生成证书](#使用 DNS 验证生成证书)
- 找到生成的证书文件
- 将证书文件复制到目标服务器
- [在目标服务器上配置 Nginx 使用证书](#在目标服务器上配置 Nginx 使用证书)
- 注意更新证书
- 本地操作实例
- 总结
前言
之前不太了解SSL免费证书,只研究过一点自签名SSL证书的知识,前几年的12306就是用的这种证书,访问网站时要求你下载安装并信任根证书,后来在腾讯云上薅了一个免费一年的SSL证书,过期后也就没有再更新,在我印象中SSL证书整的很贵,一般的不涉及隐私新的的交互也不需要非得 HTTPS
。
从今年我开始接触到了更多的SSL证书知识,原来腾讯云上的SSL证书过期后还可以免费申请,AWS上也有可以自动续期的免费SSL证书,甚至还有 Let's Encrypt
、ZeroSSL
、SSL For Free
、Cloudflare
、BuyPass
等众多可以提供免费证书的机构,本文我们来试试 Let's Encrypt
怎么用。
Let's Encrypt 是一个提供 免费 SSL/TLS 证书 的认证机构(CA),旨在通过简化证书申请和安装过程来普及 HTTPS 加密,提升互联网安全性。它由 Internet Security Research Group (ISRG) 运营,并在全球范围内免费提供数字证书,用于加密网站流量,防止数据在传输过程中被窃取或篡改。
Let's Encrypt 是一个非常受欢迎且实用的工具,能够帮助网站管理员免费获得 SSL/TLS 证书并轻松安装,尤其适用于那些希望以低成本保障网站安全的小型网站和个人项目。然而,对于需要更高级别验证(如 EV 证书)的大型网站或企业来说,Let's Encrypt 可能不完全符合需求。
申请需求
我的机器操作系统是 CentOS 7
,因为本地还占用了80端口提供web服务,故不能使用HTTP-01验证方式,使用证书的是另一台机器,所以这里只需要申请获得证书文件即可,不需要自动部署和更新。
要在 CentOS 7 上使用 Let's Encrypt 并通过 DNS 验证申请 SSL 证书,而不依赖 80 端口,可以选择 Certbot 的 DNS 验证模式。这种方法适用于可以访问域名的 DNS 管理,并手动添加验证记录。完成验证后,您可以手动将生成的证书文件复制到目标机器上进行安装。
详细步骤:
安装 Certbot
首先,在 CentOS 7 上安装 Certbot:
bash
sudo yum install epel-release -y
sudo yum install certbot -y
使用 DNS 验证生成证书
-
使用以下命令启动 DNS 验证模式:
bashsudo certbot certonly --manual --preferred-challenges dns -d api.moon.com
--manual
:表示手动输入 DNS 记录--preferred-challenges dns
:指定使用 DNS 验证方式-d api.moon.com
:需要申请证书的域名
-
Certbot 会提示创建一个特定的 DNS TXT 记录来验证域名。您会看到类似以下的提示信息:
plaintextPlease deploy a DNS TXT record under the name _acme-challenge.api.moon.com with the following value: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Before continuing, verify the record is deployed.
-
登录自己的 DNS 提供商控制台,在
api.moon.com
的 DNS 配置中添加一个 TXT 记录:- 名称 :
_acme-challenge.api.moon.com
- 类型:TXT
- 值:Certbot 提供的值(如上所示的随机字符串)
- 名称 :
-
等待几分钟,确保新添加的 DNS 记录已经传播。您可以使用以下命令确认 DNS 记录是否生效:
bashnslookup -type=TXT _acme-challenge.api.moon.com
-
一旦 DNS 记录生效并验证成功,返回到 Certbot 命令窗口并按下回车键继续。Certbot 会自动完成验证并生成 SSL 证书文件。
找到生成的证书文件
验证成功后,Certbot 会将证书文件存放在 /etc/letsencrypt/live/api.moon.com/
目录下,包括以下文件:
fullchain.pem
:完整的证书链privkey.pem
:私钥文件
将证书文件复制到目标服务器
使用 scp
或其他工具将生成的证书文件复制到目标服务器,比如:
bash
scp /etc/letsencrypt/live/api.moon.com/fullchain.pem user@target_server:/path/to/nginx/ssl/
scp /etc/letsencrypt/live/api.moon.com/privkey.pem user@target_server:/path/to/nginx/ssl/
在目标服务器上配置 Nginx 使用证书
在目标服务器上,编辑 Nginx 配置文件以使用新的证书:
nginx
server {
listen 443 ssl;
server_name api.moon.com;
ssl_certificate /path/to/nginx/ssl/fullchain.pem;
ssl_certificate_key /path/to/nginx/ssl/privkey.pem;
# 其他 Nginx 配置
}
保存文件并重新加载 Nginx 配置:
bash
sudo nginx -s reload
注意更新证书
Let's Encrypt 证书的有效期为 90 天。之后,可以在原服务器上再次申请新的证书,然后将新的证书文件传输到目标服务器进行更新。
本地操作实例
bash
[root@VM-0-3-centos ssls]# sudo certbot certonly --manual --preferred-challenges dns -d 008ct.top
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator manual, Installer None
Starting new HTTPS connection (1): acme-v02.api.letsencrypt.org
Requesting a certificate for 008ct.top
Performing the following challenges:
dns-01 challenge for 008ct.top
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please deploy a DNS TXT record under the name
_acme-challenge.008ct.top with the following value:
UYYkUEGZRuWX-2OfS2PcVwll7nmJurxjfqKhkRSxO9k
Before continuing, verify the record is deployed.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Press Enter to Continue
Waiting for verification...
Cleaning up challenges
Subscribe to the EFF mailing list (email: 347070901@qq.com).
Starting new HTTPS connection (1): supporters.eff.org
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/008ct.top/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/008ct.top/privkey.pem
Your certificate will expire on 2025-02-04. To obtain a new or
tweaked version of this certificate in the future, simply run
certbot again. To non-interactively renew *all* of your
certificates, run "certbot renew"
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
[root@VM-0-3-centos ssls]#
总结
Let's Encrypt
是一个提供免费 SSL/TLS 证书的认证机构(CA),旨在通过简化证书申请和安装过程来普及 HTTPS 加密,提升互联网安全性- 同类型的机构还有
ZeroSSL
、SSL For Free
、Cloudflare
、BuyPass
等等,腾讯云和AWS也有针对自己产品的SSL免费证书 - 使用
Let's Encrypt
申请SSL证书非常简单,可以选择DNS-01
验证或者HTTP-01
验证 - 如果证书用于本机的
Nginx
或者Apache
,还可以设置自动更新,这样就免除了服务有可能中断的麻烦 - 生成证书的命令
sudo certbot certonly --manual --preferred-challenges dns -d api.xxx.com
无人扶我青云志,我自踏雪至山巅。单靠自己很难,单靠自己成功更难~