当前位置: 首页 > 面试题库 >

如何使用Alamofire 1.3连接到自签名服务器

牧献
2023-03-14
问题内容

连接到自签名服务器时出现以下错误。

错误Domain = NSURLErrorDomain代码= -1202“此服务器的证书无效。您可能正在连接到假装为“
maskeddomain.com”的服务器,这可能会使您的机密信息受到威胁。UserInfo = 0x7fb6dec259e0
{NSURLErrorFailingURLPeerTrustErrorKey =,NSLocalizedRecoverySuggestion
=您是否仍然要连接到服务器?,_kCFStreamErrorCodeKey = -9813,NSUnderlyingError =
0x7fb6dbe0dd90“操作无法完成。”(kCFError120。

看起来Alamofire
1.3(https://github.com/Alamofire/Alamofire#security)允许禁用此验证。有人实施过吗?我在快速项目中使用的是Alamofire
API,不确定是否需要在确切位置实施“服务器信任策略管理器”。请指教。


问题答案:

有一种方法可以更改Alamofire管理器共享实例的服务器信任策略,但是不建议这样做。相反,您应该创建自己的定制管理器实例。这是推荐的解决方案,代码是
swift-2.0分支中的* 带有Alamofire的 Swift 2.0 ,在 Xcode7 beta 5中进行了 编译。 *

创建管理器的定制实例

因为您不会在Alamofire上使用 request 方法,而是在自定义管理器上使用 request
方法,所以您需要考虑将管理器存储在何处。我要做的是将其作为静态存储在我的网络包装器中(该类使用Alamofire并处理我的应用程序网络需求)。我这样设置:

private static var Manager : Alamofire.Manager = {
        // Create the server trust policies
        let serverTrustPolicies: [String: ServerTrustPolicy] = [
            "maskeddomain.com": .DisableEvaluation
        ]
        // Create custom manager
        let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
        configuration.HTTPAdditionalHeaders = Alamofire.Manager.defaultHTTPHeaders
        let man = Alamofire.Manager(
            configuration: NSURLSessionConfiguration.defaultSessionConfiguration(),
            serverTrustPolicyManager: ServerTrustPolicyManager(policies: serverTrustPolicies)
        )
        return man
    }()

下一步是切换所有Alamofire.request()与一起使用的呼叫Manager.request(),因此您应该具有以下内容:

Manager.request(.GET, "http://stackoverflow.com").responseJSON(
    completionHandler: { (_, respose, result) -> Void in
            if result.isSuccess {
                // enjoy your success
            } else if result.isFailure {
                // deal with your failure
            }
    })

如果仍然要更改管理器的共享实例,请转到此处以获取更多信息。



 类似资料:
  • 问题内容: 我完全被困在这里。我有一个Java客户端代码,需要使用自签名证书连接到SSL服务器。 仅 当我在服务器端禁用SSLv2支持时, 才会 出现此问题。 痕迹是 在服务器端,我可以看到以下跟踪: 如果启用SSL2,我会看到 而且一切正常。 我还知道那不是服务器端的东西,因为与其他软件连接可以正常工作。 知道我在做什么错吗? 还有人知道这个“读取客户端问候A / B”是什么意思吗? 谢谢 更新

  • 问题内容: 我在使用自签名证书连接到mqtt服务器时遇到问题。即时通讯使用Paho客户端,并想使用连接到服务器。实际上,我成功连接了Android API 20+,但此版本以下没有成功。 香港专业教育学院到目前为止做了什么: 1-创建了PKCS#12密钥库,并将.crt文件放入密码并为其添加密码并将其保存(它将是.pfx文件) 2-将.pfx文件添加到android项目中资源的原始文件夹中 3-使

  • 我是第一次使用jprofiler,首先我下载了jprofiler,然后安装了jprofiler。请帮助我如何使用jboss服务器配置jprofiler。我们不使用jboss服务器默认部署,我们有特定的部署,如C:\jboss-4.2.2。GA \服务器\测试\,我们的应用程序部署在测试文件夹中,如何使用jprofiler配置测试部署文件夹?

  • 问题内容: 我已经开始为API编写包装,该包装要求所有请求都通过HTTPS进行。我不想在开发和测试它时向实际的API发出请求,而是希望在本地运行自己的服务器来模拟响应。 我对如何生成创建HTTPS服务器并向其发送请求所需的证书感到困惑。 我的服务器看起来像这样: Pem文件是使用以下命令生成的: 一个请求看起来像这样: 通过此设置,我得到了,所以我认为我需要为该请求添加一个选项。 所以我的问题是我

  • 我正在使用C#开发简单的minecraft启动器。我想自动连接用户到我们的服务器使用IP地址和端口时,用户开始我的世界。

  • 问题内容: 我有一个使用JDBC(通过JPA)的Java应用程序,它使用主机名,端口和Oracle SID连接到开发数据库,​​如下所示: jdbc:oracle:thin:@ oracle.hostserver1.mydomain.ca:1521:XYZ XYZ是Oracle SID。现在,我需要连接到另一个不使用SID而是使用Oracle“服务名”的Oracle数据库。 我试过了,但是没有用: