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
}
相关推荐
游戏开发爱好者81 天前
iPhone重启日志深度解析与故障代码诊断
android·ios·小程序·https·uni-app·iphone·webview
2301_803554522 天前
https
网络协议·http·https
心一信息2 天前
http与https的详细介绍
网络协议·http·https
谢尔登2 天前
HTTPS 究竟比 HTTP 好在哪?
http·https·ssl
00后程序员张3 天前
接口调试从入门到精通,Fiddler抓包工具、代理配置与HTTPS抓包实战技巧
前端·ios·小程序·https·fiddler·uni-app·webview
游戏开发爱好者83 天前
iOS IPA 上传工具全面解析,从 Transporter 到开心上架(Appuploader)命令行的高效上架实践
android·ios·小程序·https·uni-app·iphone·webview
IUGEI4 天前
深入解析HTTP长连接原理
java·网络·后端·网络协议·tcp/ip·http·https
IUGEI4 天前
Websocket、HTTP/2、HTTP/3原理解析
java·网络·后端·websocket·网络协议·http·https
胖咕噜的稞达鸭4 天前
进程概念,冯诺依曼体系结构,系统调用,父子进程初解
https·vim·bash
2501_915106324 天前
iOS 抓包全流程指南,HTTPS 抓包、TCP 数据流分析与多工具协同的方法论
android·tcp/ip·ios·小程序·https·uni-app·iphone