1Panel 部署容器 Maddy 邮局更换 TLS 证书教程
Maddy 通常会在配置文件中引用:
/data/tls/fullchain.pem
/data/tls/privkey.pem更换证书的核心步骤是:备份旧证书、复制新证书、重启容器、验证连接。
一、确认 Maddy 的数据目录
查看容器挂载关系:
docker inspect <容器名称> \
--format '{{range .Mounts}}{{println .Type .Name .Source .Destination}}{{end}}'如果看到类似:
volume maddydata /var/lib/docker/volumes/maddydata/_data /data说明 Maddy 的数据目录是 Docker Volume。
获取 Volume 的实际路径:
docker volume inspect <volume名称> \
--format '{{.Mountpoint}}'假设输出为:
/var/lib/docker/volumes/maddydata/_data则证书目录通常为:
/var/lib/docker/volumes/maddydata/_data/tls/二、备份旧证书
DATA_DIR=/var/lib/docker/volumes/<volume名称>/_data
TLS_DIR="$DATA_DIR/tls"
BACKUP_DIR="$DATA_DIR/tls-backup-$(date +%Y%m%d%H%M%S)"
mkdir -p "$BACKUP_DIR"
cp -a "$TLS_DIR/fullchain.pem" "$BACKUP_DIR/"
cp -a "$TLS_DIR/privkey.pem" "$BACKUP_DIR/"三、复制新证书
将下面的 CERT_DIR 替换为新证书所在目录:
CERT_DIR=/path/to/new/certificate
DATA_DIR=/var/lib/docker/volumes/<volume名称>/_data
TLS_DIR="$DATA_DIR/tls"
install -m 0644 "$CERT_DIR/fullchain.pem" "$TLS_DIR/fullchain.pem"
install -m 0600 "$CERT_DIR/privkey.pem" "$TLS_DIR/privkey.pem"证书文件通常应为:
fullchain.pem
privkey.pem不要只使用单独的 cert.pem,否则部分客户端可能无法验证完整证书链。
四、检查证书和私钥是否匹配
openssl x509 -in "$TLS_DIR/fullchain.pem" \
-pubkey -noout | openssl pkey -pubin -outform pem | sha256sum
openssl pkey -in "$TLS_DIR/privkey.pem" \
-pubout -outform pem | sha256sum两条命令输出的哈希值必须一致。
五、重启 Maddy 容器
docker restart <容器名称>检查容器状态:
docker ps --filter name=<容器名称>六、验证 SMTP 证书
587 端口使用 STARTTLS:
openssl s_client \
-starttls smtp \
-connect mail.example.com:587 \
-servername mail.example.com \
-verify_return_error </dev/null 2>&1 | \
grep -E 'subject=|issuer=|notAfter=|Verify return code'465 端口使用直接 TLS:
openssl s_client \
-connect mail.example.com:465 \
-servername mail.example.com \
-verify_return_error </dev/null 2>&1 | \
grep -E 'subject=|issuer=|notAfter=|Verify return code'正常结果应包含:
Verify return code: 0 (ok)如果仍然显示旧证书,通常是以下原因:
复制到了错误的目录
容器没有重启
Maddy 实际使用的是另一个 Volume
DNS 指向了其他服务器
证书文件名与配置文件不一致
查看 Maddy 实际配置:
docker exec <容器名称> sh -c \
'grep -n "tls file" /data/maddy.conf'更换证书后,建议同时检查 465、587、993 等 TLS 服务端口。
评论