AutoSSL
部署证书

S3 兼容存储

如何把 SSL 证书自动部署到任意 S3 兼容对象存储桶。

概览

AutoSSL 可以把 SSL 证书文件自动上传到任意 S3 兼容对象存储桶。你需要提供自定义 HTTPS 端点和存储桶名称,因此它适用于 MinIO、Wasabi、Ceph,以及其他没有专用服务商的 S3 兼容服务。

每张证书都会写入带版本的归档路径,并同步更新 latest/ 路径,方便下游系统(例如 Nginx、Caddy,或从对象存储拉取证书的自定义脚本)获取当前证书。

如何管理和运行此部署,请参见 部署管理。

配置参数

在 AutoSSL 控制台添加或编辑此部署目标时,需要配置以下参数:

参数说明示例
端点S3 兼容 API 的 HTTPS URL。不支持 HTTP 端点。https://minio.example.com
区域(可选) 用于请求签名的区域。默认是 us-east-1。请使用服务商要求的值。us-east-1
存储桶名称要上传证书文件的存储桶名称。my-ssl-certs
对象键前缀(可选) 用于在存储桶中整理证书文件的前缀。设置后,文件会上传到该前缀下。末尾的斜杠可有可无。certs/example.com/
强制路径样式(可选) 启用路径样式 URL(https://endpoint/bucket/key)。MinIO 和部分自建 S3 兼容服务需要开启。true(适用于 MinIO)

端点必须使用 HTTPS。出于安全考虑,AutoSSL 会拒绝 HTTP 端点。

工作原理

AutoSSL 把证书部署到 S3 兼容存储桶(例如 my-ssl-certs(前缀 certs/example.com/))时,会执行以下步骤:

  1. 准备证书:

    • 将完整证书链拆成单独的 PEM 文件:cert.pem(叶子证书)、privkey.pem(私钥,PKCS#8 编码)、chain.pem(中间证书链)和 fullchain.pem(完整证书链)。
    • 生成包含证书元数据的 README.md,并附上 https://autossl.dev 链接,便于追溯。
    • 解析证书的 notBefore 日期和 SHA1 指纹,生成归档目录名(格式:YYYY-MM-DD_<first 8 chars of SHA1>)。
  2. 上传文件:

    • 把证书文件(四个 PEM 文件和 README.md)上传到存储桶中的 两个路径:
      • 归档路径 — certs/example.com/2026-05-30_e5f6a7b8/cert.pem(以及 privkey.pem、chain.pem、fullchain.pem、README.md)。每次签发都使用唯一路径,不会被覆盖。
      • 最新路径 — certs/example.com/latest/cert.pem(以及 privkey.pem、chain.pem、fullchain.pem、README.md)。此路径始终是最近一次上传的证书。

下游服务可以通过固定的对象键从 latest/ 路径获取当前证书。历史证书仍保留在各自的版本归档目录中。

存储桶结构示例

多次续期后,存储桶结构类似这样:

certs/example.com/
├── 2026-03-01_a1b2c3d4/
│   ├── cert.pem
│   ├── privkey.pem
│   ├── chain.pem
│   ├── fullchain.pem
│   └── README.md
├── 2026-05-30_e5f6a7b8/
│   ├── cert.pem
│   ├── privkey.pem
│   ├── chain.pem
│   ├── fullchain.pem
│   └── README.md
└── latest/
    ├── cert.pem
    ├── privkey.pem
    ├── chain.pem
    ├── fullchain.pem
    └── README.md

私钥格式

privkey.pem 使用 PKCS#8 格式(-----BEGIN PRIVATE KEY-----)。现代 Web 服务器和工具(Nginx、Caddy、Traefik、OpenSSL 1.1+ 等)普遍支持此格式。

如果环境需要 PKCS#1 格式(例如 RSA 密钥的 -----BEGIN RSA PRIVATE KEY-----),请在本地转换后再使用:

openssl rsa -in privkey.pem -out privkey-pkcs1.pem

访问密钥要求

此服务商需要 S3 兼容存储凭证。

所需权限

访问密钥必须有权向目标存储桶上传对象。至少需要以下 S3 操作:

  • 对目标存储桶(或存储桶前缀)的 s3:PutObject

对于 MinIO,请为用户授予允许对目标存储桶执行 s3:PutObject 的策略。

故障排查

现象可能的处理方式
连接被拒绝或 DNS 错误确认端点 URL 正确,并且 AutoSSL 可以访问。
访问被拒绝检查访问密钥是否拥有该存储桶的 PutObject 权限。
签名不匹配按服务商要求尝试其他 区域。
使用自定义端点时找不到存储桶开启 强制路径样式(MinIO 通常需要)。
S3 兼容存储 | AutoSSL