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

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 。