Haproxy ssl配置 - 安装根证书和中间证书

Nov*_*ato 17 ssl openssl load-balancing centos haproxy

经过大量的谷歌搜索,我终于让我的haproxy ssl工作.但是现在我遇到了问题,因为没有安装root和中间证书所以我的ssl没有绿色条.

我的haproxy配置

global
      maxconn     4096 
      nbproc      1
      #debug
      daemon
      log         127.0.0.1    local0

  defaults
      mode        http
      option      httplog
      log         global
    timeout connect 5000ms
    timeout client 50000ms
    timeout server 50000ms

  frontend unsecured
      bind 192.168.0.1:80
      timeout     client 86400000
      reqadd X-Forwarded-Proto:\ http
      default_backend      www_backend

  frontend  secured
  mode http
   bind 192.168.0.1:443 ssl crt /etc/haproxy/cert.pem
   reqadd X-Forwarded-Proto:\ https
  default_backend www_backend

  backend www_backend
      mode        http
      balance     roundrobin
      #cookie      SERVERID insert indirect nocache
      #option      forwardfor
      server      server1 192.168.0.2:80  weight 1 maxconn 1024 check
      server      server2 192.168.0.2:80  weight 1 maxconn 1024 check
Run Code Online (Sandbox Code Playgroud)

192.168.0.1是我的负载均衡器ip./etc/haproxy/cert.pem包含私钥和域证书,例如.www.domain.com

ssl配置还有另一个问题,包括bundle.crt.当我联系我的ssl支持时,他们告诉我需要安装root和中间证书.

Comodo文档中,创建捆绑包很简单,就像合并他们的crt一样.

但是当我尝试重新配置我的haproxy配置时

bind 192.168.0.1:443 ssl crt /etc/haproxy/cert.pem ca-file /path/to/bundle.crt
Run Code Online (Sandbox Code Playgroud)

我得到错误,我不能在绑定上使用该配置参数.

ps即时使用1.5 dev12版本.使用最新的dev17版本,即使在这篇文章中启动haproxy也遇到了问题

在此输入图像描述

kvz*_*kvz 38

看起来你需要像这样重新编译:

make clean
make \
    TARGET="linux26" \
    USE_STATIC_PCRE=1 \
    USE_OPENSSL=1
make install PREFIX="/opt/haproxy"
Run Code Online (Sandbox Code Playgroud)

之后,bind应该识别您的crt选项.就我而言,我用过:

bind 0.0.0.0:443 ssl crt /envs/production/ssl/haproxy.pem
Run Code Online (Sandbox Code Playgroud)

私有密钥将所有ssl文件连接到订单证书链中的1个大文件中.例如:

-----BEGIN MY CERTIFICATE-----
-----END MY CERTIFICATE-----
-----BEGIN INTERMEDIATE CERTIFICATE-----
-----END INTERMEDIATE CERTIFICATE-----
-----BEGIN INTERMEDIATE CERTIFICATE-----
-----END INTERMEDIATE CERTIFICATE-----
-----BEGIN ROOT CERTIFICATE-----
-----END ROOT CERTIFICATE-----
-----BEGIN RSA PRIVATE KEY-----
-----END RSA PRIVATE KEY-----
Run Code Online (Sandbox Code Playgroud)

重启,并测试openssl s_client -connect 127.0.0.1:443 -servername www.transloadit.com |head.

它应该返回正确的证书信息.

编辑:我刚刚通过HackerNews找到了这个教程:https://serversforhackers.com/c/using-ssl-certificates-with-haproxy .认为添加更详细的内容会很有用.

  • 更新了答案以显示证书的确切顺序. (2认同)