Skip to content

Commit 93d1a4f

Browse files
committed
Support TLSConfiguration.trustRoots(.file)...
Support TLSConfiguration.trustRoots(.file) when converting to a `NWProtocolTLS.Options`
1 parent 9b574aa commit 93d1a4f

File tree

2 files changed

+20
-2
lines changed

2 files changed

+20
-2
lines changed

Sources/AsyncHTTPClient/NIOTransportServices/TLSConfiguration.swift

+5-2
Original file line numberDiff line numberDiff line change
@@ -116,8 +116,11 @@
116116
secTrustRoots = try certificates.compactMap { certificate in
117117
try SecCertificateCreateWithData(nil, Data(certificate.toDERBytes()) as CFData)
118118
}
119-
case .some(.file):
120-
preconditionFailure("TLSConfiguration.trustRoots.file is not supported")
119+
case .some(.file(let file)):
120+
let certificates = try NIOSSLCertificate.fromPEMFile(file)
121+
secTrustRoots = try certificates.compactMap { certificate in
122+
try SecCertificateCreateWithData(nil, Data(certificate.toDERBytes()) as CFData)
123+
}
121124

122125
case .some(.default), .none:
123126
break

Tests/AsyncHTTPClientTests/HTTPClientNIOTSTests.swift

+15
Original file line numberDiff line numberDiff line change
@@ -108,4 +108,19 @@ class HTTPClientNIOTSTests: XCTestCase {
108108
}
109109
#endif
110110
}
111+
112+
func testTrustRootCertificateLoadFail() {
113+
guard isTestingNIOTS() else { return }
114+
#if canImport(Network)
115+
let tlsConfig = TLSConfiguration.forClient(trustRoots: .file("not/a/certificate"))
116+
XCTAssertThrowsError(try tlsConfig.getNWProtocolTLSOptions()) { error in
117+
switch error {
118+
case let error as NIOSSL.NIOSSLError where error == .failedToLoadCertificate:
119+
break
120+
default:
121+
XCTFail("\(error)")
122+
}
123+
}
124+
#endif
125+
}
111126
}

0 commit comments

Comments
 (0)