change to tls
This commit is contained in:
parent
9817e5a5ca
commit
5b10f7de61
@ -15,8 +15,6 @@ enum TunnelError: Error {
|
|||||||
class PacketTunnelProvider: NEPacketTunnelProvider {
|
class PacketTunnelProvider: NEPacketTunnelProvider {
|
||||||
private var runtimeEnv: SDLRuntimeEnvironment?
|
private var runtimeEnv: SDLRuntimeEnvironment?
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
override func startTunnel(options: [String: NSObject]?, completionHandler: @escaping (Error?) -> Void) {
|
override func startTunnel(options: [String: NSObject]?, completionHandler: @escaping (Error?) -> Void) {
|
||||||
// 如果当前在运行状态,不允许重复请求
|
// 如果当前在运行状态,不允许重复请求
|
||||||
guard self.runtimeEnv == nil else {
|
guard self.runtimeEnv == nil else {
|
||||||
@ -29,8 +27,6 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
self.runtimeEnv = SDLRuntimeEnvironment(options: options)
|
self.runtimeEnv = SDLRuntimeEnvironment(options: options)
|
||||||
Task {
|
Task {
|
||||||
do {
|
do {
|
||||||
@ -78,11 +74,12 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override func wake() {
|
override func wake() {
|
||||||
|
SDLLogger.log("[PacketTunnelProvider] wake up!!!!!!!")
|
||||||
// 启动monitor
|
// 启动monitor
|
||||||
let monitor = SDLPathMonitor()
|
let monitor = SDLPathMonitor()
|
||||||
// 启动监视器,允许重入
|
// 启动监视器,允许重入
|
||||||
monitor.start()
|
monitor.start()
|
||||||
SDLLogger.log("[SDLContext] monitor started")
|
SDLLogger.log("[PacketTunnelProvider] monitor started")
|
||||||
|
|
||||||
// Add code here to wake up.
|
// Add code here to wake up.
|
||||||
Task {
|
Task {
|
||||||
@ -93,7 +90,7 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
|
|||||||
|
|
||||||
// 等待网络可达
|
// 等待网络可达
|
||||||
_ = await monitor.statusStream().first {$0 == .satisfied}
|
_ = await monitor.statusStream().first {$0 == .satisfied}
|
||||||
SDLLogger.log("[SDLContext] network is satisfied")
|
SDLLogger.log("[PacketTunnelProvider] network is satisfied")
|
||||||
// 重新启动
|
// 重新启动
|
||||||
try await self.runtimeEnv?.start(provider: self)
|
try await self.runtimeEnv?.start(provider: self)
|
||||||
}
|
}
|
||||||
@ -161,6 +158,7 @@ private class SDLRuntimeEnvironment {
|
|||||||
|
|
||||||
func stop() async {
|
func stop() async {
|
||||||
await self.contextActor?.stop()
|
await self.contextActor?.stop()
|
||||||
|
self.contextActor = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -192,7 +192,7 @@ actor SDLContextActor {
|
|||||||
SDLLogger.log("[SDLContext] try start quicClient", for: .debug)
|
SDLLogger.log("[SDLContext] try start quicClient", for: .debug)
|
||||||
|
|
||||||
// 启动monitor
|
// 启动monitor
|
||||||
let quicClient = SDLQUICClient(host: self.config.serverHost, port: 443)
|
let quicClient = SDLQUICClient(host: self.config.serverHost, port: 1443)
|
||||||
self.quicClient = quicClient
|
self.quicClient = quicClient
|
||||||
quicClient.start()
|
quicClient.start()
|
||||||
|
|
||||||
@ -268,13 +268,14 @@ actor SDLContextActor {
|
|||||||
do {
|
do {
|
||||||
try await Task.sleep(for: .seconds(5))
|
try await Task.sleep(for: .seconds(5))
|
||||||
try Task.checkCancellation()
|
try Task.checkCancellation()
|
||||||
|
|
||||||
// 关闭掉当前Tunnel
|
// 关闭掉当前Tunnel
|
||||||
self.publishTunnelEvent(message: "校验失败")
|
self.publishTunnelEvent(message: "校验失败")
|
||||||
// 报告错误并退出
|
// 报告错误并退出
|
||||||
let error = NSError(domain: "com.jihe.punchnet.tun", code: -3)
|
let error = NSError(domain: "com.jihe.punchnet.tun", code: -3)
|
||||||
self.provider.cancelTunnelWithError(error)
|
self.provider.cancelTunnelWithError(error)
|
||||||
} catch {
|
} catch {
|
||||||
|
SDLLogger.log("[SDLContext] registerTask: cancel")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -46,7 +46,13 @@ final class SDLQUICClient {
|
|||||||
private let queue = DispatchQueue(label: "com.sdl.QUICClient.queue") // 专用队列保证线程安全
|
private let queue = DispatchQueue(label: "com.sdl.QUICClient.queue") // 专用队列保证线程安全
|
||||||
|
|
||||||
init(host: String, port: UInt16, maxBufferSize: Int = 2 * 1024 * 1024) {
|
init(host: String, port: UInt16, maxBufferSize: Int = 2 * 1024 * 1024) {
|
||||||
let options = NWProtocolQUIC.Options(alpn: ["punchnet/1.0"])
|
let options = NWProtocolTLS.Options()
|
||||||
|
|
||||||
|
sec_protocol_options_add_tls_application_protocol(
|
||||||
|
options.securityProtocolOptions,
|
||||||
|
"punchnet/1.0"
|
||||||
|
)
|
||||||
|
|
||||||
self.frameParser = SDLQUICFrameParser(maxBufferSize: maxBufferSize)
|
self.frameParser = SDLQUICFrameParser(maxBufferSize: maxBufferSize)
|
||||||
|
|
||||||
(self.eventStream, self.eventCont) = AsyncStream.makeStream(of: SDLQUICEvent.self)
|
(self.eventStream, self.eventCont) = AsyncStream.makeStream(of: SDLQUICEvent.self)
|
||||||
@ -57,12 +63,16 @@ final class SDLQUICClient {
|
|||||||
options.securityProtocolOptions,
|
options.securityProtocolOptions,
|
||||||
{ metadata, trust, complete in
|
{ metadata, trust, complete in
|
||||||
// 执行公钥校验
|
// 执行公钥校验
|
||||||
complete(QUICVerifier.verify(trust: trust, host: host))
|
complete(TLSVerifier.verify(trust: trust, host: host))
|
||||||
},
|
},
|
||||||
self.queue
|
self.queue
|
||||||
)
|
)
|
||||||
|
SDLLogger.log("[SDLQUICClient] start with tls protocol", for: .debug)
|
||||||
let params = NWParameters(quic: options)
|
|
||||||
|
let params = NWParameters(tls: options)
|
||||||
|
// 关键:让 Network.framework 忽略系统代理
|
||||||
|
params.preferNoProxies = true
|
||||||
|
|
||||||
self.connection = NWConnection(host: .init(host), port: .init(rawValue: port)!, using: params)
|
self.connection = NWConnection(host: .init(host), port: .init(rawValue: port)!, using: params)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -266,10 +276,10 @@ extension SDLQUICClient {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// --MARK: quic验证
|
// --MARK: tls验证
|
||||||
extension SDLQUICClient {
|
extension SDLQUICClient {
|
||||||
|
|
||||||
enum QUICVerifier {
|
enum TLSVerifier {
|
||||||
// 你的 Base64 公钥指纹
|
// 你的 Base64 公钥指纹
|
||||||
static let pinnedPublicKeyHashes = [
|
static let pinnedPublicKeyHashes = [
|
||||||
"Q41r6hbMWEVyxo6heNAH4Wx/TH5NNOWlNif9bewcJ3E="
|
"Q41r6hbMWEVyxo6heNAH4Wx/TH5NNOWlNif9bewcJ3E="
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user