NWConnection (с tls и минимальной tls версией 1.2) объявляется как версия 1 - PullRequest
0 голосов
/ 24 февраля 2020

Попытка подключить программу swift, работающую на macos, к серверу mysql с использованием tls 1.2 с использованием следующего кода:

    let options = NWProtocolTLS.Options()
    sec_protocol_options_set_min_tls_protocol_version(options.securityProtocolOptions, .TLSv12)
    sec_protocol_options_set_max_tls_protocol_version(options.securityProtocolOptions, .TLSv12)
    let params = NWParameters(tls: options)
    self.connection =  NWConnection(host: self.host, port: self.port, using: params)
    self.connection.stateUpdateHandler = self.didChange(state:)
    self.startReceive()
    self.connection.start(queue: .main)

Приводит к этой ошибке:

2020-02- 23 20: 52: 33.697486-0500 MacNetworkSQL [80612: 4731202] [BoringSSL] boringssl_context_handle_fatal_alert (1872) [C1: 1] [0x101e003a0] предупреждение о записи, уровень: фатальный, описание: версия протокола 2020-02-23 20: 52: 33.697578 -0500 MacNetworkSQL [80612: 4731202] [BoringSSL] boringssl_context_error_print (1862) boringssl ctx 0x600000024000: 4391437704: ошибка: 100000f7: подпрограммы SSL: OPENSSL_internal: WRONG_VERSION_Nssbor.xl. -283.60.3 / ssl / tls_record. cc: 242: 2020-02-23 20: 52: 33.700128-0500 MacNetworkSQL [80612: 4731202] [BoringSSL] boringssl_session_handshake_error_print (111) [C1: 1] [0x101e003a0] 439 Ошибка: 100000f7: процедуры SSL: OPENSSL_internal: WRONG_VERSION_NUMBER: /BuildRoot/Library/Caches/com.apple.xbs/Sources/boringssl/boringssl-283.60.3/ssl/tls_record.cc : 242: 2020-02-23 20: 52: 33.700179-0500 MacNetworkSQL [80612: 4731202] [BoringSSL] nw_protocol_boringssl_handshake_negotiate_proceed (726) [C1: 1] [0x101e003a0] сбой рукопожатия в состоянии 12288 2020-02-23 20:52: 33.701183-0500 MacNetworkSQL [80612: 4730608] ожидает: -9858: Необязательно (сбой рукопожатия)

Глядя на захват клиента при помощи проволочной акулы, я вижу следующее:

enter image description here

Я посмотрел на результаты Wireshark от успешных подключений к mysql, и я вижу версию, сообщенную как 1.2 в обоих точках. Так что я должен что-то делать не так, но что?

РЕДАКТИРОВАТЬ: кажется, что set_min и set_max вообще ничего не делают. Я могу установить их оба на 1,3 или удалить их полностью, и я все еще получаю 1,0 и 1,2 в захвате пакета.

...