gpt4 book ai didi

swift - 如何使用 Alamofire 连接本地主机(证书无效)?

转载 作者:IT王子 更新时间:2023-10-29 05:19:08 28 4
gpt4 key购买 nike

这是我使用 swift 的第一个项目。我正在使用 alamofire 连接 API。我有一个 API 的本地副本,我想将其用于调试 - 这样我就可以设置测试数据 - 因为远程 API 已经有了我不能弄乱的真实数据。

问题是当我尝试访问 https://localhost:8443/MyProject

时出现以下错误

Optional(Error Domain=NSURLErrorDomain Code=-1202 "The certificate for this server is invalid. You might be connecting to a server that is pretending to be “localhost” which could put your confidential information at risk." UserInfo=0x7fbeb8c61ff0 {NSURLErrorFailingURLPeerTrustErrorKey=, NSLocalizedRecoverySuggestion=Would you like to connect to the server anyway?, _kCFStreamErrorCodeKey=-9813, NSUnderlyingError=0x7fbeb8ea5c00 "The operation couldn’t be completed. (kCFErrorDomainCFNetwork error -1202.)", NSLocalizedDescription=The certificate for this server is invalid. You might be connecting to a server that is pretending to be “localhost” which could put your confidential information at risk., NSErrorFailingURLKey=https://localhost:8443/myproject/api/loginUser.pdo, NSErrorFailingURLStringKey=https://localhost:8443/myproject/api/loginUser.pdo, _kCFStreamErrorDomainKey=3})

我发现了很多针对 Objective-c 的解决方案,其中大部分是使用 setAllowsAnyHTTPSCertificate 或使用 Connection 的委托(delegate)。但我无法在 swift 中找到 setAllowsAnyHTTPSCertificate 的等效方法,而且我不确定如何在使用 alamofire 时将委托(delegate)设置为连接。有什么想法我需要做什么吗?

  • 我知道 setAllowsAnyHTTPSCertificate 是私有(private) api,会导致项目被 Apple 拒绝。我只想在调试时使用它,然后在发布项目之前将其删除。

提前谢谢你。

最佳答案

您可以使用 SessionDelegate 覆盖闭包轻松覆盖 Alamofire 中的默认质询行为。以下是如何允许 Alamofire 接受无效证书的示例:

IMPORTANT: Please do not use this in any production code. Security is VERY important and this implementation completely disregards the security mechanisms in Alamofire. Use at your own risk!

let manager = Alamofire.Manager.sharedInstance

manager.delegate.sessionDidReceiveChallenge = { session, challenge in
var disposition: NSURLSessionAuthChallengeDisposition = .PerformDefaultHandling
var credential: NSURLCredential?

if challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust {
disposition = NSURLSessionAuthChallengeDisposition.UseCredential
credential = NSURLCredential(forTrust: challenge.protectionSpace.serverTrust)
} else {
if challenge.previousFailureCount > 0 {
disposition = .CancelAuthenticationChallenge
} else {
credential = manager.session.configuration.URLCredentialStorage?.defaultCredentialForProtectionSpace(challenge.protectionSpace)

if credential != nil {
disposition = .UseCredential
}
}
}

return (disposition, credential)
}

我们(Alamofire TC)将在 Alamofire 1.3.0 中实现 TLS 固定和其他几个与安全相关的功能发布。


更新

Alamofire 1.3.0 版本已经发布,并为自定义服务器信任身份验证挑战添加了更好的支持。更多信息,请查看 Security自述文件部分。

关于swift - 如何使用 Alamofire 连接本地主机(证书无效)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30163274/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com