Bhi*_*kar 2 ios swift alamofire public-key-pinning swift5
我正在尝试将 SSL 公钥固定集成到 Alamofire swift 5 中,但我发现ServerTrustPolicyManager它已被弃用。请帮助我融入。谢谢。
要集成 SSL 公钥固定,您首先必须通过拖放将 SSL 证书添加到项目的目标中。
要测试您的证书格式是否正确,您可以尝试从main 中publicKeys的参数中获取值,如下所示:AlamofireExtensionBundle
print("Bundle public keys: \(Bundle.main.af.publicKeys)")
Run Code Online (Sandbox Code Playgroud)
如果该数组至少有一个元素,那么您就准备好了。如果没有,请尝试将 SSL 证书导入到 Mac 的钥匙串中,然后将其导出为.cer,然后将其添加到项目的目标中。(这应该有效)
要检查 SSL 证书的公钥是否是您在项目中导入的公钥,您可以在创建以下项目时将 AlamofireServerTrustManager与实例一起使用:PublicKeysTrustEvaluatorSession
let evaluators: [String: ServerTrustEvaluating] = [
"your.domain.com": PublicKeysTrustEvaluator()
]
let serverTrustManager = ServerTrustManager(evaluators: evaluators)
let session = Session(serverTrustManager: serverTrustManager)
Run Code Online (Sandbox Code Playgroud)
确保在evaluators字典中,键("your.domain.com"在上面的代码中)是您的服务器域,如果您不希望 Alamofire 执行默认验证和/或验证主机,您可以传递给的初始化程序false中的这些参数:PublicKeysTrustEvaluator
let evaluators: [String: ServerTrustEvaluating] = [
"your.domain.com": PublicKeysTrustEvaluator(
performDefaultValidation: false,
validateHost: false
)
]
let serverTrustManager = ServerTrustManager(evaluators: evaluators)
let session = Session(serverTrustManager: serverTrustManager)
Run Code Online (Sandbox Code Playgroud)
然后您必须使用此Session实例在您的域中发出任何请求,如下所示:
let url = "https://your.domain.com/path/to/api"
session.request(url, method: .post, parameters: parameters).responseDecodable { response in
}
Run Code Online (Sandbox Code Playgroud)
正如@JonShier 在评论中指出的那样:你需要Session在声明的范围之外保持生命。通常这是通过单个或其他外部参考来完成的。
| 归档时间: |
|
| 查看次数: |
4182 次 |
| 最近记录: |