【发布时间】:2024-01-15 07:22:01
【问题描述】:
在我的情况下,使用便捷方法 ServerTrustPolicy.certificatesInBundle() 似乎无法正常工作
// MARK: - Bundle Location
/**
Returns all certificates within the given bundle with a `.cer` file extension.
- parameter bundle: The bundle to search for all `.cer` files.
- returns: All certificates within the given bundle.
*/
public static func certificatesInBundle(bundle: NSBundle = NSBundle.mainBundle()) -> [SecCertificate] {
var certificates: [SecCertificate] = []
let paths = Set([".cer", ".CER", ".crt", ".CRT", ".der", ".DER"].map { fileExtension in
bundle.pathsForResourcesOfType(fileExtension, inDirectory: nil)
}.flatten())
for path in paths {
if let
certificateData = NSData(contentsOfFile: path), // <-- we get the data of the certificate in bundle
certificate = SecCertificateCreateWithData(nil, certificateData) // <-- The problem is here, the certificate is not set neither errors.
{
certificates.append(certificate) // <-- this doesn't run
}
}
return certificates
}
可能与自签名证书的格式有关。我完全使用了这篇博文中的#tip 5。 Five Tips for Using Self Signed SSL Certificates with iOS
问题是SecCertificateCreateWithData 方法的限制是什么,哪些证书格式可以接受?更好的是,我可以在哪里阅读有关此特定问题的更多信息。
我的代码似乎是正确的,没什么特别的,可能是最常用的 sn-ps 之一:P
let defaultManager:Alamofire.Manager = {
let serverTrustPolicies: [String: ServerTrustPolicy] = [
"localhost": .PinCertificates(
certificates: ServerTrustPolicy.certificatesInBundle(),
validateCertificateChain: true,
validateHost: true
)
]
let configuration = NSURLSessionConfiguration.ephemeralSessionConfiguration()
configuration.HTTPAdditionalHeaders = Alamofire.Manager.defaultHTTPHeaders
return Alamofire.Manager(
configuration: configuration,
serverTrustPolicyManager: ServerTrustPolicyManager(policies: serverTrustPolicies)
)
}()
【问题讨论】:
标签: ios ssl https ssl-certificate alamofire