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

伊斯梅尔

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

问题是当我尝试访问时出现以下错误 https://localhost:8443/MyProject

可选(错误域= NSURLErrorDomain代码= -1202“此服务器的证书无效。您可能正在连接到冒充“本地主机”的服务器,这可能会使您的机密信息受到威胁。” UserInfo = 0x7fbeb8c61ff0 {NSURLErrorFailingURLPeerTrustErrorKey = ,NSLocalizedRecoverySuggestion =是否仍要连接到服务器吗?,_kCFStreamErrorCodeKey = -9813,NSUnderlyingError = 0x7fbeb8ea5c00“操作无法完成。(kCFErrorDomainCFNetwork错误-1202。)”,NSLocalizedDescription =此服务器的证书无效。您可能正在连接到假装为“本地主机”的服务器,这可能会使您的机密信息受到威胁。,NSErrorFailingURLKey = https:// localhost:8443 / myproject / api / loginUser.pdo,NSErrorFailingURLStringKey =https:// localhost:8443 / myproject / api / loginUser.pdo,_kCFStreamErrorDomainKey = 3})

我已经找到了许多解决方案,其中大多数是针对Objective-c的,因为使用setAllowsAnyHTTPSCertificate或使用委托进行连接。但是我找不到快速的等效方法setAllowsAnyHTTPSCertificate,而且我不确定在使用alamofire时如何将委托设置为连接。有什么想法我需要做什么?

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

先感谢您。

cnoon

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

重要说明:请不要在任何生产代码中使用此代码。安全性非常重要,该实现完全忽略了Alamofire中的安全性机制。使用风险自负!

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版本已经发布,并增加了对自定义服务器信任身份验证挑战的更好支持。有关更多信息,请查看自述文件的“安全性”部分。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将iOS应用连接到使用Alamofire在本地主机上运行的api时,证书无效

如何为具有 tld 的本地主机创建别名?

在具有端口的本地主机上使用reCAPTCHA

如何使用JDBC连接到本地主机?

如何使用JavaScript检查连接是否为本地主机?

如何使用postgres_fdw连接到本地主机?

Auth0-如何在具有Auth0的本地主机上使用mongoDB

MySQL本地主机连接有效,但127.0.0.1无效

该证书具有无效的颁发者钥匙串

Hyperledger Fabric CA:x509:证书对rca-ord有效,对本地主机无效

Mongodb 没有连接到本地主机?

没有防火墙弹出的“本地主机”连接

在本地主机中测试TLS:证书对于给定的域无效

在本地主机上获取SSL证书

本地主机的自签名证书

Javascript-在具有URL参数的本地主机上使用提取

在具有假开发域的本地主机上使用reCAPTCHA

如何从Android使用asynctask连接到Neo4j服务器(本地主机)

如何使Firefox使用代理服务器进行本地主机连接

如何使用cypher-shell连接到不在本地主机上的螺栓

如何使用DATABASE_URL将Docker容器连接到在本地主机上运行的PostgreSQL?

如何为除本地主机之外的所有域都具有动态虚拟主机

如何防止cURL连接到本地主机?

如何在本地主机上建立双向SSH连接?

如何建立与本地主机上的websocket的安全连接?

如何强制Thrift只接受来自本地主机的连接

如何连接到Android模拟器的本地主机?

如何建立与Windows本地主机的Filezilla连接?

如何将wsl连接到Windows本地主机?