web-dev-qa-db-ja.com

Haproxyで複数のSSL証明書を構成する

私の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の証明書です。

複数のドメイン名の証明書を指定するにはどうすればよいですか?

30
Erik Aigner

すべての証明書をhaproxy1.pemhaproxy2.pemなどのファイルに連結するか、すべてのpemファイルを含むディレクトリを指定できます。

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

haproxy docs のとおり

次に、設定で次のようなものを使用します:

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 [〜#〜] の詳細を読む

SSLサポートはhaproxyの開発段階にあり、明らかにパフォーマンスにかなりの影響があることを覚えておいてください。

このスレッドで説明されている他のソリューションがあります: https://stackoverflow.com/questions/10684484/haproxy-with-multiple-https-sites

お役に立てれば。

61
Rico

証明書のリストを連結したり指定したりする必要はなく、フォルダを指定するだけです。

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

注:フォルダーが空ではなく、有効なPEMファイルが存在することを確認してください。そうでない場合、HAProxyは実行されません。

9
Tim

多分あなたもこれをチェックすることができます:

/etc/ssl/private/crt-list.txt:

/etc/ssl/private/mydomain.pem
/etc/ssl/private/myotherdomain.pem

haproxy.cfg:

frontend https-in:
  bind *:443 ssl crt-list /etc/ssl/private/crt-list.txt

refs: https://github.com/msimerson/Mail-Toaster-6/wiki/How-to-for-Multiple-Domain-SSL-Certificates-with-HaProxy

3
zx1986