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