Provided by: trafficserver_9.2.4+ds-2_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. With the exception of host_sni_policy (see the  description  below),  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).

       For some settings, there is no guarantee that  they  will  be  applied  to  a  connection  under  certain
       conditions.  An established TLS connection may be reused for another server name if it’s used for HTTP/2.
       This  also  means  that  settings  for  server name A may affects requests for server name B as well. See
       https://daniel.haxx.se/blog/2016/08/18/http2-connection-coalescing/ for a more  detailed  description  of
       HTTP/2 connection coalescing.
     ─────────────────────────────────────────────────────────────────────────────────────────────────────────────
       Key                                      Direction   Meaning
     ─────────────────────────────────────────────────────────────────────────────────────────────────────────────
       fqdn                                     Both        Fully Qualified Domain Name.
                                                            This item is used if the SNI
                                                            value matches this.
     ─────────────────────────────────────────────────────────────────────────────────────────────────────────────
       ip_allow                                 Inbound     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                     Outbound    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                 Outbound    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                            Outbound    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 present a
                                                            certificate during the TLS handshake.

                                                            By           default           this            is
                                                            proxy.config.ssl.client.certification_level.
     ─────────────────────────────────────────────────────────────────────────────────────────────────────────────
       verify_client_ca_certs                   Both        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                          Inbound     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.   For
                                                            details about hos this configuration behaves, see
                                                            the                                 corresponding
                                                            proxy.config.http.host_sni_policy  records.config
                                                            documentation.

                                                            Note  that  this particular configuration will be
                                                            inspected at the time the HTTP Host header  field
                                                            is  processed. Further, this policy check will be
                                                            keyed off of the Host header field  value  rather
                                                            than  the SNI in this sni.yaml file. This is done
                                                            because the Host header field is  ultimately  the
                                                            resource  that  will be retrieved from the origin
                                                            and the administrator will intend to  guard  this
                                                            resource  rather  than the SNI, which a malicious
                                                            user may alter to some other server  value  whose
                                                            policies  are  more  lenient  than the host he is
                                                            trying to access.
     ─────────────────────────────────────────────────────────────────────────────────────────────────────────────
       valid_tls_versions_in                    Inbound     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 and BoringSSL. 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                              Outbound    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                               Outbound    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.
     ─────────────────────────────────────────────────────────────────────────────────────────────────────────────
       client_sni_policy                        Outbound    Policy of SNI on outbound connection.

                                                            If    not     specified,     the     value     of
                                                            proxy.config.ssl.client.sni_policy is used.
     ─────────────────────────────────────────────────────────────────────────────────────────────────────────────
       http2                                    Inbound     Indicates whether the H2 protocol should be added
                                                            to or removed from the protocol negotiation list.
                                                            The valid values are on or off.
     ─────────────────────────────────────────────────────────────────────────────────────────────────────────────
       http2_buffer_water_mark                  Inbound     Specifies  the  high  water  mark  for all HTTP/2
                                                            frames on an  outoging  connection.   By  default
                                                            this                                           is
                                                            proxy.config.http2.default_buffer_water_mark.
                                                            NOTE:  Connection  coalescing  may  prevent  this
                                                            taking effect.
     ─────────────────────────────────────────────────────────────────────────────────────────────────────────────
       http2_max_settings_frames_per_minute     Inbound     Specifies how many SETTINGS frames Traffic Server
                                                            receives  per minute at maximum.  By default this
                                                            is
                                                            proxy.config.http2.max_settings_frames_per_minute.
                                                            NOTE: Connection coalescing may prevent this from
                                                            taking effect.
     ─────────────────────────────────────────────────────────────────────────────────────────────────────────────
       http2_max_ping_frames_per_minute         Inbound     Specifies how  many  PING  frames  Traffic  Server
                                                            receives  per  minute at maximum.  By default this
                                                            is  proxy.config.http2.max_ping_frames_per_minute.
                                                            NOTE:  Connection coalescing may prevent this from
                                                            taking effect.
     ─────────────────────────────────────────────────────────────────────────────────────────────────────────────
       http2_max_priority_frames_per_minute     Inbound     Specifies how many PRIORITY frames Traffic  Server
                                                            receives  per  minute at maximum.  By default this
                                                            is
                                                            proxy.config.http2.max_priority_frames_per_minute.
                                                            NOTE: Connection coalescing may prevent this  from
                                                            taking effect.
     ─────────────────────────────────────────────────────────────────────────────────────────────────────────────
       http2_max_rst_stream_frames_per_minute   Inbound     Specifies   how  many  RST_STREAM  frames  Traffic
                                                            Server receives per minute at maximum.  By default
                                                            this                                            is
                                                            proxy.config.http2.max_rst_stream_frames_per_minute.
                                                            NOTE:  Connection coalescing may prevent this from
                                                            taking effect.
     ─────────────────────────────────────────────────────────────────────────────────────────────────────────────
       disable_h2                               Inbound     Deprecated for the more general h2 setting.  Setting
                                                            disable_h2 to true is the same as setting  http2  to
                                                            on.
     ─────────────────────────────────────────────────────────────────────────────────────────────────────────────
       tunnel_route                             Inbound     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                            Inbound     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                      Inbound     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                              Inbound     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.
     ┌────────────────────────────────────────┬───────────┬──────────────────────────────────────────────────────┐
     │                                        │           │                                                      │
--

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

       2024, dev@trafficserver.apache.org

9.2                                               Apr 16, 2024                                       SNI.YAML(5)