【问题标题】:Alamofire and PEM certificateAlamofire 和 PEM 证书
【发布时间】:2016-07-14 05:17:06
【问题描述】:

我有一个 .pem 文件,它将通过 curl 的 --cert 参数成功连接到我的网站。然后我将其转换为 der 文件:

openssl x509 -inform PEM -outform DER -in client.pem -out cert.der

然后我将该 cert.der 加载到我的项目中,现在我正在尝试将它与 Alamofire 一起使用,按照他们主页上的示例:

    let serverTrustPolicy = ServerTrustPolicy.PinCertificates(
        certificates: ServerTrustPolicy.certificatesInBundle(),
        validateCertificateChain: true,
        validateHost: true
    )

    let policyManager = ServerTrustPolicyManager(policies: ["my.domain.com" : serverTrustPolicy])
    manager = Alamofire.Manager(configuration: configuration, serverTrustPolicyManager: policyManager)
    manager.request(.GET, url, parameters: params, encoding: .URLEncodedInURL, headers: nil)
        .authenticate(usingCredential: credential)
        .validate()
        .responseJSON {

当它运行时它只是失败了,我得到一个“已取消”作为错误的本地化描述,这是 Alamofire 在身份验证失败时所做的。

我做错了什么?

【问题讨论】:

  • 嗨,我正在尝试做同样的事情,我创建了 csr,将其发送到服务器,然后获得了客户端证书....现在我需要结合它,你是如何以编程方式完成的?请你帮助我好吗?谢谢

标签: alamofire


【解决方案1】:

Alamofire 证书固定逻辑当前不支持此用例。它仅用于处理证书和公钥固定,而不是用于与服务器进行身份验证的客户端证书。如果这是一个常见的用例,我们将来可以支持这一点。

话虽如此,我假设在这种情况下您会收到一个NSURLAuthenticationChallenge,其保护空间具有.NSURLAuthenticationMethodClientCertificate 类型的身份验证方法。在这些情况下,您需要评估挑战的主机,然后使用credentialWithIdentity:certificates:persistence: API 创建一个NSURLCredential。通过将此凭据传递给完成处理程序,应将客户端证书发送到服务器以验证连接。更多信息可以在here找到。

客户端证书身份验证(NSURLAuthenticationMethodClientCertificate)需要系统身份和服务器身份验证所需的所有证书。使用 credentialWithIdentity:certificates:persistence: 创建一个 NSURLCredential 对象。

我以前从未真正需要使用这种类型的身份验证。您需要使用任务覆盖闭包覆盖身份验证挑战 SessionDelegate 闭包才能使其正常工作。

【讨论】:

  • veewee.github.io/blog/… 显示了我在做什么。这就是我想到进行证书身份验证的地方。基本上,OAuth 的设置和管理都很麻烦,证书路由可确保您不会因为有人使用“密码”作为密码而受到损害。
  • 不完全确定如何覆盖委托。能举个小例子吗?
猜你喜欢
  • 1970-01-01
  • 2016-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-22
  • 1970-01-01
  • 2021-12-28
相关资源
最近更新 更多