![](/img/trans.png)
[英]How to implement SSL Pinning - Public Key Pinning (Not Certificate Pinning) with Moya in Swift?
[英]how to do SSL public key pinning in Alamofire swift 5
我正在尝试将 SSL 公钥固定在 Alamofire swift 5 中集成。但我发现ServerTrustPolicyManager已被弃用。 请帮我整合。 谢谢。
要集成 SSL 公钥固定,您首先必须通过拖放将 SSL 证书添加到项目的目标中。
要测试您的证书格式是否正确,您可以尝试从主Bundle
中的AlamofireExtension
的publicKeys
参数获取值,如下所示:
print("Bundle public keys: \(Bundle.main.af.publicKeys)")
如果该数组至少有一个元素,那么您就准备好了。 如果没有,请尝试将 SSL 证书导入 Mac 的钥匙串,然后将其导出为.cer
,然后将其添加到项目的目标中。 (这应该工作)
要检查 SSL 证书的公钥是否是您在项目中导入的公钥,您可以在创建Session
时将 Alamofire 的ServerTrustManager
与PublicKeysTrustEvaluator
实例一起使用:
let evaluators: [String: ServerTrustEvaluating] = [
"your.domain.com": PublicKeysTrustEvaluator()
]
let serverTrustManager = ServerTrustManager(evaluators: evaluators)
let session = Session(serverTrustManager: serverTrustManager)
确保在evaluators
字典中,键(上面代码中的"your.domain.com"
)是您的服务器域,如果您不希望 Alamofire 执行默认验证和/或验证您可以通过的主机对PublicKeysTrustEvaluator
的初始化程序中的那些参数为false
:
let evaluators: [String: ServerTrustEvaluating] = [
"your.domain.com": PublicKeysTrustEvaluator(
performDefaultValidation: false,
validateHost: false
)
]
let serverTrustManager = ServerTrustManager(evaluators: evaluators)
let session = Session(serverTrustManager: serverTrustManager)
然后您必须使用此Session
实例在您的域中发出任何请求,如下所示:
let url = "https://your.domain.com/path/to/api"
session.request(url, method: .post, parameters: parameters).responseDecodable { response in
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.