前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Haproxy关于SSL的各种场景配置

Haproxy关于SSL的各种场景配置

作者头像
tunsuy
发布2022-10-27 09:54:54
1.3K0
发布2022-10-27 09:54:54
举报

此文章翻译自haproxy官方文档:https://www.haproxy.com/blog/ssl-client-certificate-management-at-application-level/

1、强制client提供证书

在下面的配置中,仅具有客户端证书的用户被允许在应用程序上建立连接。这可以通过关键字"verify required"来实现。

代码语言:javascript
复制
frontend ft_ssltests
 mode http
 bind 192.168.10.1:443 ssl crt ./server.pem ca-file ./ca.crt verify required
 default_backend bk_ssltests
backend ssltests
 mode http
 server s1 192.168.10.101:80 check
 server s2 192.168.10.102:80 check

如果客户端不提供任何证书,则HAProxy将在SSL握手期间关闭连接,测试如下:

带证书
代码语言:javascript
复制
$ openssl s_client -connect 192.168.10.1:443 -cert ./client1.crt -key ./client1.key
不带证书
代码语言:javascript
复制
$ openssl s_client -connect 192.168.10.1:443
[...]ssl handshake failure[...]
带过期证书
代码语言:javascript
复制
$ openssl s_client -connect 192.168.10.1:443 -cert ./client_expired.crt -key ./client_expired.key 
[...]ssl handshake failure[...]

2、client选择性提供证书

在下面的配置中,所有具有证书的用户和没有证书的用户都可以连接。这可以通过关键字"verify optional"来实现。我们可以根据是否存在证书将用户重定向到其他服务器中:

代码语言:javascript
复制
frontend ssltests
 mode http
 bind 192.168.10.1:443 ssl crt ./server.pem ca-file ./ca.crt verify optional
 use_backend sharepoint if { ssl_fc_has_crt }     # check if the certificate has been provided and give access to the application
 default_backend webmail
backend sharepoint
 mode http
 server srv1 192.168.10.101:80 check
 server srv2 192.168.10.102:80 check
backend webmail
 mode http
 server srv3 192.168.10.103:80 check
 server srv4 192.168.10.104:80 check
  • 如果客户端不提供任何证书,则HAProxy会将其路由到Webmail。
  • 如果客户端提供证书,则HAProxy会将其路由到应用程序(在我们的示例中为sharepoint)
  • 如果客户端提供了过期的证书,则HAProxy会拒绝连接

3、忽略证书过期错误

在下面的配置中,所有具有证书的用户和没有证书的用户都可以连接。这可以通过关键字"verify optional"来实现。选项"crt-ignore-err 10"告诉HAProxy忽略实际上与过期证书匹配的证书错误10。我们可以根据是否存在证书将用户重定向到其他服务器,并且可以为证书已过期的用户定制一个专用页面,其中包含有关如何续订或要求新证书的过程

代码语言:javascript
复制
frontend ssltests
 mode http
 bind 192.168.10.1:443 ssl crt ./server.pem ca-file ./ca.crt verify optional crt-ignore-err 10
 use_backend static if { ssl_c_verify 10 }  # if the certificate has expired, route the user to a less sensitive server to print an help page
 use_backend sharepoint if { ssl_fc_has_crt }        # check if the certificate has been provided and give access to the application
 default_backend webmail
backend static
 mode http
 option http-server-close
 redirect location /certexpired.html if { ssl_c_verify 10 } ! { path /certexpired.html }
 server srv5 192.168.10.105:80 check
 server srv6 192.168.10.106:80 check
backend sharepoint
 mode http
 server srv1 192.168.10.101:80 check
 server srv2 192.168.10.102:80 check
backend webmail
 mode http
 server srv3 192.168.10.103:80 check
 server srv4 192.168.10.104:80 check
  • 如果客户端不提供任何证书,则HAProxy会将其路由到Webmail。
  • 如果客户端提供证书,则HAProxy会将其路由到应用程序(在我们的示例中为sharepoint)
  • 如果客户端提供了过期证书,则HAProxy会将其路由到静态服务器,并强制用户显示该页面,该页面提供有关过期证书及其更新方式的说明。

4、忽略所有的证书错误

在下面的配置中,所有具有证书的用户和没有证书的用户都可以连接。这可以通过关键字"verify optional"来实现。选项"crt-ignore-err all"告诉HAProxy忽略任何客户端证书错误。选项"crl-file ./ca_crl.pem"告诉HAProxy检查在参数提供的证书吊销列表中是否尚未吊销客户端。我们可以根据是否存在证书将用户重定向到其他服务器,并且可以为证书已过期的用户定制一个专用页面,其中包含有关如何续订或要求新证书的过程。我们还可以向其证书已被撤消的用户显示专用页面。

代码语言:javascript
复制
frontend ssltests
 mode http
 bind 192.168.10.1:443 ssl crt ./server.pem ca-file ./ca.crt verify optional crt-ignore-err all crl-file ./ca_crl.pem
 use_backend static unless { ssl_c_verify 0 }  # if there is an error with the certificate, then route the user to a less sensitive farm
 use_backend sharepoint if { ssl_fc_has_crt }           # check if the certificate has been provided and give access to the application
 default_backend webmail
backend static
 mode http
 option http-server-close
 redirect location /certexpired.html if { ssl_c_verify 10 } ! { path /certexpired.html } # SSL error 10 means "certificate expired"
 redirect location /certrevoked.html if { ssl_c_verify 23 } ! { path /certrevoked.html } # SSL error 23 means "Certificate revoked"
redirect location /othererrors.html unless { ssl_c_verify 0 } ! { path /othererrors.html }
 server srv5 192.168.10.105:80 check
 server srv6 192.168.10.106:80 check
backend sharepoint
 mode http
 server srv1 192.168.10.101:80 check
 server srv2 192.168.10.102:80 check
backend webmail
 mode http
 server srv3 192.168.10.103:80 check
 server srv4 192.168.10.104:80 check
  • 如果客户端不提供任何证书,则HAProxy会将其路由到Webmail。
  • 如果客户端提供证书,则HAProxy会将其路由到应用程序(在我们的示例中为sharepoint)
  • 如果客户端提供了过期证书,则HAProxy会将其路由到静态服务器,并强制用户显示该页面,该页面提供有关过期证书及其更新方式的说明。
  • 如果客户端提供了吊销的证书,则HAProxy会将其路由到静态服务器,并强制用户显示提供有关吊销证书的说明的页面(由管理员编写此页面)。
  • 对于与客户端证书有关的任何其他错误,HAProxy会将用户路由到静态服务器,并强制用户显示一个页面,以说明存在错误以及如何与支持部门联系(由管理员决定)编写此页面。

5、根据ssl错误重定向

在下面的配置中,所有具有证书的用户和没有证书的用户都可以连接。这可以通过关键字"verify optional"来实现。选项"crt-ignore-err all"告诉HAProxy忽略所有客户端证书。选项"crl-file ./ca_crl.pem"告诉HAProxy检查在参数提供的证书吊销列表中是否尚未吊销客户端。文件ca.pem包含2个CA:ca和ca2。我们可以根据是否存在证书将用户重定向到其他服务器场,并且可以为证书已过期的用户建议一个专用页面,其中包含有关如何续订或要求新证书的过程。我们还可以向其证书已被撤消的用户显示专用页面。

代码语言:javascript
复制
frontend ssltests
 mode http
 bind 192.168.10.1:443 ssl crt ./server.pem ca-file ./ca.pem verify optional crt-ignore-err all crl-file ./ca_crl.pem
 use_backend static unless { ssl_c_verify 0 }  # if there is an error with the certificate, then route the user to a less sensitive farm
 use_backend sharepoint if { ssl_fc_has_crt }           # check if the certificate has been provided and give access to the application
 default_backend webmail
backend static
 mode http
 option http-server-close
 acl url_expired path /certexpired.html
 acl url_revoked path /certrevoked.html
 acl url_othererrors path /othererrors.html
 acl cert_expired ssl_c_verify 10
 acl cert_revoked ssl_c_verify 23
 reqadd X-Ssl-Error: 10 if cert_expired
 reqadd X-Ssl-Error: 23 if cert_revoked
 reqadd X-Ssl-Error: other if ! cert_expired ! cert_revoked
 redirect location /certexpired.html if cert_expired ! url_expired
 redirect location /certrevoked.html if cert_revoked ! url_revoked
 redirect location /othererrors.html if ! cert_expired ! cert_revoked ! url_othererrors
 server srv5 192.168.10.105:80 check
 server srv6 192.168.10.106:80 check
backend sharepoint
 mode http
 server srv1 192.168.10.101:80 check
 server srv2 192.168.10.102:80 check
backend webmail
 mode http
 server srv3 192.168.10.103:80 check
 server srv4 192.168.10.104:80 check
  • 如果客户端不提供任何证书,则HAProxy会将其路由到Webmail。
  • 如果客户端提供证书,则HAProxy会将其路由到应用程序(在我们的示例中为共享点)
  • 如果客户端提供了过期证书,则HAProxy会将其路由到静态服务器(非敏感服务器),并强制用户显示该页面,该页面提供有关过期证书及其更新方式的说明(这取决于管理员来编写)这一页)。
  • 如果客户端提供了吊销的证书,则HAProxy会将其路由到静态服务器(不敏感),并强制用户显示提供有关吊销证书的说明的页面(由管理员编写此页面)。
  • 对于与客户端证书有关的任何其他错误,HAProxy会将用户路由到静态服务器(不敏感),并强制用户显示一个页面,以说明存在错误以及如何与支持部门联系(由管理员决定)编写此页面)。
本文参与?腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-12-13,如有侵权请联系?cloudcommunity@tencent.com 删除

本文分享自 有文化的技术人 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、强制client提供证书
    • 带证书
      • 不带证书
        • 带过期证书
        • 2、client选择性提供证书
        • 3、忽略证书过期错误
        • 4、忽略所有的证书错误
        • 5、根据ssl错误重定向
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
        http://www.vxiaotou.com