news 2026/2/15 2:48:17

Let‘s Encrypt免费证书与HTTPS配置完全指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Let‘s Encrypt免费证书与HTTPS配置完全指南

本文详解如何使用Let’s Encrypt获取免费SSL证书,配置Nginx/Apache实现HTTPS,以及自动续期方案。

前言

2024年了,网站还不上HTTPS?

  • 浏览器会标记为"不安全"
  • SEO排名受影响
  • 无法使用HTTP/2、HTTP/3
  • 用户数据传输有风险

以前SSL证书很贵,现在有了Let’s Encrypt,完全免费,自动续期,没有理由不用。


一、Let’s Encrypt简介

1.1 什么是Let’s Encrypt

Let’s Encrypt是一个免费、自动化、开放的证书颁发机构(CA),由非营利组织ISRG运营。

特点:

  • 完全免费
  • 自动化颁发和续期
  • 被所有主流浏览器信任
  • 单域名/泛域名都支持

1.2 证书类型

类型说明验证方式
单域名只对一个域名有效HTTP/DNS
多域名(SAN)多个域名共用一个证书HTTP/DNS
泛域名*.example.com仅DNS

1.3 验证方式

HTTP-01验证:

  • 在网站目录放置特定文件
  • Let’s Encrypt访问验证
  • 需要80端口可访问

DNS-01验证:

  • 添加特定的DNS TXT记录
  • Let’s Encrypt查询验证
  • 适合泛域名、无法开放80端口的场景

二、Certbot安装与使用

2.1 安装Certbot

# Ubuntu/Debianaptupdateaptinstallcertbot# CentOS/RHELyuminstallepel-release yuminstallcertbot# 或使用snap(推荐,版本更新)snapinstall--classic certbotln-s /snap/bin/certbot /usr/bin/certbot

2.2 获取证书(HTTP验证)

独立模式(没有Web服务器时):

# 需要80端口空闲certbot certonly --standalone -d example.com -d www.example.com

Webroot模式(已有Web服务器):

# 指定网站根目录certbot certonly --webroot -w /var/www/html -d example.com -d www.example.com

Nginx插件模式(自动配置):

# 安装插件aptinstallpython3-certbot-nginx# 自动获取证书并配置Nginxcertbot --nginx -d example.com -d www.example.com

2.3 获取证书(DNS验证)

# 泛域名证书certbot certonly --manual --preferred-challenges dns -d"*.example.com"-d example.com

执行后会提示添加DNS TXT记录:

Please deploy a DNS TXT record under the name: _acme-challenge.example.com with the following value: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

添加记录后等待DNS生效,然后继续。

2.4 证书文件说明

证书存放在/etc/letsencrypt/live/example.com/

文件说明用途
cert.pem域名证书-
chain.pem中间证书链-
fullchain.pem完整证书链Nginx ssl_certificate
privkey.pem私钥Nginx ssl_certificate_key

三、Nginx HTTPS配置

3.1 基础配置

server { listen 80; server_name example.com www.example.com; # HTTP重定向到HTTPS return 301 https://$server_name$request_uri; } server { listen 443 ssl http2; server_name example.com www.example.com; # SSL证书 ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # SSL配置 ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256; ssl_prefer_server_ciphers on; # HSTS(可选,强制HTTPS) add_header Strict-Transport-Security "max-age=31536000" always; root /var/www/html; index index.html; location / { try_files $uri $uri/ =404; } }

3.2 安全加固配置

# /etc/nginx/conf.d/ssl.conf # SSL会话缓存 ssl_session_cache shared:SSL:10m; ssl_session_timeout 1d; ssl_session_tickets off; # 现代加密套件 ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384; ssl_prefer_server_ciphers off; # OCSP Stapling ssl_stapling on; ssl_stapling_verify on; ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem; resolver 8.8.8.8 8.8.4.4 valid=300s; resolver_timeout 5s; # DH参数(可选,增强安全性) # openssl dhparam -out /etc/nginx/dhparam.pem 2048 # ssl_dhparam /etc/nginx/dhparam.pem;

3.3 测试配置

# 测试Nginx配置nginx -t# 重载配置nginx -s reload# 测试SSLcurl-I https://example.com

四、自动续期配置

4.1 证书有效期

Let’s Encrypt证书有效期是90天,建议提前30天续期。

4.2 手动续期

# 续期所有证书certbot renew# 测试续期(不真正执行)certbot renew --dry-run

4.3 自动续期

方法1:Cron定时任务

# crontab -e03* * * certbot renew --quiet --post-hook"nginx -s reload"

方法2:Systemd Timer(推荐)

Certbot安装后通常自带timer:

# 查看timer状态systemctl status certbot.timer# 启用timersystemctlenablecertbot.timer systemctl start certbot.timer# 查看下次执行时间systemctl list-timers|grepcertbot

4.4 续期钩子

# 续期成功后执行的命令certbot renew --post-hook"systemctl reload nginx"# 或在配置文件中设置# /etc/letsencrypt/renewal/example.com.conf[renewalparams]post_hook=systemctl reload nginx

五、内网服务HTTPS

5.1 问题场景

内网服务器没有公网IP和域名,如何配置HTTPS?

5.2 方案对比

方案优点缺点
自签名证书简单浏览器警告
内网CA企业级方案配置复杂
反向代理正规证书需要公网入口
组网+DNS验证正规证书需要域名

5.3 自签名证书(临时方案)

# 生成私钥openssl genrsa -out server.key2048# 生成证书openssl req -new -x509 -key server.key -out server.crt -days365\-subj"/CN=myserver.local"# Nginx配置使用ssl_certificate /path/to/server.crt;ssl_certificate_key /path/to/server.key;

5.4 组网访问方案

如果使用组网软件(如星空组网)将内网服务器和客户端连接起来:

  1. 内网服务器通过组网获得固定的虚拟IP
  2. 用DNS验证方式获取Let’s Encrypt证书(需要有域名)
  3. 将域名解析到组网的虚拟IP
  4. 客户端通过域名+HTTPS访问

这样既有正规证书,又不需要公网暴露服务器。


六、常见问题

6.1 验证失败

Challenge failed for domain example.com

排查:

  1. 确认80端口可访问:curl http://example.com/.well-known/acme-challenge/test
  2. 检查防火墙
  3. 检查DNS解析是否正确

6.2 速率限制

Let’s Encrypt有速率限制:

  • 每个域名每周50个证书
  • 每个IP每小时10个失败验证

解决:等待限制解除,或使用测试环境:

certbot certonly --staging -d example.com

6.3 证书续期失败

# 查看续期日志cat/var/log/letsencrypt/letsencrypt.log# 常见原因:# 1. 80端口被占用# 2. 域名DNS变更# 3. 防火墙规则变更

七、其他ACME客户端

除了Certbot,还有其他Let’s Encrypt客户端:

客户端特点适用场景
acme.sh纯Shell实现,轻量无Python环境
Caddy内置自动HTTPS简单场景
Traefik云原生网关K8s环境

7.1 acme.sh示例

# 安装curlhttps://get.acme.sh|sh# 获取证书acme.sh --issue -d example.com -w /var/www/html# 安装证书到Nginxacme.sh --install-cert -d example.com\--key-file /etc/nginx/ssl/example.com.key\--fullchain-file /etc/nginx/ssl/example.com.crt\--reloadcmd"nginx -s reload"

八、总结

Let’s Encrypt + HTTPS配置要点:

  1. 选择验证方式:有80端口用HTTP验证,否则用DNS验证
  2. 选择客户端:Certbot最通用,acme.sh最轻量
  3. 配置自动续期:证书90天过期,必须自动续期
  4. 安全加固:使用TLS1.2+,现代加密套件,开启HSTS
  5. 内网服务:可以用组网+DNS验证获取正规证书

参考资料

  1. Let’s Encrypt官方文档:https://letsencrypt.org/docs/
  2. Certbot文档:https://certbot.eff.org/docs/
  3. Mozilla SSL Configuration Generator:https://ssl-config.mozilla.org/

💡建议:所有对外服务都应该使用HTTPS,Let’s Encrypt让这件事变得零成本。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/8 16:24:00

Django 中使用django-redis库与Redis交互API指南

一、理解Django缓存与原生Redis的区别Django缓存APIRedis原生数据类型用途键值对存储字符串(String)简单缓存不支持列表(List)消息队列、最新列表不支持集合(Set)去重、共同好友不支持有序集合(Sorted Set)排行榜、优先级队列不支持哈希(Hash)对象存储、多个字段二、获取原生Re…

作者头像 李华
网站建设 2026/2/5 5:21:00

NPM 包发布完整实战方案

NPM 包发布完整实战方案 一、环境准备阶段 1.1 检查当前环境 # 确认当前登录用户 npm whoami # 输出:jiangshiguang# 检查当前 registry 配置 npm config get registry # 期望:https://registry.npmjs.org/1.2 验证包配置 # 检查 package.json 关键配…

作者头像 李华
网站建设 2026/2/2 23:21:06

15、加密算法实现与应用

加密算法实现与应用 1. 引言 加密技术在信息安全领域扮演着至关重要的角色,它能够保护数据的机密性和完整性。本文将介绍几种常见的加密算法,包括凯撒密码、维吉尼亚密码、Base64编码解码、用户凭证验证等,并给出相应的实现代码和示例。 2. 凯撒密码(Caesar Cipher) 原…

作者头像 李华
网站建设 2026/2/5 23:59:35

67、系统内存与 STREAMS 数据结构深入解析

系统内存与 STREAMS 数据结构深入解析 1. 内核虚拟内存分配 在系统中,内核虚拟内存的分配是一个关键操作。在地址 0xc0003000 处有 2 页内核虚拟内存空闲,从 0xc001c000 开始有 2020 页空闲。当需要分配内核虚拟空间时(例如用于存放页表页),会调用 rmalloc() 例程…

作者头像 李华
网站建设 2026/2/13 6:02:17

基于微信小程序的乡镇中学教学管理系统的设计与实现论文案例

目 录摘 要 IAbstract II第一章 绪论 11.1 课题背景 11.2 课题意义 21.3 国内外研究现状 21.4 论文组织结构 3第二章 关键技术介绍 52.1 微信小程序开发 52.2 Java语言介绍 52.3 Vue.js框架简介 62.4 SpringBoot简介 72.5 MySQL数据库 7第三章 系统需求分析 83.1 可行性分析 83…

作者头像 李华
网站建设 2026/2/12 9:50:51

测试依赖注入方法:提升测试效率与可维护性的关键实践

一、在软件测试领域,依赖注入(Dependency Injection,简称DI)是一种设计模式,通过将对象的依赖关系从内部转移到外部,实现松耦合、高可测试性。本文将深入探讨依赖注入在测试中的应用,通过实际案…

作者头像 李华