Internal LAN Secure HTTPS Certificate with Cloudflare API

LAN

内网 安全HTTPS 证书管理(Cloudflare API + Split DNS)


方案综述(针对内网HTTPS 访问提示证书不安全告警问题)

  1. 前提 vm.msfts.org 是你内网想用的域名,需要对应到 192.168.2.200 内网IP。
  2. 核心问题 公有 CA(Let’s Encrypt)发证书必须能完成域名所有权验证(DNS-01 或 HTTP-01),且域名对应的 zone 必须在公网上被管理。 同时你访问时解析到的是内网 IP。
  3. 实现思路
  • 方案 A:通过 Cloudflare DNS-01 申请 Let’s Encrypt 证书(公信),并内网 DNS 做 Split DNS 解析 你需要确保:
    • 域名 msfts.org 托管在 Cloudflare,且你有权限修改 DNS
    • 使用 Cloudflare API 申请证书,证书覆盖 vm.msfts.org
    • 公网 DNS 里不设置 vm.msfts.org A 记录,或者设置为无效 IP
    • 内网 DNS 服务器(如公司AD DNS或Bind)把 vm.msfts.org 解析到 192.168.2.200
    • ESXi 的 Web 服务部署这个证书(支持自定义 SSL)
  • 方案 B:自建内部 CA 签发证书,给内网所有客户端(浏览器)下发信任根证书 这是纯内网方案,无需公网参与,适合企业内网,步骤包括:
    • 自建 CA(OpenSSL 或 AD CS)
    • 生成包含 vm.msfts.org 和内网 IP 192.168.2.200 的证书(SAN)
    • 部署证书到 ESXi
    • 给所有内网客户端导入并信任 CA 根证书(通过组策略、MDM 或手动)

  • 适用场景:
    • 内网 ESXi 服务器、Web 应用、API 服务等 HTTPS 服务
    • 纯内网 IP,域名通过内部 DNS 解析
  • 目标:
    • 浏览器访问不弹“证书不可信”或安全警告
    • 内网 HTTPS 服务使用公信或自签证书,统一管理

一、前提条件(方案A)

  1. 必须拥有一个域名
    • 例如:msfts.org
    • 域名必须在你可控的 DNS 提供商处托管(Cloudflare、GoDaddy 等)
  2. Cloudflare 托管域名
    • 域名在 Cloudflare 托管
    • 能够添加 DNS 记录和 API Token
  3. 内网服务器
    • ESXi / Web / API 服务器 IP 内网可访问
    • 内网 DNS 可以做 Split DNS(内部域名解析到内网 IP)

二、Cloudflare API 设置

1. 登录 Cloudflare 并获取 API Token
  1. 登录 Cloudflare 控制台
  2. 进入 “My Profile -> API Tokens”
  3. 创建 API Token
    • 模板:Zone:DNS
    • 权限:
      • Zone:Read
      • DNS:Edit
    • 限制作用域到你的域名,例如 msfts.org
  4. 保存生成的 Token(例如 CLOUDFLARE_API_TOKEN
2. 在申请机上保存凭证文件
mkdir -p ~/.secrets
cat > ~/.secrets/cloudflare.ini <<EOF
dns_cloudflare_api_token = CLOUDFLARE_API_TOKEN
EOF
chmod 600 ~/.secrets/cloudflare.ini

三、证书申请(公信 CA,Let’s Encrypt)

#### Ubuntu / Debian
sudo apt update
sudo apt install certbot -y
sudo apt install python3-certbot-dns-cloudflare -y

#### CentOS / RHEL
sudo yum install epel-release -y
sudo yum install certbot -y
sudo yum install python3-certbot-dns-cloudflare -y

#### 
which certbot && certbot --version
sudo certbot certonly \
  --dns-cloudflare \
  --dns-cloudflare-credentials ~/.secrets/cloudflare.ini \
  -d vm.msfts.org \
  --key-type rsa \
  --rsa-key-size 2048
  • 成功后,证书保存在:/etc/letsencrypt/live/vm.msfts.org/
  • 文件包括:
    • privkey.pem(私钥)
    • fullchain.pem(证书链)

四、内网 DNS 配置(Split DNS)

  1. 内网 DNS 添加 A 记录:
vm.msfts.org  A  192.168.2.200
  1. 公网 DNS 可不设置或指向无效 IP
  2. 确认解析正确:
nslookup vm.msfts.org  # 返回内网 IP 192.168.2.200

五、ESXi 证书部署

1. SHA256 校验证书与私钥匹配
openssl rsa -noout -modulus -in rui.key | openssl sha256
openssl x509 -noout -modulus -in rui.crt | openssl sha256
2. 上传证书到 ESXi
mv /etc/vmware/ssl/rui.crt /etc/vmware/ssl/rui.crt.bak
mv /etc/vmware/ssl/rui.key /etc/vmware/ssl/rui.key.bak

scp fullchain.pem root@192.168.2.200:/etc/vmware/ssl/rui.crt
scp privkey.pem root@192.168.2.200:/etc/vmware/ssl/rui.key

chmod 600 /etc/vmware/ssl/rui.*
chown root:root /etc/vmware/ssl/rui.*
3. 重启 ESXi 服务
/etc/init.d/hostd restart
/etc/init.d/vpxa restart

4. 验证
> curl -Ik https://vm.msfts.org
HTTP/1.1 200 OK
Date: Wed, 12 Nov 2025 10:11:25 GMT
Connection: Keep-Alive
Content-Security-Policy: upgrade-insecure-requests
Content-Type: text/html
Strict-Transport-Security: max-age=31536000
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
X-XSS-Protection: 1
Content-Length: 258

> nslookup vm.msfts.org
Server:		192.168.2.1
Address:	192.168.2.1#53

Name:	vm.msfts.org
Address: 192.168.2.200

image-20251112141058162

image-20251112145123784

六、其他局域网 HTTPS 应用部署思路

其他应用也是一样的思路,针对不同的应用需要生成不一样证书,再将证书放到应用的相对应的证书位置进行配置即可。

1. 部署示例
  • Nginx
server {
    listen 443 ssl;
    server_name web.lan.local;

    ssl_certificate /etc/nginx/ssl/web.crt;
    ssl_certificate_key /etc/nginx/ssl/web.key;
}
  • Apache
SSLEngine on
SSLCertificateFile /etc/httpd/ssl/web.crt
SSLCertificateKeyFile /etc/httpd/ssl/web.key
  • Tomcat
openssl pkcs12 -export -in fullchain.pem -inkey privkey.pem -out server.pfx \
  -name tomcat -password pass:changeit

修改 server.xml 使用 PKCS12 文件,重启 Tomcat。


七、统一管理与自动化建议

  1. 证书统一存储:/etc/ssl/private//srv/certs/
  2. 权限控制:chmod 600chown root:root
  3. 自动续期:
    • 公信 CA 使用 Certbot
    • 内网自签证书可写脚本生成并替换
  4. Split DNS 保证域名解析到内网 IP

九、参考文档


⚠️ 注意:

  • 拥有域名是前提
  • FIPS 模式禁止使用 MD5/SHA1
  • Split DNS 是内网 HTTPS 部署关键