为什么我们需要IP证书?

在日常运维中,我们经常遇到这些场景:

  • 企业内部系统(如ERP、OA)需要HTTPS加密但无公网域名
  • IoT设备通过IP直连时需要安全通信
  • 开发测试环境快速搭建HTTPS服务

传统域名证书要求必须有可解析的域名,而IP证书直接绑定IP地址,完美解决了这些特殊场景的安全需求。

IP证书应用场景

为什么选择acme.sh?

对比常见的Certbot,acme.sh有几个明显优势:

  • 纯Shell编写,无语言环境依赖
  • 支持IP证书的通配符申请(如192.168.1.*)
  • 内置DNS API集成(支持Cloudflare、阿里云等20+厂商)
  • 自动续期机制更完善

实战操作:通过DNS验证申请证书

环境准备

  1. 确保服务器能访问公网(用于与ACME服务器通信)
  2. 拥有DNS解析管理权限(需要添加TXT记录)
  3. 安装acme.sh(以下以Linux为例):
# 安装命令(自动添加到crontab)
curl https://get.acme.sh | sh -s email=your@example.com

关键申请步骤

  1. 设置DNS API密钥(以Cloudflare为例):
export CF_Key="your_cloudflare_api_key"
export CF_Email="your_cloudflare_account"
  1. 执行证书申请命令:
# 为IP 203.0.113.45申请证书
acme.sh --issue --dns dns_cf -d 203.0.113.45 \
  --server letsencrypt \
  --dnssleep 60  # 等待DNS生效时间
  1. 证书自动安装到指定目录:
acme.sh --install-cert -d 203.0.113.45 \
  --key-file /path/to/key.pem \
  --fullchain-file /path/to/fullchain.pem

证书申请流程

你必须知道的避坑指南

频率限制陷阱

Let's Encrypt对同一IP有以下限制:

  • 每周最多5张证书(失败也计数)
  • 重复申请需间隔60分钟

建议:测试时使用--staging参数申请测试证书

内网DNS特殊处理

如果IP是内网地址(如192.168.*):

  1. 需要自建ACME服务器(如Step CA)
  2. 或使用商业CA专门的内网证书服务

证书链验证

使用这个命令检查完整性:

openssl verify -CAfile /path/to/fullchain.pem /path/to/cert.pem

安全加固建议

  1. OCSP Stapling:减少客户端验证延迟

    ssl_stapling on;
    ssl_stapling_verify on;
  2. HSTS:强制HTTPS访问

    add_header Strict-Transport-Security "max-age=63072000" always;
  3. 定期检查证书状态:

    acme.sh --list

验证证书有效性

使用这个命令确认证书绑定正确:

echo | openssl s_client -connect 203.0.113.45:443 2>/dev/null | \
  openssl x509 -noout -text | grep -A 1 "Subject Alternative Name"

思考题

当证书需要更新时,如何设计自动轮换方案才能实现零停机?可以考虑:

  • 双证书热切换
  • 负载均衡器配合
  • 服务优雅重启机制

欢迎在评论区分享你的方案!

Logo

音视频技术社区,一个全球开发者共同探讨、分享、学习音视频技术的平台,加入我们,与全球开发者一起创造更加优秀的音视频产品!

更多推荐