NWConnection TLSParameters does not provide API to set SNI

Hi,

We are running into problem as there is no API to set SNI on TLS Parameters of NWConnection. In CFStream API this can be done easily by setting "kCFStreamSSLPeerName". When this is set, in Client Hello this parameter is used as SNI.

Is there any way/alternative to set SNI on NWConnection?

Thanks and regards.

Answered by Erichuyue in 718297022

thx, i solved this problem. i use setAdditionalHeaders and sec_protocol_options_set_tls_server_name. code like this:

      let options = NWProtocolTCP.Options()
        
      options.connectionTimeout = 15
              
      let tlsOptions = NWProtocolTLS.Options()
      

      sec_protocol_options_set_tls_server_name(tlsOptions.securityProtocolOptions,"your domain")
      
      
      let protocolOptions = NWProtocolWebSocket.Options()
      
      protocolOptions.setAdditionalHeaders([("host", "your domain")])

      
      let parameters = NWParameters(tls: tlsOptions, tcp: options)

      parameters.defaultProtocolStack.applicationProtocols.insert(protocolOptions, at: 0)
      
       connection = NWConnection(to: NWEndpoint.url(url), using: parameters)

Is there any way/alternative to set SNI on NWConnection?

The droid you’re looking for is sec_protocol_options_set_tls_server_name.

Share and Enjoy

Quinn “The Eskimo!” @ Developer Technical Support @ Apple
let myEmail = "eskimo" + "1" + "@" + "apple.com"

Accepted Answer

thx, i solved this problem. i use setAdditionalHeaders and sec_protocol_options_set_tls_server_name. code like this:

      let options = NWProtocolTCP.Options()
        
      options.connectionTimeout = 15
              
      let tlsOptions = NWProtocolTLS.Options()
      

      sec_protocol_options_set_tls_server_name(tlsOptions.securityProtocolOptions,"your domain")
      
      
      let protocolOptions = NWProtocolWebSocket.Options()
      
      protocolOptions.setAdditionalHeaders([("host", "your domain")])

      
      let parameters = NWParameters(tls: tlsOptions, tcp: options)

      parameters.defaultProtocolStack.applicationProtocols.insert(protocolOptions, at: 0)
      
       connection = NWConnection(to: NWEndpoint.url(url), using: parameters)
NWConnection TLSParameters does not provide API to set SNI
 
 
Q