





















@@ -83,7 +83,9 @@ final class MacNodeModeCoordinator {
8383 clientId: "openclaw-macos",
8484 clientMode: "node",
8585 clientDisplayName: InstanceIdentity.displayName)
86-let sessionBox = self.buildSessionBox(url: config.url)
86+let sessionBox = self.buildSessionBox(
87+ url: config.url,
88+ connectionMode: AppStateStore.shared.connectionMode)
87898890try await self.session.connect(
8991 url: config.url,
@@ -243,15 +245,35 @@ final class MacNodeModeCoordinator {
243245return true
244246}
245247246-private func buildSessionBox(url: URL) -> WebSocketSessionBox? {
248+nonisolated static func tlsParams(
249+ for url: URL,
250+ connectionMode: AppState.ConnectionMode,
251+ root: [String: Any],
252+ storedFingerprint: String?) -> GatewayTLSParams?
253+{
247254guard url.scheme?.lowercased() == "wss" else { return nil }
248255let stableID = Self.tlsPinStoreKey(for: url)
249-let stored = GatewayTLSStore.loadFingerprint(stableID: stableID)
250-let params = GatewayTLSParams(
256+let configuredFingerprint = connectionMode == .remote
257+? GatewayRemoteConfig.resolveTLSFingerprint(root: root)
258+: nil
259+let expectedFingerprint = configuredFingerprint ?? storedFingerprint
260+return GatewayTLSParams(
251261 required: true,
252- expectedFingerprint: stored,
253- allowTOFU: stored == nil,
262+ expectedFingerprint: expectedFingerprint,
263+ allowTOFU: expectedFingerprint == nil,
254264 storeKey: stableID)
265+}
266+267+private func buildSessionBox(url: URL, connectionMode: AppState.ConnectionMode) -> WebSocketSessionBox? {
268+guard url.scheme?.lowercased() == "wss" else { return nil }
269+let stableID = Self.tlsPinStoreKey(for: url)
270+let stored = GatewayTLSStore.loadFingerprint(stableID: stableID)
271+guard let params = Self.tlsParams(
272+ for: url,
273+ connectionMode: connectionMode,
274+ root: OpenClawConfigFile.loadDict(),
275+ storedFingerprint: stored)
276+else { return nil }
255277let session = GatewayTLSPinningSession(params: params)
256278return WebSocketSessionBox(session: session)
257279}
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。