温馨提示×

MinIO Linux版如何配置SSL

小樊
54
2025-09-23 06:58:00
栏目: 云计算

1. 准备SSL证书
首先需要获取有效的SSL证书(PEM格式),常用方式有两种:

  • Let’s Encrypt(免费):适用于生产环境,需通过Certbot工具获取。安装Certbot后,运行sudo certbot certonly --standalone -d yourdomain.com(替换为你的域名),按提示完成验证,证书会保存在/etc/letsencrypt/live/yourdomain.com/目录下(包含fullchain.pemprivkey.pem)。
  • 自签名证书(仅测试):通过OpenSSL生成,命令为openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout minio.key -out minio.crt,生成的证书需转换为PEM格式(若未自动转换,可使用openssl x509 -in minio.crt -out minio.pem -outform PEM)。

2. 配置MinIO使用SSL证书
MinIO支持内置HTTPS(无需反向代理)和反向代理(如Nginx)两种方式,以下是详细配置:

方式一:内置HTTPS(推荐简单场景)

  • 步骤1:放置证书到指定目录
    将证书和私钥复制到MinIO的默认证书目录/etc/minio/certs/,并确保文件名符合要求:

    • 证书文件:public.crt(对应fullchain.pem或自签名证书的PEM文件)
    • 私钥文件:private.key(对应privkey.pem或自签名证书的私钥文件)
      示例命令:sudo cp /etc/letsencrypt/live/yourdomain.com/fullchain.pem /etc/minio/certs/public.crtsudo cp /etc/letsencrypt/live/yourdomain.com/privkey.pem /etc/minio/certs/private.key
  • 步骤2:启动MinIO并启用HTTPS
    通过命令行参数指定证书路径和HTTPS端口(默认9000):

    minio server /data --address ":9000" --console-address ":9001" --certs-dir "/etc/minio/certs"
    

    或通过环境变量配置(适用于systemd服务):
    编辑MinIO的systemd服务文件(如/etc/systemd/system/minio.service),在[Service]部分添加:

    Environment="MINIO_CERT_FILE=/etc/minio/certs/public.crt"
    Environment="MINIO_KEY_FILE=/etc/minio/certs/private.key"
    

    保存后重载systemd并重启服务:

    sudo systemctl daemon-reload
    sudo systemctl restart minio
    

方式二:通过反向代理(Nginx,推荐生产环境)

若需要统一管理多个服务的SSL证书或实现负载均衡,可使用Nginx作为反向代理:

  • 步骤1:安装Nginx并获取SSL证书
    安装Nginx:sudo apt install nginx(Ubuntu);sudo yum install nginx(CentOS)。
    使用Certbot为Nginx获取证书:sudo certbot --nginx -d yourdomain.com,按提示完成配置。

  • 步骤2:配置Nginx反向代理
    编辑Nginx的配置文件(如/etc/nginx/sites-available/minio),添加以下内容:

    server {
        listen 443 ssl;
        server_name yourdomain.com;
        ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
        
        location / {
            proxy_pass http://localhost:9000;  # 转发到MinIO的内置HTTPS端口
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
    

    启用配置并重启Nginx:

    sudo ln -s /etc/nginx/sites-available/minio /etc/nginx/sites-enabled/
    sudo systemctl restart nginx
    
  • 步骤3:启动MinIO(HTTP模式)
    由于SSL由Nginx处理,MinIO可配置为HTTP模式(更轻量):

    minio server /data --address ":9000" --console-address ":9001"
    

3. 验证SSL配置

  • 浏览器访问:打开https://yourdomain.com:9000(内置HTTPS)或https://yourdomain.com(反向代理),检查地址栏是否有安全锁标志(表示SSL生效)。
  • 命令行测试:使用curl命令验证HTTPS连接:
    curl -v https://yourdomain.com:9000
    
    若输出中包含SSL handshake successful,则说明配置成功。

4. 配置防火墙
确保防火墙允许HTTPS流量通过:

  • UFW(Ubuntu)sudo ufw allow 443/tcp(反向代理)或sudo ufw allow 9000/tcp(内置HTTPS)。
  • Firewalld(CentOS)sudo firewall-cmd --permanent --add-port=443/tcpsudo firewall-cmd --reload

5. 自动续期证书(Let’s Encrypt)
Let’s Encrypt证书有效期为90天,需设置自动续期以避免服务中断:

  • Certbot自动续期:Certbot默认会添加定时任务(每天检查),可通过以下命令测试续期:
    sudo certbot renew --dry-run
    
  • 续期后重启MinIO:若使用内置HTTPS,需在续期钩子中添加重启MinIO的命令。编辑Certbot的续期部署钩子(/etc/letsencrypt/renewal-hooks/deploy/restart_minio.sh),内容为:
    #!/bin/bash
    systemctl restart minio
    
    赋予执行权限:sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/restart_minio.sh

注意事项

  • 证书格式必须为PEM(.pem.crt/.key),若证书为其他格式(如.cer),需使用openssl转换。
  • 私钥文件(private.keyprivkey.pem)需严格保密,权限设置为600sudo chmod 600 /etc/minio/certs/private.key)。
  • 若使用反向代理,MinIO本身可运行在HTTP模式(--address ":9000"),无需启用HTTPS,减少资源消耗。

0