Provided by: trafficserver_9.1.3+ds-1_amd64 bug

NAME

       sni.yaml - Traffic Server sni rules configuration file

DESCRIPTION

       This  file  is  used  to configure aspects of TLS connection handling for both inbound and
       outbound connections. The configuration is driven  by  the  SNI  values  provided  by  the
       inbound  connection. The file consists of a set of configuration items, each identified by
       an SNI value (fqdn).  When an inbound TLS connection is made, the SNI value from  the  TLS
       negotiation  is  matched against the items specified by this file and if there is a match,
       the values specified in that item override the defaults. This is done during  the  inbound
       connection processing; some outbound properties can be overridden again later, such as via
       remap.config or plugins.

       By  default  this  is  named  sni.yaml.  The  filename   can   be   changed   by   setting
       proxy.config.ssl.servername.filename.  This  file is loaded on start up and by traffic_ctl
       config reload if the file has been modified since process start.

       The configuration file is YAML-based. After parsing the configuration, a  list  of  tables
       will  be the result.  Each table is a set of key / value pairs that create a configuration
       item. This configuration file accepts wildcard entries. To apply an SNI based  setting  on
       all  the  server  names with a common upper level domain name, the user needs to enter the
       fqdn in the configuration with a *. followed by the common domain name.  (*.yahoo.com  for
       example).

             ┌─────────────────────────┬───────────────────────────────────────────────────┐
             │Key                      │ Meaning                                           │
             ├─────────────────────────┼───────────────────────────────────────────────────┤
             │fqdn                     │ Fully   Qualified  Domain  Name.                  │
             │                         │ This item is  used  if  the  SNI                  │
             │                         │ value matches this.                               │
             ├─────────────────────────┼───────────────────────────────────────────────────┤
             │ip_allow                 │ Specify  a  list  of  client  IP                  │
             │                         │ address, subnets, or ranges what                  │
             │                         │ are   allowed  to  complete  the                  │
             │                         │ connection. This list  is  comma                  │
             │                         │ separated.    IPv4    and   IPv6                  │
             │                         │ addresses  can   be   specified.                  │
             │                         │ Here   is   an   example   list:                  │
             │                         │ 192.168.1.0/24,192.168.10.1-4.                    │
             │                         │ This   would  allow  connections                  │
             │                         │ from clients in  the  19.168.1.0                  │
             │                         │ network  or  in  the  range from                  │
             │                         │ 192.168.10.1 to 192.168.1.4.                      │
             ├─────────────────────────┼───────────────────────────────────────────────────┤
             │verify_server_policy     │ One  of  the  values   DISABLED,                  │
             │                         │ PERMISSIVE, or ENFORCED.                          │
             │                         │                                                   │
             │                         │ By      default      this     is                  │
             │                         │ proxy.config.ssl.client.verify.server.policy.     │
             │                         │ This controls how Traffic Server                  │
             │                         │ evaluated       the       origin                  │
             │                         │ certificate.                                      │
             ├─────────────────────────┼───────────────────────────────────────────────────┤
             │verify_server_properties │ One  of the values NONE, SIGNATURE, NAME, and     │
             │                         │ ALL                                               │
             │                         │                                                   │
             │                         │ By          default          this          is     │
             │                         │ proxy.config.ssl.client.verify.server.properties. │
             │                         │ This controls what Traffic Server checks when     │
             │                         │ evaluating the origin certificate.                │
             └─────────────────────────┴───────────────────────────────────────────────────┘

             │verify_client            │ One  of the values NONE, MODERATE, or STRICT.  If │
             │                         │ NONE is specified,  Traffic  Server  requests  no │
             │                         │ certificate.   If  MODERATE  is specified Traffic │
             │                         │ Server  will  verify  a   certificate   that   is │
             │                         │ presented by the client, but it will not fail the │
             │                         │ TLS handshake if no certificate is presented.  If │
             │                         │ STRICT  is  specified  the  client  must resent a │
             │                         │ certificate during the TLS handshake.             │
             │                         │                                                   │
             │                         │ By           default           this            is │
             │                         │ proxy.config.ssl.client.certification_level.      │
             ├─────────────────────────┼───────────────────────────────────────────────────┤
             │verify_client_ca_certs   │ Specifies   an   alternate   set  of  certificate │
             │                         │ authority certs to use to verify the client cert. │
             │                         │ The value must be either a file path, or a nested │
             │                         │ set of key / value pairs.  If the value is a file │
             │                         │ path,  it  must  specify a file containing the CA │
             │                         │ certs.  Otherwise, there  should  be  up  to  two │
             │                         │ nested  pairs.   The  possible  keys are file and │
             │                         │ dir.  The value for file must be a file path  for │
             │                         │ a  file  containing  CA certs.  The value for dir │
             │                         │ must be a file path for an  OpenSSL  X509  hashed │
             │                         │ directory  containing  CA certs.  If a given file │
             │                         │ path does not being with / , it must be  relative │
             │                         │ to  the  Traffic  Server configuration directory. │
             │                         │ verify_client_ca_certs  can  only  be  used  with │
             │                         │ capbilities provided by OpenSSL 1.0.2 or later.   │
             ├─────────────────────────┼───────────────────────────────────────────────────┤
             │host_sni_policy          │ One   of  the  values  DISABLED,  PERMISSIVE,  or │
             │                         │ ENFORCED.                                         │
             │                         │                                                   │
             │                         │ If    not     specified,     the     value     of │
             │                         │ proxy.config.http.host_sni_policy  is used.  This │
             │                         │ controls how policy impacting mismatches  between │
             │                         │ host header and SNI values are dealt with.        │
             ├─────────────────────────┼───────────────────────────────────────────────────┤
             │valid_tls_versions_in    │ This  specifies  the  list  of TLS protocols that │
             │                         │ will be offered to user  agents  during  the  TLS │
             │                         │ negotiation.   This  replaces the global settings │
             │                         │ in                        proxy.config.ssl.TLSv1, │
             │                         │ proxy.config.ssl.TLSv1_1,                         │
             │                         │ proxy.config.ssl.TLSv1_2,                     and │
             │                         │ proxy.config.ssl.TLSv1_3.  The  potential  values │
             │                         │ are TLSv1, TLSv1_1, TLSv1_2,  and  TLSv1_3.   You │
             │                         │ must  list  all  protocols  that  Traffic  Server │
             │                         │ should offer to the client when using  this  key. │
             │                         │ This  key  is  only  valid  for openssl 1.1.0 and │
             │                         │ later. Older versions of openssl do not provide a │
             │                         │ hook  early  enough to update the SSL object.  It │
             │                         │ is  a  syntax  error  for  Traffic  Server  built │
             │                         │ against earlier versions.                         │
             ├─────────────────────────┼───────────────────────────────────────────────────┤
             │client_cert              │ The file containing the client certificate to use │
             │                         │ for the outbound connection.                      │
             │                         │                                                   │
             │                         │ If this is relative, it is relative to  the  path │
             │                         │ in  proxy.config.ssl.client.cert.path. If not set │
             │                         │ proxy.config.ssl.client.cert.filename is used.    │
             └─────────────────────────┴───────────────────────────────────────────────────┘

             │client_key               │ The file containing the client private  key  that │
             │                         │ corresponds  to  the certificate for the outbound │
             │                         │ connection.                                       │
             │                         │                                                   │
             │                         │ If this is relative, it is relative to  the  path │
             │                         │ in  proxy.config.ssl.client.private_key.path.  If │
             │                         │ not set, Traffic Server tries to  use  a  private │
             │                         │ key       in       client_cert.        Otherwise, │
             │                         │ proxy.config.ssl.client.private_key.filename   is │
             │                         │ used.                                             │
             ├─────────────────────────┼───────────────────────────────────────────────────┤
             │http2                    │ Indicates whether the H2 protocol should be added │
             │                         │ to or removed from the protocol negotiation list. │
             │                         │ The valid values are on or off.                   │
             ├─────────────────────────┼───────────────────────────────────────────────────┤
             │disable_h2               │ Deprecated  for  the  more  general  h2  setting. │
             │                         │ Setting disable_h2 to true is the same as setting │
             │                         │ http2 to on.                                      │
             ├─────────────────────────┼───────────────────────────────────────────────────┤
             │tunnel_route             │ Destination  as  an FQDN and port, separated by a │
             │                         │ colon :.  Match group number can be specified  by │
             │                         │ $N  where  N should refer to a specified group in │
             │                         │ the FQDN, tunnel_route: $1.domain.                │
             │                         │                                                   │
             │                         │ This will forward all traffic  to  the  specified │
             │                         │ destination   without   first   terminating   the │
             │                         │ incoming TLS connection.                          │
             ├─────────────────────────┼───────────────────────────────────────────────────┤
             │forward_route            │ Destination as an FQDN and port, separated  by  a │
             │                         │ colon :.                                          │
             │                         │                                                   │
             │                         │ This   is   similar   to   tunnel_route,  but  it │
             │                         │ terminates the TLS connection  and  forwards  the │
             │                         │ decrypted   traffic.   Traffic  Server  will  not │
             │                         │ interpret the decrypted data, so the contents  do │
             │                         │ not need to be HTTP.                              │
             ├─────────────────────────┼───────────────────────────────────────────────────┤
             │partial_blind_route      │ Destination  as  an FQDN and port, separated by a │
             │                         │ colon :.                                          │
             │                         │                                                   │
             │                         │ This is similar to forward_route in that  Traffic │
             │                         │ Server  terminates  the  incoming TLS connection. │
             │                         │ In addition partial_blind_route creates a new TLS │
             │                         │ connection  to the specified origin.  It does not │
             │                         │ interpret the decrypted data before passing it to │
             │                         │ the origin TLS connection, so the contents do not │
             │                         │ need to be HTTP.                                  │
             ├─────────────────────────┼───────────────────────────────────────────────────┤
             │tunnel_alpn              │ List of  ALPN  Protocol  Ids  for  Partial  Blind │
             │                         │ Tunnel.                                           │
             │                         │                                                   │
             │                         │ ATS  negotiates  application  protocol  with  the │
             │                         │ client on behalf of the origin server.  This only │
             │                         │ works with partial_blind_route.                   │
             └─────────────────────────┴───────────────────────────────────────────────────┘

       Client      verification,      via      verify_client,      corresponds     to     setting
       proxy.config.ssl.client.certification_level for this connection as noted below.

       NONE -- 0
              Do not request a client certificate, ignore it if one is provided.

       MODERATE - 1
              Request a client certificate and do verification if one is provided. The connection
              is denied if the verification of the client provided certificate fails.

       STRICT - 2
              Request  a  client certificate and require one to be provided and verified.  If the
              verification fails the failure is logged to diags.log and the connection is denied.

       Upstream (server) verification, via verify_server_policy and verify_server_properties,  is
       similar  to  client  verification  except there is always an upstream certificate. This is
       equivalent      to      setting      proxy.config.ssl.client.verify.server.policy      and
       proxy.config.ssl.client.verify.server.properties for this connection.

       verify_server_policy  specifies  how  Traffic  Server  will enforce the server certificate
       verification.

       DISABLED
              Do not verify the upstream server certificate.

       PERMISSIVE
              Do verification of the upstream certificate but do not enforce. If the verification
              fails the failure is logged in diags.log but the connection is allowed.

       ENFORCED
              Do  verification of the upstream certificate. If verification fails, the failure is
              logged in diags.log and the connection is denied.

       In addition  verify_server_properties  specifies  what  Traffic  Server  will  check  when
       performing the verification.

       NONE   Do  not  check  anything in the standard Traffic Server verification routine.  Rely
              entirely on the TS_SSL_VERIFY_SERVER_HOOK for evaluating the origin's certificate.

       SIGNATURE
              Check the signature of the origin certificate.

       NAME   Verify that the SNI is in the origin certificate.

       ALL    Verify both the signature and the SNI in the origin certificate.

       If tunnel_route is specified, none of the certificate verification will  be  done  because
       the  TLS  negotiation  will  be  tunneled  to  the  upstream  target,  making those values
       irrelevant for that configuration item. This option is explained in  more  detail  in  SNI
       Routing.

EXAMPLES

       Disable HTTP/2 for no-http2.example.com.

          sni:
          - fqdn: no-http2.example.com
            http2: off

       Require  client  certificate  verification  for  foo.com  and  any server name ending with
       .yahoo.com. Therefore, client request for a  server  name  ending  with  yahoo.com  (e.g.,
       def.yahoo.com, abc.yahoo.com etc.) will cause Traffic Server require and verify the client
       certificate.

       For foo.com, if the user agent sets the host header to foo.com but the SNI to  some  other
       value,  Traffic  Server  will warn about the mismatch but continue to process the request.
       Mismatches for the other domains will cause Traffic Server to warn and return 403.

       Traffic Server will allow a client certificate to be provided for example.com  and  if  it
       is, Traffic Server will require the certificate to be valid.

          sni:
          - fqdn: example.com
            verify_client: MODERATE
          - fqdn: 'foo.com'
            verify_client: STRICT
            host_sni_policy: PERMISSIVE
          - fqdn: '*.yahoo.com'
            verify_client: STRICT

       Disable  outbound  server  certificate  verification for trusted.example.com and require a
       valid client certificate.

          sni:
          - fqdn: trusted.example.com
            verify_server_policy: DISABLED
            verify_client: STRICT

       Use FQDN captured group to match in tunnel_route.

          sni:
          - fqdn: '*.foo.com'
            tunnel_route: '$1.myfoo'
          - fqdn: '*.bar.*.com'
            tunnel_route: '$2.some.$1.yahoo'

       FQDN some.foo.com will match and the captured string will be replaced in the  tunnel_route
       which  will  end  up  being  some.myfoo.   Second  part  is  using multiple groups, having
       bob.bar.example.com as FQDN, tunnel_route will end up being bar.some.bob.yahoo.

SEE ALSO

       SNI Routing

COPYRIGHT

       2022, dev@trafficserver.apache.org