如何解决如何使用未知CA自签名的证书让Alamofire执行HTTPS请求?
我有一个使用自签名证书的Web服务器,并根据其证书创建了一个“信任库”。
我遇到以下错误:
此服务器的证书无效。您可能正在连接到 假装为“ 192.168 ....”的服务器可能会将您的 机密信息处于危险之中
这是我的一些实现方法:
let pathToCert = Bundle.main.path(forResource: "truststore-root",ofType: "cer")
let localCertificate : NSData = NSData(contentsOfFile: pathToCert! )!
let serverTrustPolicy = ServerTrustPolicy.pinCertificates(
certificates : [SecCertificateCreateWithData(nil,localCertificate)!],validateCertificateChain : true,validateHost : false
)
let serverTrustPolicies = [
"https://192.168.50.31" : serverTrustPolicy
]
return Alamofire.SessionManager(
configuration: configuration,serverTrustPolicyManager: ServerTrustPolicyManager(policies: serverTrustPolicies)
)
解决方法
首先,您需要在应用程序目标中包括您自己签名的ssl证书。
注意:证书必须采用iOS可以读取的格式。您可能需要将truststore-root.cer
文件转换为其他格式。在某些情况下,这是一个反复试验的过程。
然后,您可以调整代码以使用certificates(in:)
的便捷ServerTrustPolicy
功能,如下所示:
let serverTrustPolicy = ServerTrustPolicy.pinCertificates(
certificates: ServerTrustPolicy.certificates(),validateCertificateChain: true,validateHost: false
)
let serverTrustPolicies = [
"192.168.50.31": serverTrustPolicy
]
return Alamofire.SessionManager(
configuration: configuration,serverTrustPolicyManager: ServerTrustPolicyManager(policies: serverTrustPolicies)
)
此功能将扫描您的主捆绑包,并返回包含以下后缀之一的所有文件“ .cer”,“。CER”,“。crt”,“。CRT”,“。der”,“。DER” “。
更新:您可以按照this的答案从终端下载ssl证书。然后双击将其导入您的钥匙串。最后,您可以将证书从钥匙串中导出为.cer文件。这具有iOS可以读取的正确格式。通过手动调用certificates(in:)
的{{1}}函数来验证是否是这种情况。现在它应该返回您的证书。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。