1. 准备SSL证书
首先需要获取有效的SSL证书(PEM格式),常用方式有两种:
sudo certbot certonly --standalone -d yourdomain.com(替换为你的域名),按提示完成验证,证书会保存在/etc/letsencrypt/live/yourdomain.com/目录下(包含fullchain.pem和privkey.pem)。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)两种方式,以下是详细配置:
步骤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.crt;sudo 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
若需要统一管理多个服务的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流量通过:
sudo ufw allow 443/tcp(反向代理)或sudo ufw allow 9000/tcp(内置HTTPS)。sudo firewall-cmd --permanent --add-port=443/tcp;sudo firewall-cmd --reload。5. 自动续期证书(Let’s Encrypt)
Let’s Encrypt证书有效期为90天,需设置自动续期以避免服务中断:
sudo certbot renew --dry-run
/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或.crt/.key),若证书为其他格式(如.cer),需使用openssl转换。private.key或privkey.pem)需严格保密,权限设置为600(sudo chmod 600 /etc/minio/certs/private.key)。--address ":9000"),无需启用HTTPS,减少资源消耗。