在Haproxy中配置多个SSL证书


28

我的haproxy实例有2个域(主要是为了避免在主站点上使用XSS)。

规则看起来像这样

bind :443 ssl crt /etc/ssl/haproxy.pem

acl is_static   hdr_end(Host) -i example.com
acl is_api      hdr_end(Host) -i api.example.com
acl is_files    hdr_end(Host) -i example.io

redirect scheme https if !{ ssl_fc } is_static is_api

现在SSL /etc/ssl/haproxy.pem用作默认证书,example.com而不是example.io

如何为多个域名指定证书?

Answers:


60

您可以将所有证书串联到文件say中haproxy1.pemhaproxy2.pem或者可以指定包含所有pem文件的目录。

cat cert1.pem key1.pem > haproxy1.pem 
cat cert2.pem key2.pem > haproxy2.pem

根据haproxy文档

然后在配置上使用类似这样的东西:

defaults
  log 127.0.0.1 local0
  option tcplog

frontend ft_test
  mode http
  bind 0.0.0.0:443 ssl crt /certs/haproxy1.pem crt /certs/haproxy2.pem 
  use_backend bk_cert1 if { ssl_fc_sni my.example.com } # content switching based on SNI
  use_backend bk_cert2 if { ssl_fc_sni my.example.org } # content switching based on SNI

backend bk_cert1
  mode http
  server srv1 <ip-address2>:80

backend bk_cert2
  mode http
  server srv2 <ip-address3>:80

了解有关SNI的更多信息

请记住,在对haproxy的开发阶段中正在支持SSL,并且显然它对性能的影响很大。

此线程中还讨论了其他解决方案:https : //stackoverflow.com/questions/10684484/haproxy-with-multiple-https-sites

希望这可以帮助。


连接时,证书/密钥顺序重要吗?
Erik Aigner 2013年

我认为这并不重要,例如,如果您指定目录,则顺序是任意的。我会确保,如果您包含证书,那么您将包含匹配密钥。
Rico

我按照您建议的方式进行了设置,但是haproxy一直在为每个域使用第一个证书:(
Erik Aigner 2013年

还尝试crt-list了相同的结果
Erik Aigner 2013年

1
哦,是的!做到了!
Erik Aigner 2013年

9

不再需要合并或指定证书列表,只需指定一个文件夹:

frontend public
    bind *:443 ssl crt /etc/haproxy/ssl/

注意:确保文件夹不为空并且存在有效的PEM文件,否则HAProxy将不会运行。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.