前言
在开发和测试环境中,我们经常需要搭建HTTPS服务进行测试。但通常Let’s Encrypt等证书颁发机构要求使用有效域名,不直接支持IP地址。本文将详细介绍如何使用Caddy在测试环境中通过IP地址配置HTTPS服务,使用自签名证书解决这一问题。
环境准备
- Ubuntu 22.04服务器(或其他Linux发行版)
- Caddy 2.x版本
- 服务器本地IP地址(本例使用192.168.1.43)
安装Caddy
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
:
{
# 禁用自动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内置自签名证书
}
关键配置说明
auto_https disable_redirects
:禁用自动HTTPS重定向,允许在IP地址上使用自签名证书tls internal
:使用Caddy内置的自签名证书功能- 明确指定IP地址
192.168.1.43
而非通配符:
,确保绑定正确
启动并验证服务
# 验证配置文件
sudo caddy validate --config /etc/caddy/Caddyfile
# 重启Caddy服务
sudo systemctl restart caddy
# 检查服务状态
sudo systemctl status caddy
测试访问
命令行测试
# HTTP测试
curl http://192.168.1.43:18080
# HTTPS测试(-k参数忽略证书警告)
curl -k https://192.168.1.43:18443
浏览器访问
- 在浏览器地址栏输入:
https://192.168.1.43:18443
- 浏览器会显示"不安全连接"警告(因为是自签名证书)
- 点击"高级"→"继续前往网站(不安全)"
防火墙配置
确保防火墙允许相关端口:
sudo ufw allow 18080/tcp
sudo ufw allow 18443/tcp
常见问题解决
1. 服务启动失败
检查日志:
journalctl -u caddy --no-pager -n 50
常见原因:
- 端口冲突:使用
ss -tulnp | grep 端口号
检查 - 权限问题:确保
/usr/share/caddy
目录可读
2. 浏览器拒绝连接
- 确认使用
https://
前缀 - 检查是否正确输入IP和端口
- 尝试清除浏览器缓存
3. 自签名证书不受信任
这是预期行为,测试环境中可以:
- 导出Caddy的自签名证书
- 手动导入到操作系统或浏览器的信任证书库
进阶配置
使用自定义自签名证书
# 生成自签名证书
openssl req -x509 -newkey rsa:4096 -nodes -keyout key.pem -out cert.pem -days 365 -subj "/CN=192.168.1.43"
修改Caddy配置:
192.168.1.43:18443 {
tls /path/to/cert.pem /path/to/key.pem
# 其他配置...
}
完全禁用自动HTTPS
{
auto_https off
}