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
}
相关推荐
ZzzZZzzzZZZzzzz…42 分钟前
Nginx_Tomcat综合案例
运维·nginx·tomcat·负载均衡·rhce·反向代理·https加密服务
DoWhatUWant10 小时前
域格YM310 X09移芯CAT1模组HTTPS连接服务器
服务器·网络协议·https
Whisper_Yu17 小时前
计算机网络(一)基础概念
计算机网络·http·https·信息与通信
m0_749299951 天前
HTTP与HTTPS
网络协议·http·https
2501_916007472 天前
Transporter App 使用全流程详解:iOS 应用 ipa 上传工具、 uni-app 应用发布指南
android·ios·小程序·https·uni-app·iphone·webview
zhuweisky2 天前
TCP内网穿透:将局域网内部的TCP/HTTP服务暴露在公网上
内网穿透·反向代理·tcp内网穿透·http内网穿透
2501_915909062 天前
HTTPS 错误解析,常见 HTTPS 抓包失败、443 端口错误与 iOS 抓包调试全攻略
android·网络协议·ios·小程序·https·uni-app·iphone
乖女子@@@3 天前
协议_https协议
http·https·iphone
2501_915909063 天前
苹果上架App软件全流程指南:iOS 应用发布步骤、App Store 上架流程、uni-app 打包上传与审核技巧详解
android·ios·小程序·https·uni-app·iphone·webview
2501_915918413 天前
App 苹果 上架全流程解析 iOS 应用发布步骤、App Store 上架流程
android·ios·小程序·https·uni-app·iphone·webview