feat(ios): device client-cert mTLS — ClientTLS package, transport wiring, install UX (C-iOS)
- ios/Packages/ClientTLS: SecIdentity wrapper, PKCS12 importer (typed errors), keychain store
(AfterFirstUnlockThisDeviceOnly), pure MutualTLSChallengeResponder truth table, cross-platform
X.509 DER summary. 14/14 tests.
- Both transports (SessionCore URLSessionTermTransport, App URLSessionHTTPTransport) + SessionThumbnail
take a lazy @Sendable ()->ClientIdentity? provider: WS resolves per-connect, HTTP per client-cert
challenge, so a freshly-imported cert applies without an app relaunch. AppEnvironment injects
{ store.loadedIdentityOrNil() }.
- ClientCertScreen (.fileImporter([.pkcs12]) + passphrase -> import -> keychain), reachable via a
设备证书 entry in SessionListScreen.hostMenu. PairingViewModel gates tunnel-host probes on cert
presence and re-maps mTLS-reject to a clientCertRejected message.
Verified: ClientTLS 14/14, SessionCore 93/93, xcodegen + xcodebuild BUILD SUCCEEDED.
This commit is contained in:
@@ -31,6 +31,8 @@ packages:
|
||||
path: Packages/HostRegistry
|
||||
APIClient:
|
||||
path: Packages/APIClient
|
||||
ClientTLS:
|
||||
path: Packages/ClientTLS # C-iOS · device client-cert (mTLS) leaf package
|
||||
TestSupport:
|
||||
path: Packages/TestSupport # test doubles — WebTermTests only, never the app target
|
||||
# SwiftTerm is the ONLY third-party dependency, attached to the App target
|
||||
@@ -50,6 +52,7 @@ targets:
|
||||
- package: SessionCore
|
||||
- package: HostRegistry
|
||||
- package: APIClient
|
||||
- package: ClientTLS
|
||||
- package: SwiftTerm
|
||||
settings:
|
||||
base:
|
||||
@@ -119,6 +122,7 @@ targets:
|
||||
- package: SessionCore
|
||||
- package: HostRegistry
|
||||
- package: APIClient
|
||||
- package: ClientTLS
|
||||
- package: TestSupport
|
||||
settings:
|
||||
base:
|
||||
|
||||
Reference in New Issue
Block a user