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
}
相关推荐
23124_8018 小时前
HTTPS中间人攻击
网络·网络协议·https
草根站起来19 小时前
https加密证书
网络协议·http·https
2501_9151063221 小时前
Android和IOS 移动应用App图标生成与使用 Assets.car生成
android·ios·小程序·https·uni-app·iphone·webview
极安代理1 天前
HTTPS代理详解:工作原理与使用优势全解析
网络协议·http·https
2501_915918411 天前
Mac 抓包软件有哪些?Charles、mitmproxy、Wireshark和Sniffmaster哪个更合适
android·ios·小程序·https·uni-app·iphone·webview
2501_915106321 天前
iOS 抓包绕过 SSL 证书认证, HTTPS 暴力抓包、数据流分析
android·ios·小程序·https·uni-app·iphone·ssl
2501_915921431 天前
iOS App 电耗管理 通过系统电池记录、Xcode Instruments 与克魔(KeyMob)组合使用
android·ios·小程序·https·uni-app·iphone·webview
光影少年2 天前
http和https区别、令牌、三次握手流程
网络协议·http·https
2501_915921432 天前
iOS 描述文件制作过程,从 Bundle ID、证书、设备到描述文件生成后的验证
android·ios·小程序·https·uni-app·iphone·webview
“αβ”2 天前
传输层协议--TCP协议
linux·服务器·网络·网络协议·tcp/ip·http·https