跳转至

TLS客户端认证

场景说明

  • 服务端使用TLS客户端认证对客户端进行认证。

配置步骤

  • Step 1. 生成根证书
openssl genrsa -out root.key 2048

openssl req -new -x509 -days 365 -key root.key -out root.crt
  • Step 2. 创建客户端证书签名申请
openssl genrsa -out client.key 2048

openssl req -new -out client.csr -key client.key  
  • Step 3. 生成客户端证书
echo "extendedKeyUsage = clientAuth" > openssl.cnf

openssl x509 -req -in client.csr -out client.crt -signkey client.key -CA root.crt -CAkey root.key  -days 365  -extfile openssl.cnf
  • Step 4. 配置4层负载均衡服务
  • 客户端认证针对VIP启用,配置4层负载均衡服务是为了获取VIP。

  • 示例中,使用HAproxy作为4层负载均衡服务,通过PROXY协议将VIP传递给BFE,HAproxy与BFE同机部署。

  • 安装HAproxy,下载www.haproxy.org。Ubuntu系统可通过apt install haproxy安装。

  • 配置HAproxy,配置文件(haproxy.cfg)示例:

  global

  defaults
          mode    tcp
          balance leastconn
          timeout client      3000ms
          timeout server      3000ms
          timeout connect     3000ms

  frontend fr_server_http
          bind 0.0.0.0:7080
          default_backend bk_server_http

  backend bk_server_http
          server srv1 0.0.0.0:8080 maxconn 2048 send-proxy

  frontend fr_server_https
          bind 0.0.0.0:7443
          default_backend bk_server_https

  backend bk_server_https
          server srv1 0.0.0.0:8443 maxconn 2048 send-proxy

启动HAproxy

haproxy -f haproxy.cfg
  • Step 5. 配置BFE客户端证书文件存储路径(conf/bfe.conf),将root.crt复制到tls_conf/client_ca目录 注:根证书文件后缀名必须为.crt
[Server]
...
Layer4LoadBalancer = "PROXY"
...

[HttpsBasic]
...
ClientCABaseDir = tls_conf/client_ca
...

修改 conf/tls_conf_rule.data,将ClientAuth置为true,ClientCAName填写根证书文件名。

  {
      "Version": "12",
      "DefaultNextProtos": [
          "http/1.1"
      ],
      "Config": {
          "example_product": {
              "VipConf": [
                  "127.0.0.1"
              ],
              "SniConf": null,
              "CertName": "example.org",
              "NextProtos": [
                  "h2;rate=0;isw=65535;mcs=200;level=0",
                  "http/1.1"
              ],
              "Grade": "C",
              "ClientAuth": true,
              "ClientCAName": "root"
          }
      }
  }

启动BFE

./bfe -c ../conf
  • Step 6. 验证配置
openssl s_client -connect 127.0.0.1:7443 -cert client.crt -key client.key -state -quiet