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.

Accepted Reply

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)

Replies

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"

Add a Comment

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)