我有一个使用自签名证书的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”。
更新:您可以按照此答案从终端下载ssl证书。然后双击将其导入您的钥匙串。最后,您可以将证书从钥匙串中导出为.cer文件。这具有iOS可以读取的正确格式。通过手动调用的certificates(in:)
功能来验证是否是这种情况ServerTrustPolicy
。它现在应该返回您的证书。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句