我有一个.pem文件,它将通过curl的--cert参数成功连接到我的网站。然后,我将其转换为der文件:
openssl x509-通知PEM-通知DER-输入client.pem-输出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 {
当它运行时,尽管它只是失败了,但我得到了“取消”作为错误的localizedDescription,这是身份验证失败时Alamofire所做的事情。
我究竟做错了什么?
Alamofire证书固定逻辑当前不支持此用例。它仅设计用于处理证书和公钥固定,而不用于处理用于向服务器进行身份验证的客户端证书。如果这是一个常见的用例,这是我们将来可以支持的东西。
话虽如此,我假设在这种情况下,您收到的是一个NSURLAuthenticationChallenge
带有保护类型为的身份验证方法的保护空间.NSURLAuthenticationMethodClientCertificate
。在这些情况下,您需要评估挑战的宿主,然后NSURLCredential
使用credentialWithIdentity:certificates:persistence:
API创建一个。通过将此凭据传递给完成处理程序,应将客户端证书发送到服务器以对连接进行身份验证。更多信息可以在这里找到。
客户端证书身份验证(NSURLAuthenticationMethodClientCertificate)需要系统身份以及与服务器进行身份验证所需的所有证书。使用credentialWithIdentity:certificates:persistence:创建一个NSURLCredential对象。
我以前从未真正需要使用过这种身份验证。您需要SessionDelegate
使用任务覆盖关闭来覆盖auth挑战关闭,以使此工作正常进行。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句