17

经过大量谷歌搜索,我终于让我的 haproxy ssl 正常工作。但是现在我遇到了问题,因为没有安装根证书和中间证书,所以我的 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

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

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

Comodo Documentation,创建捆绑包很简单,就像合并我制作的 crt 一样。

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

bind 192.168.0.1:443 ssl crt /etc/haproxy/cert.pem ca-file /path/to/bundle.crt

我收到错误,我无法在绑定时使用该配置参数。

ps 我使用 1.5 dev12 版本。使用最新的 dev17 版本,我什至在这篇文章中启动 haproxy 时遇到了问题

在此处输入图像描述

4

2 回答 2

38

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

make clean
make \
    TARGET="linux26" \
    USE_STATIC_PCRE=1 \
    USE_OPENSSL=1
make install PREFIX="/opt/haproxy"

之后,bind应该识别您的 crt 选项。就我而言,我使用了:

bind 0.0.0.0:443 ssl crt /envs/production/ssl/haproxy.pem

我将所有 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-----

重新启动,并使用openssl s_client -connect 127.0.0.1:443 -servername www.transloadit.com |head.

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

编辑:我刚刚通过 HackerNews 找到了本教程:https ://serversforhackers.com/c/using-ssl-certificates-with-haproxy 。认为添加更多细节会很有用。

于 2013-03-06T14:18:56.627 回答
0

抱歉,我不确定哪个版本的 haproxy 是可用的 USE_OPENSSL 选项...我在我的代码库中找不到该选项是 V 1.4.24

Valid USE_* options are the following. Most of them are automatically set by
# the TARGET, others have to be explictly specified :
#   USE_CTTPROXY         : enable CTTPROXY on Linux (needs kernel patch).
#   USE_DLMALLOC         : enable use of dlmalloc (see DLMALLOC_SRC) patch).
#   USE_EPOLL            : enable epoll() on Linux 2.6. Automatic. patch).
#   USE_GETSOCKNAME      : enable getsockname() on Linux 2.2. Automatic. patch).
#   USE_KQUEUE           : enable kqueue() on BSD. Automatic. patch).
#   USE_MY_EPOLL         : redefine epoll_* syscalls. Automatic. patch).
#   USE_NETFILTER        : enable netfilter on Linux. Automatic.patch).
#   USE_PCRE             : enable use of libpcre for regex. Recommended.patch).
#   USE_POLL             : enable poll(). Automatic.patch).
#   USE_REGPARM          : enable regparm optimization. Recommended on x86.patch).
#   USE_SEPOLL           : enable speculative epoll(). Automatic.patch).
#   USE_STATIC_PCRE      : enable static libpcre. Recommended.patch).
#   USE_TPROXY           : enable transparent proxy. Automatic. patch).
#   USE_LINUX_TPROXY     : enable full transparent proxy. Automatic. patch).
#   USE_LINUX_SPLICE     : enable kernel 2.6 splicing. Automatic. patch).
#   USE_LIBCRYPT         : enable crypted passwords using -lcrypt patch).
#   USE_CRYPT_H          : set it if your system requires including crypt.h
于 2013-10-27T16:08:12.397 回答