Swift客户端和根SSL证书认证 [英] Swift client and root SSL certificate authentication
本文介绍了Swift客户端和根SSL证书认证的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
将 QLIK服务器
的令牌
api与 ssl
证书,但执行任务后却出现这样的错误-
Integrating get token
api of QLIK server
with ssl
certificate but after performing task I am getting error like this -
完成错误-代码:-999
// Your hostname and endpoint
let hostname = "YOUR_HOST_NAME"
let endpoint = "YOUR_ENDPOINT"
let cert = "YOUR_CERT" // e.g. for cert.der, this should just be "cert"
// Set up certificates
let pathToCert = Bundle.main.path(forResource: cert, ofType: "der")
let localCertificate = NSData(contentsOfFile: pathToCert!)
let certificates = [SecCertificateCreateWithData(nil, localCertificate!)!]
// Configure the trust policy manager
let serverTrustPolicy = ServerTrustPolicy.pinCertificates(
certificates: certificates,
validateCertificateChain: true,
validateHost: true
)
let serverTrustPolicies = [hostname: serverTrustPolicy]
let serverTrustPolicyManager = ServerTrustPolicyManager(policies: serverTrustPolicies)
// Configure session manager with trust policy
afManager = SessionManager(
configuration: URLSessionConfiguration.default,
serverTrustPolicyManager: serverTrustPolicyManager
)
qlikManager.request(strURL, method: .post, parameters: params, encoding: JSONEncoding.default, headers: headers).responseJSON { (responseObject) -> Void in
print(responseObject)
}
请检查它
推荐答案
创建 CustomServerTrustPolicyManager.swift
并使用以下代码
import UIKit
import Alamofire
class CustomServerTrustPolicyManager: ServerTrustPolicyManager {
override func serverTrustPolicy(forHost host: String) -> ServerTrustPolicy? {
// Check if we have a policy already defined, otherwise just kill the connection
if let policy = super.serverTrustPolicy(forHost: host) {
return policy
} else {
return .customEvaluation({ (_, _) -> Bool in
return false
})
}
}
}
然后创建 NetworkManager.swift
并使用以下代码:
then create NetworkManager.swift
and use below code:
import UIKit
import Alamofire
class NetworkManager {
static let sharedInstance = NetworkManager()
let manager: Alamofire.SessionManager = {
//For using Cerificates Pinning
let serverTrustPolicies: [String: ServerTrustPolicy] = [
"host_url": .pinCertificates(
certificates: ServerTrustPolicy.certificates(),
validateCertificateChain: true,
validateHost: true
)
]
/*
//For Using with Public Key
let serverTrustPolicies: [String: ServerTrustPolicy] = [
"host_url": .pinPublicKeys(
publicKeys: ServerTrustPolicy.publicKeys(),
validateCertificateChain: true,
validateHost: true
)
]
*/
let configuration = URLSessionConfiguration.default
configuration.httpAdditionalHeaders = Alamofire.SessionManager.defaultHTTPHeaders
return Alamofire.SessionManager(
configuration: configuration,
serverTrustPolicyManager: CustomServerTrustPolicyManager(policies: serverTrustPolicies)
)
}()
}
之后,使用以下命令测试您的连接。
After that use like following to test your connection.
func testSSLConnection() {
NetworkManager.sharedInstance.manager.request("your_url_to_test").responseJSON { response in
print("Request: \(String(describing: response.request))") // original url request
print("Response: \(String(describing: response.response))") // http url response
print("Result: \(response.result)") // response serialization result
if let json = response.result.value {
print("JSON: \(json)") // serialized json response
}
}
}
希望它会对您有所帮助。
Hope it will help you.
这篇关于Swift客户端和根SSL证书认证的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文