HAproxy1.8 版本配置MinIO SSL出错解决方案

HAproxy1.8 版本配置MinIO SSL出错解决方案

背景

由于某客户在MinIO上使用的是HAproxy 1.8 版本,操作系统使用的是RHCL8.6 版本。在操作系统内核、SSL证书位数和HAproxy 1024位证书上产生问题。

针对此问题,进行了解决,产生此结论,供大家快速解决问题。

MinIO中国团队,后续因为此产生相关问题,产生知识记录,后续客户若产生问题,可在MinIO中国社区依此办法解决。

一、HAproxy 版本间证书问题

在新的标准中证书为.pem 和 private key 分别设置,由HAproxy进行读取。

但是在HAproxy 1.8版以及之前的版本中,证书为.pem 与private key进行合成为一个证书的办法,产生证书。

否则,会产生报错,报错如下:

HAProxy service fails with error "bind :443 unable to load SSL certificate from PEM file <path/to/.pem>file".

二、 HAproxy 1024位证书的问题

报错信息如下:

[WARNING] 096/214815 (5805) : parsing [/etc/haproxy/haproxy.cfg:67] : 'bind 0.0.0.0:443' :
  unable to load default 1024 bits DH parameter for certificate '/etc/haproxy/bundle.pem'.
  , SSL library will use an automatically generated DH parameter.
[WARNING] 096/214815 (5805) : Setting tune.ssl.default-dh-param to 1024 by default, if your workload permits it you should set it to at least 2048. Please set a value >= 1024 to make this warning disappear.

主要提示为证书位数1024位的不满足工作负载的需求,需要将其改为2048位。

您可以通过一些不同的设置来解决 HAProxy 中的tune.ssl.default-dh-param 警告。

一种选择是根据警告消息在 中明确将 tune.ssl.default-dh-param 值设置为大于 1024 的值。

但是,HAProxy 文档 建议指定自定义 Diffie-Hellman 参数,因为该方法更安全,因此我们将改用该方法。/etc/haproxy/haproxy.cfg 首先,您将使用 实用程序生成一个 dhparams.pem 文件。

创建文件后,您将其添加到全局 HAProxy 配置部分,以便任何 块都会继承该设置。opensslfrontend 要生成自定义 DH 参数,请运行以下命令:

sudo openssl dhparam -out /etc/haproxy/dhparams.pem 2048
输出过程进行些许的等待:
Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time
..............

命令完成后,将 HAProxy 配置为使用自定义 DH 参数文件。在 或您喜欢的编辑器中打开 /etc/haproxy/haproxy.cfg:

sudo vi /etc/haproxy/haproxy.cfg

输出信息如下:

# turn on stats unix socket
    stats socket /var/lib/haproxy/stats
    # utilize system-wide crypto-policies
    #ssl-default-bind-ciphers PROFILE=SYSTEM
    ssl-default-server-ciphers PROFILE=SYSTEM

现在在 ssl-default-server-ciphers PROFILE=SYSTEM 行后面添加一行,如下所示:

ssl-dh-param-file /etc/haproxy/dhparams.pem

整个部分应类似于以下内容,包括您添加的新突出显示的ssl-dh-param-file行:

# turn on stats unix socket
    stats socket /var/lib/haproxy/stats
    # utilize system-wide crypto-policies
    #ssl-default-bind-ciphers PROFILE=SYSTEM
    ssl-default-server-ciphers PROFILE=SYSTEMssl-dh-param-file /etc/haproxy/dhparams.pem

重新服务:

sudo systemctl restart haproxy.service

三、配置证书

3.1 证书准备

准备相关证书,并修改/etc/hosts劫持相关域名:
vim /etc/hosts

劫持后结果如下:
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.31.233 img.minio.org.cn
测试ping:
ping img.minio.org.cn
测试成功。

3.2 将相关证书合成

将private key 整合至.crt后,将其修改名称为.pem或者保持原名.crt均可。

操作办法如下:
cat img.minio.org.cn.key >> img.minio.org.cn.pem
注:本例以img.minio.org.cn 为例,可换为实际操作的域名。

3.3 调整HAproxy 后添服务器

使用如下命令,添加HAproxy backend 服务器信息:

vim /etc/haproxy/haproxy.cfg

添加如下信息:

backend servers
    balance roundrobin
    mode http
    server web1 192.168.31.211:9001 check
    server web2 192.168.31.212:9001 check
    server web3 192.168.31.213:9001 check
    server web4 192.168.31.214:9001 check


backend servers-endpoint
    balance roundrobin
    mode http
    server web1 192.168.31.211:9000 check
    server web2 192.168.31.212:9000 check
    server web3 192.168.31.213:9000 check
    server web4 192.168.31.214:9000 check

3.4 添加前端配置

我们为了更好的实现效果,在443和9443添加TLS证书。
在http端口 9000和9001不添加证书。
前端配置如下:

frontend minio-https
        bind *:443 ssl crt /etc/haproxy/certs/img.minio.org.cn.pem
        bind *:9001
        mode http
        default_backend servers


frontend endpoint
        bind *:9000
        bind *:9443 ssl crt /etc/haproxy/certs/img.minio.org.cn.pem
        mode http
        default_backend servers-endpoint

3.5 重启服务访问https和http

fa7ebc5d96d55a7b21c2a13d2311d9341.jpeg

https配置成功, http配置成功,重启服务,配置成功。

四、添加mc 客户端

4.1 安装mc客户端

#下载mc 客户端
wget https://dl.minio.org.cn/client/mc/release/linux-amd64/mc

mv mc  /usr/local/bin/mc
chmod +x /usr/local/bin/mc
ln -s /usr/local/bin/mc /usr/bin/mc

4.2 配置客户端

添加9443 相关endpoint 至mc:

#添加远端服务器
mc alias set ssl https://192.168.31.233:9443 minioadmin minioadmin
#output
Added `ssl` successfully.
mc ls ssl
# 显示输出信息
[2023-10-19 10:45:13 EDT]     0B test/
[2023-10-19 10:45:19 EDT]     0B test1/

结论

可以使用更新的版本或者我们官方推荐的配置。
如果使用了相关低版本,在商业客户上我们会给予支持,提供全面的处理方案。

商业技术支持请联系MinIO中国官网 https://www.minio.org.cn

上一篇 下一篇