使用 Let’s Encrypt 获取免费SSL证书

文章目录

前言

之前不太了解SSL免费证书,只研究过一点自签名SSL证书的知识,前几年的12306就是用的这种证书,访问网站时要求你下载安装并信任根证书,后来在腾讯云上薅了一个免费一年的SSL证书,过期后也就没有再更新,在我印象中SSL证书整的很贵,一般的不涉及隐私新的的交互也不需要非得 HTTPS

从今年我开始接触到了更多的SSL证书知识,原来腾讯云上的SSL证书过期后还可以免费申请,AWS上也有可以自动续期的免费SSL证书,甚至还有 Let's EncryptZeroSSLSSL For FreeCloudflareBuyPass 等众多可以提供免费证书的机构,本文我们来试试 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 验证生成证书

  1. 使用以下命令启动 DNS 验证模式:

    bash 复制代码
    sudo certbot certonly --manual --preferred-challenges dns -d api.moon.com
    • --manual:表示手动输入 DNS 记录
    • --preferred-challenges dns:指定使用 DNS 验证方式
    • -d api.moon.com:需要申请证书的域名
  2. Certbot 会提示创建一个特定的 DNS TXT 记录来验证域名。您会看到类似以下的提示信息:

    plaintext 复制代码
    Please 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.
  3. 登录自己的 DNS 提供商控制台,在 api.moon.com 的 DNS 配置中添加一个 TXT 记录:

    • 名称_acme-challenge.api.moon.com
    • 类型:TXT
    • :Certbot 提供的值(如上所示的随机字符串)
  4. 等待几分钟,确保新添加的 DNS 记录已经传播。您可以使用以下命令确认 DNS 记录是否生效:

    bash 复制代码
    nslookup -type=TXT _acme-challenge.api.moon.com
  5. 一旦 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 加密,提升互联网安全性
  • 同类型的机构还有 ZeroSSLSSL For FreeCloudflareBuyPass 等等,腾讯云和AWS也有针对自己产品的SSL免费证书
  • 使用Let's Encrypt申请SSL证书非常简单,可以选择 DNS-01 验证或者 HTTP-01 验证
  • 如果证书用于本机的 Nginx 或者 Apache,还可以设置自动更新,这样就免除了服务有可能中断的麻烦
  • 生成证书的命令 sudo certbot certonly --manual --preferred-challenges dns -d api.xxx.com

==>> 反爬链接,请勿点击,原地爆炸,概不负责!<<==


无人扶我青云志,我自踏雪至山巅。单靠自己很难,单靠自己成功更难~

相关推荐
川石课堂软件测试7 小时前
Oracle 数据库:视图与索引
数据库·网络协议·nginx·http·oracle·grafana·prometheus
小妖6668 小时前
mac 安装 nginx
运维·nginx·macos
Whitess0078 小时前
Websocket链接如何配置nginx转发规则?
websocket·网络协议·nginx
if时光重来17 小时前
springboot项目使用websocket功能,使用了nginx反向代理后连接失败问题解决
spring boot·websocket·nginx
xiaozhenghahaha18 小时前
Web相关知识(草稿)
运维·nginx
柯南二号19 小时前
【后端】Docker 常用命令详解
服务器·nginx·docker·容器
工会代表20 小时前
nginx配置,将前端项目配置到子路径下踩过的坑。
前端·nginx
云霄IT1 天前
CentOS7安装Nginx服务——为你的网站配置https协议和自定义服务端口
服务器·nginx·https
XMYX-01 天前
Tengine/Nginx 安装以及模块查看与扩展
运维·nginx
zzz100661 天前
Web 与 Nginx 网站服务:从基础到实践
运维·前端·nginx