MinIO 签名不通过


MinIO 签名不通过

不管是 MinIO Client 还是 SDK,报错:The request signature we calculated does not match the signature you provided. Check your key and signing method.

image-20231109092649963

按以下情况依次排查问题:

  1. MinIO 容器内部时间、MinIO Client 容器内部时间、宿主机时间是否同步
  2. MinIO 内的证书、Nginx 证书、Frp 证书是否一致
  3. 查看 Nginx 日志,检查请求的 ip 是否为真实 ip

时间不同步问题

创建容器时加入配置来同步宿主机时间:

-e TZ=Asia/Shanghai \
-v /etc/localtime:/etc/localtime:ro \
-v /etc/timezone:/etc/timezone:ro \

不同容器内可能显示的时区不同,例如宿主机显示 CST 时区上午8点,而容器内显示 GMT 时区上午0点,那么这两个时间是相同的。部分机器可能不是 24 小时制,但只要手动换算后时间同步即可

证书问题

证书不一定要指向同一个路径,也不一定要同一个格式,但是绑定的必须是同一个域名

MinIO 容器内部目录 /root/.minio/certs 中需要 public.crtprivate.keypublic.crt 可以由 pem 格式改后缀名得到

如果是多个域名,可以在此目录下建子目录来存放,例如如果我有两个域名 oss.cimoc.cnmyoss.cimoc.cn 都指向同一个 MinIO 服务,那么 /root/.minio/certs 目录结构应该如下:

-certs
  -oss.cimoc.cn
    -public.crt
    -private.key
  -myoss.cimoc.cn
    -public.crt
    -private.key

Nginx 的 SSL 配置参考:

# 公钥也可以是crt格式
ssl_certificate    /path/to/fullchain.pem;
# 私钥也可以是key格式
ssl_certificate_key    /path/to/privkey.pem;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
add_header Strict-Transport-Security "max-age=31536000";
error_page 497  https://$host$request_uri;

Frp 的 SSL 配置

frpc.ini:

plugin = https2http
plugin_crt_path = /path/to/public.crt
plugin_key_path = /path/to/private.key

Ip问题

Nginx 的日志默认在 /var/log/nginx/access.log

如果你发现请求 MinIO 的日志 IP 如下是 127.0.0.1,那么就是 IP的问题导致签名无法校验通过

127.0.0.1 - - [09/Nov/2023:09:21:47 +0800] "GET /minio/test-img/ HTTP/1.1" 200 757 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 Edg/119.0.0.0"

在 Nginx 配置中加上:

proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

如果有 Frp,检查 frpc.ini 是否有下面的配置,如果有,删除掉:

plugin_host_header_rewrite = 127.0.0.1

重启服务

如果给 MinIO 添加了 证书,那么需要重启:

docker stop minio
docker start minio

修改了 Nginx 配置,需要重载或重启(二选一):

# 重载配置
nginx -s reload
# 重启
systemctl restart nginx

修改了 frpc.ini,需要重启:

# 系统服务重启
systemctl restart frpc


# 如果没有配置系统服务
# 找到pid
ps -ef |grep frpc
# kill
kill -9 找到的pid
# 进入frp的目录
cd /yourfrp
# 启动frpc
frpc -c frpc.ini

文章作者: ❤纱雾
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 ❤纱雾 !
评论
  目录