1Panel 部署容器 Maddy 邮局更换 TLS 证书教程

八月 23, 2026 / 3ku / 1阅读 / 0评论

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 服务端口。

文章作者:3ku

文章链接:https://nanodesu.net/archives/81

版权声明:本博客所有文章除特别声明外,均采用CC BY-NC-SA 4.0 许可协议,转载请注明出处!


评论