[英]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.