快雪时晴-初晴融雪头像
关注
服务器运维:Let’s Encrypt 证书 + HTTPS + HTTP/2 全景分析封面图

服务器运维:Let’s Encrypt 证书 + HTTPS + HTTP/2 全景分析

在Kubernetes、Traefik、Ingress-Nginx场景中,Let’s Encrypt(LE) 是最主流免费CA;很多人混淆三件事:证书签发、HTTPS加密、HTTP/2协议。

HTTPS = HTTP over TLS,必须依赖证书;HTTP/2 是传输层之上的应用层协议HTTP/2 推荐强制搭配HTTPS(浏览器只支持加密环境下的HTTP/2),但证书本身不代表开启HTTP/2。

核心概念总览表

名词核心作用依赖关系关键要点
Let’s Encrypt免费证书颁发机构(CA),签发TLS证书域名所有权验证(HTTP01/DNS01/TLS-ALPN01)证书有效期90天;公网IP证书仅6天,内网IP无法申请
TLS证书用于身份认证+流量加密,HTTPS的基础载体CA签发(LE/自签名/商业证书)证书包含域名/IP、公钥、有效期、签名;没有证书无法启用HTTPS
HTTPSHTTP协议 + TLS加密隧道必须配置有效的TLS证书443端口;流量加密防窃听、中间人劫持;浏览器安全锁标识
HTTP/2新一代HTTP应用协议,解决HTTP/1.1队头阻塞必须基于HTTPS(浏览器限制),TLS证书只是前置条件,证书本身不会自动开启HTTP/2多路复用、头部压缩、服务器推送;证书和HTTP/2是独立开关

一句话总结:LE负责颁发证书;证书是HTTPS的必要条件;HTTPS是浏览器环境启用HTTP/2的必要条件;拿到LE证书≠自动开启HTTP/2,需要在反向代理(Traefik/Nginx)单独开启协议开关。

一、Let’s Encrypt 证书:申请原理、验证方式对比

LE不会随便签发证书,必须证明你拥有该域名所有权,3种验证方式:

验证类型适用场景端口要求优点缺点
HTTP-01普通网站、Ingress,最常用80端口开放,公网可达配置简单;无需DNS权限;Traefik/cert-manager原生支持80端口必须暴露;域名必须公网解析;防火墙/安全组不能拦截80
DNS-01泛域名证书、内网域名、80端口不可用场景不需要开放80/443端口可申请*.xxx.com泛域名;可用于内网解析域名需要DNS服务商API权限;部分小众DNS不支持;需要授权修改DNS记录
TLS-ALPN-01公网IP证书场景443端口开放用于LE公网IP证书仅支持公网IP;证书有效期只有6天;客户端版本要求高

LE证书核心限制清单

  1. 证书有效期 90天,必须自动续期,手动维护极易过期;
  2. 每周/单域名签发有速率限制,频繁删除重申请会被限流;
  3. 内网私有IP(10.x/192.168.x)不能申请LE证书
  4. LE根证书主流浏览器/操作系统内置,无需手动导入(自签名证书需要);
  5. LE证书只做身份加密,不提升网站性能;性能优化来自HTTP/2

二、HTTPS 和证书的关系

HTTPS本质:HTTP报文包裹在TLS加密隧道中传输。 完整握手流程:

  1. 客户端访问443端口;
  2. 服务端返回LE证书;
  3. 客户端校验证书签名、域名、有效期;
  4. 校验通过,协商TLS加密套件,建立加密隧道;
  5. 传输HTTP报文。

❌ 误区1:有域名就能拿到LE证书。→ 需要域名所有权验证,域名必须解析到你的服务并且满足验证端口条件。
❌ 误区2:配置证书=开启HTTP/2。→ 错误。证书只负责TLS加密;HTTP/2是独立协议,需要反向代理单独开启。

三、HTTP/2 全景解析:收益、约束、协议对比

协议传输环境核心优势短板
HTTP/1.1HTTP / HTTPS兼容性最强队头阻塞;多请求需要多TCP连接;请求头冗余
HTTP/2仅HTTPS(浏览器强制),服务端可支持明文h2c多路复用(单TCP并发多请求);HPACK头部压缩;二进制帧;服务端推送老旧客户端兼容差;TCP层面依然存在队头阻塞(HTTP/3解决)
HTTP/3HTTPS(QUIC UDP)UDP多路复用,彻底解决TCP队头阻塞UDP防火墙容易拦截;生态成熟度低于HTTP/2

HTTP/2 关键要点

  1. 浏览器强制:HTTP/2只能跑在HTTPS上;裸HTTP无法使用HTTP/2;
  2. 服务端Nginx/Traefik支持明文h2c,但是Chrome、Firefox浏览器不支持h2c;生产Web场景全部走HTTPS + h2;
  3. HTTP/2是后端代理的开关,和证书本身无关:同样一份LE证书,Nginx可以选择启用HTTP/1.1或者HTTP/2;
  4. HTTP/2 适合前端静态资源多、页面请求数量多的场景(你的yudao-ui-admin前端项目非常适合开启HTTP/2)。

四、Traefik 配置LE证书 + HTTPS + HTTP/2(K8s)

Traefik内置ACME客户端,不需要cert-manager,一键申请LE证书、自动续期、HTTP跳转HTTPS、开启HTTP/2。

4.1 Traefik Static Config(全局配置,开启ACME与HTTP/2)

# traefik static config
entryPoints:
  web:
    address: ":80"
    http:
      middlewares:
        - https-redirect@internal # http自动跳转https
  websecure:
    address: ":443"
    http:
      tls: {}
      serversTransport:
        maxIdleConnsPerHost: 100
    # ✅ 开启HTTP/2
    http2:
      enabled: true

certificatesResolvers:
  letsencrypt:
    acme:
      email: [email protected]
      storage: /acme.json
      httpChallenge:
        entryPoint: web # 使用HTTP-01验证,占用80端口

4.2 IngressRoute 业务路由配置(Jenkins示例)

apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
  name: jenkins-ingressroute
  namespace: jenkins
spec:
  entryPoints:
    - websecure
  routes:
    - match: Host(`jenkins.demo.com`)
      kind: Rule
      services:
        - name: jenkins
          port: 8080
  tls:
    certResolver: letsencrypt # 使用LE自动签发证书

配置生效之后:

  1. Traefik自动向Let’s Encrypt发起域名所有权验证;
  2. 自动下载证书,存储在acme.json;到期自动续期;
  3. 80端口访问自动跳转443 HTTPS;
  4. 443端口同时支持 TLS + HTTP/2协议。

五、Ingress-Nginx 配置LE证书 + HTTPS + HTTP/2(K8s)

Ingress-Nginx没有内置ACME,需要搭配 cert-manager 组件申请和管理LE证书。

5.1 cert-manager ClusterIssuer(LE签发器)

apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-prod
spec:
  acme:
    server: [https://acme-v02.api.letsencrypt.org/directory](https://acme-v02.api.letsencrypt.org/directory)
    email: [email protected]
    privateKeySecretRef:
      name: letsencrypt-prod
    solvers:
    - http01:
        ingress:
          class: nginx

5.2 Ingress资源(开启HTTP/2)

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: jenkins-ingress
  namespace: jenkins
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/ssl-redirect: "true" # http强制跳转https
    nginx.ingress.kubernetes.io/http2-enabled: "true" # ✅开启HTTP/2
spec:
  tls:
  - hosts:
    - jenkins.demo.com
    secretName: jenkins-tls-cert # cert-manager自动创建,存放LE证书
  rules:
  - host: jenkins.demo.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: jenkins
            port:
              number: 8080

六、常见踩坑汇总表

现象根因解决方案
浏览器HTTPS访问正常,但抓包看到协议是HTTP/1.1反向代理没有开启HTTP/2开关;或者客户端不支持HTTP/2Traefik开启http2.enabled=true;Nginx ingress增加注解开启http2
LE证书签发失败,报403HTTP01验证:80端口无法公网访问;域名解析错误;防火墙拦截80检查域名A记录、安全组,放行80端口;改用DNS01验证
证书到期忘记更新,网站证书失效LE证书90天有效期,未配置自动续期Traefik内置自动续期;cert-manager自动续期;不要手动申请维护
内网IP 10.43.136.9尝试申请LE证书LE不支持内网私有IP签发证书使用域名+公网入口,或者自建私有CA签发自签名证书
HTTPS页面加载成功,但部分静态资源报错mixed-content页面内写死http资源地址前端代码全部改成相对路径或者https资源

七、选型决策表

需求场景推荐方案
K8s集群,希望少组件,自动证书,快速上线Traefik内置ACME,LE证书,开启HTTP/2
存量大量Nginx配置,熟悉Ingress-NginxIngress-Nginx + cert-manager + LE证书,开启HTTP/2
内网服务,无公网域名、无公网IP自建私有CA签发证书,不使用Let’s Encrypt
需要泛域名证书 *.demo.comLE DNS-01验证方式
前端Vue项目(yudao-ui-admin)公网部署HTTPS + HTTP/2,静态资源加速收益明显

总结

  1. Let’s Encrypt 是证书颁发方,只负责签发TLS证书;证书是HTTPS的基础;
  2. HTTPS = TLS加密 + HTTP,用来保障传输安全;
  3. HTTP/2 是应用层协议优化,依赖HTTPS(浏览器限制),但是证书不会自动开启HTTP/2,需要反向代理单独配置开关
  4. 在K8s体系:Traefik自带ACME,不用cert-manager;Ingress-Nginx必须搭配cert-manager管理LE证书;两种Ingress都支持一键开启HTTP/2。

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/snowball_li/article/details/165328826

文章来源转载

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--