Caddy如何在测试环境中使用IP地址配置HTTPS服务

前言

在开发和测试环境中,我们经常需要搭建HTTPS服务进行测试。但通常Let's Encrypt等证书颁发机构要求使用有效域名,不直接支持IP地址。本文将详细介绍如何使用Caddy在测试环境中通过IP地址配置HTTPS服务,使用自签名证书解决这一问题。

环境准备

  • Ubuntu 22.04服务器(或其他Linux发行版)
  • Caddy 2.x版本
  • 服务器本地IP地址(本例使用192.168.1.43)

安装Caddy

bash 复制代码
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy

配置Caddyfile

创建或修改/etc/caddy/Caddyfile

bash 复制代码
{
    # 禁用自动HTTPS重定向,允许IP地址使用自签名证书
    auto_https disable_redirects
}

# HTTP服务
:18080 {
    root * /usr/share/caddy
    file_server
}

# HTTPS服务(使用自签名证书)
192.168.1.43:18443 {
    root * /usr/share/caddy
    file_server
    tls internal  # 使用Caddy内置自签名证书
}

关键配置说明

  1. auto_https disable_redirects:禁用自动HTTPS重定向,允许在IP地址上使用自签名证书
  2. tls internal:使用Caddy内置的自签名证书功能
  3. 明确指定IP地址192.168.1.43而非通配符:,确保绑定正确

启动并验证服务

bash 复制代码
# 验证配置文件
sudo caddy validate --config /etc/caddy/Caddyfile

# 重启Caddy服务
sudo systemctl restart caddy

# 检查服务状态
sudo systemctl status caddy

测试访问

命令行测试

bash 复制代码
# HTTP测试
curl http://192.168.1.43:18080

# HTTPS测试(-k参数忽略证书警告)
curl -k https://192.168.1.43:18443

浏览器访问

  1. 在浏览器地址栏输入:https://192.168.1.43:18443
  2. 浏览器会显示"不安全连接"警告(因为是自签名证书)
  3. 点击"高级"→"继续前往网站(不安全)"

防火墙配置

确保防火墙允许相关端口:

bash 复制代码
sudo ufw allow 18080/tcp
sudo ufw allow 18443/tcp

常见问题解决

1. 服务启动失败

检查日志:

bash 复制代码
journalctl -u caddy --no-pager -n 50

常见原因:

  • 端口冲突:使用ss -tulnp | grep 端口号检查
  • 权限问题:确保/usr/share/caddy目录可读

2. 浏览器拒绝连接

  • 确认使用https://前缀
  • 检查是否正确输入IP和端口
  • 尝试清除浏览器缓存

3. 自签名证书不受信任

这是预期行为,测试环境中可以:

  1. 导出Caddy的自签名证书
  2. 手动导入到操作系统或浏览器的信任证书库

进阶配置

使用自定义自签名证书

bash 复制代码
# 生成自签名证书
openssl req -x509 -newkey rsa:4096 -nodes -keyout key.pem -out cert.pem -days 365 -subj "/CN=192.168.1.43"

修改Caddy配置:

bash 复制代码
192.168.1.43:18443 {
    tls /path/to/cert.pem /path/to/key.pem
    # 其他配置...
}

完全禁用自动HTTPS

bash 复制代码
{
    auto_https off
}
相关推荐
2501_915106321 天前
iOS混淆工具实战 金融支付类 App 的安全防护与合规落地
android·ios·小程序·https·uni-app·iphone·webview
逃课的蟠桃3 天前
为什么访问HTTPS站点时,会发生SSL证书错误
网络协议·https
now_cn3 天前
HTTP 与 HTTPS:网络通信幽径上的安全秘钥
安全·http·https
mashanshui3 天前
Https之(二)TLS的DH密钥协商算法
算法·https·tls·dh·ecdhe
2501_920047033 天前
nginx-自制证书实现
运维·windows·nginx·https
2501_915921433 天前
iOS 应用上架多环境实战,Windows、Linux 与 Mac 的不同路径
android·ios·小程序·https·uni-app·iphone·webview
00后程序员张4 天前
iOS 应用上架常见问题与解决方案,多工具组合的实战经验
android·ios·小程序·https·uni-app·iphone·webview
2501_916007474 天前
iOS App 上架实战 从内测到应用商店发布的全周期流程解析
android·ios·小程序·https·uni-app·iphone·webview
.Shu.4 天前
计算机网络 HTTPS 全流程
网络协议·计算机网络·https
唐叔在学习5 天前
万字长文深度解析HTTPS协议
后端·https