我想把minio弄成https访问能行吗?

在企业应用中,MinIO 是常用的对象存储服务,默认通过 HTTP 提供 API 接口和管理控制台。为了保证数据安全和传输加密,我们对现有 Docker 部署的 MinIO 服务进行了 HTTPS 改造。本文总结整个过程,包括环境信息、配置步骤和测试验证。

一、可行性分析

MinIO 改成 HTTPS 来用,有两种思路:

方案一:直接给 MinIO 配置证书

MinIO 原生支持 HTTPS,只要你在运行目录里放置证书就行。

步骤
  1. 准备证书

    • 如果是公网域名,推荐用 Let's Encrypt 免费证书;

    • 如果只是测试,可以用自签名证书(openssl 就能生成)。

    假设你的域名是 minio.example.com,生成好的证书文件是:

    • public.crt(公钥证书)

    • private.key(私钥)

  2. 放置证书文件

    MinIO 要求证书文件在运行目录下的 .minio/certs/ 路径:

    复制代码
    ~/.minio/certs/public.crt
    ~/.minio/certs/private.key

    如果用的是 CA 链证书,还需要把 ca.crt 放进去。

  3. 启动 MinIO

    复制代码
    minio server /data --address ":9000"

    此时就能通过 https://minio.example.com:9000 访问了。

  4. 修改配置文件

    复制代码
    minio: 
      endpoint: https://minio.example.com:9000 
      bucket: **你的桶** 
      accessKey: 你的Key 
      secret: 你的secret

方案二:Nginx/Traefik 反向代理成 HTTPS

如果你不想改 MinIO 的配置,可以用 NginxTraefik 来做代理。

Nginx 示例
复制代码
server {
    listen 443 ssl;
    server_name minio.example.com;

    ssl_certificate /etc/nginx/ssl/minio.example.com.pem;
    ssl_certificate_key /etc/nginx/ssl/minio.example.com.key;

    location / {
        proxy_pass http://127.0.0.1:9000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

然后修改配置文件:

复制代码
minio: 
  endpoint: https://minio.example.com:9000 
  bucket: **你的桶** 
  accessKey: 你的Key 
  secret: 你的secret
  • 如果能控制 MinIO 的运行环境,直接用 方案一,简单稳定;

  • 如果 MinIO 已经运行在 Docker 或服务里,不想动它,就用 方案二,外面套一层 HTTPS。

二、动手实操:

服务器与部署信息

  • 公网 IP3**.2**.2*.7*

  • 域名***.***.com

  • Docker 镜像版本minio/minio:RELEASE.2024-03-15T01-07-19Z

  • 数据目录/home/minio/data

  • 配置目录/home/minio/config

  • 证书目录/home/minio/config/certs/(已放置 public.crtprivate.key

  • MinIO 用户h**gz**

  • 桶名d*-s**


配置 HTTPS

  1. 准备证书

    • 域名证书:minio.example.com.pem

    • 私钥文件:minio.example.com.key

    • 注意:public.crt 必须包含完整证书链(域名证书 + 中间证书)。

  2. 放置证书到 MinIO 容器

    证书目录通常是这样

    复制代码
    ~/.minio/certs/                  # 证书主目录
    ├── public.crt                   # 服务端证书
    ├── private.key                  # 服务端私钥
    ├── CAs/                         # 用于存放客户端信任的 CA 根证书
    复制代码
    cp /usr/local/nginx/conf/key/minio.example.com.pem /home/minio/config/certs/minio.example.com.crt 
    cp /usr/local/nginx/conf/key/minio.example.com.key /home/minio/config/certs/minio.example.com.key
  3. 重启 MinIO 容器

    复制代码
    docker restart <minio_container_name>
  4. 更新应用配置

    将 MinIO 的 API endpoint 改为 HTTPS:

    复制代码
    minio: 
      endpoint: https://minio.example.com:9000 
      bucket: **你的桶** 
      accessKey: 你的Key 
      secret: 你的secret

验证 HTTPS

证书验证

复制代码
curl -vk https://minio.example.com:9000

输出示例:

SSL certificate verify ok. Server certificate: subject: CN=*.minio.example.com start date: Aug 7 2024 expire date: Sep 6 2025

✅ 证书有效且可信,TLS 加密连接建立成功。

HTTP 已禁用

复制代码
curl -vk http://minio.example.com:9000

输出:

400 Bad Request - Client sent an HTTP request to an HTTPS server.

说明 HTTP 已被禁用,所有请求必须走 HTTPS。

鉴权提示

直接访问 / 会返回:

<Error><Code>AccessDenied</Code><Message>Access Denied.</Message></Error>

这是正常现象,因为 MinIO API 需要 AccessKey/SecretKey 才能访问桶和对象。


三、总结收尾

  1. 安全性提升

    • 所有数据传输通过 HTTPS 加密,避免明文泄露。
  2. 证书管理

    • 确保证书有效期及时更新,否则客户端会报过期错误。

    • MinIO 证书目录必须包含完整证书链。

  3. HTTP 访问禁用

    • 默认情况下,MinIO 开启 TLS 后会拒绝 HTTP 请求。

    • 如需兼容 HTTP,可通过 Nginx 反向代理实现自动跳转。

  4. 客户端访问

    • 使用 MinIO 官方客户端 mc,配置 AccessKey/SecretKey 进行访问:

MinIO 系统已经实现 HTTPS 加密访问,为数据安全提供了可靠保障,同时兼容现有应用程序使用。

相关推荐
礼拜天没时间.3 小时前
深入理解HTTPS:从概念到实战优化
网络协议·http·https
眰恦ゞLYF5 小时前
TCP与HTTP协议以及爬虫
爬虫·网络协议·tcp协议·http协议
励志五个月成为嵌入式糕手9 小时前
0825 http梳理作业
网络·网络协议·http
DebugKitty10 小时前
网络编程1-基本概念、函数接口
运维·服务器·网络·网络协议·socket·tcp
2501_9212904411 小时前
嵌入式第三十六天(网络编程(TCP))
网络·网络协议·tcp/ip
青草地溪水旁14 小时前
HTTP数据之旅:一个网络请求的完整冒险
网络·网络协议·http
2501_9277730715 小时前
Linux系统操作编程——http
网络·网络协议·http
Kookoos1 天前
System.IO.Pipelines 与“零拷贝”:在 .NET 打造高吞吐二进制 RPC
网络协议·rpc·.net·零拷贝·二进制协议·pipelines
MC皮蛋侠客1 天前
使用Python实现DLT645-2007智能电表协议
python·网络协议·tcp/ip·能源