Provided by: trafficserver_9.2.3+ds-1+deb12u1build4_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_settings_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_settings_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_settings_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 01, 2024                                       SNI.YAML(5)