I have tried implementing ssl pinning with certificate using alamofire in swift project but I am getting noCertificateFound error.
let evaluator : [String : ServerTrustEvaluating] = ["staging-clientsapi.expatpa.com": PinnedCertificatesTrustEvaluator(certificates: AFWrapper.pinnedCertificates())]
let manager = ServerTrustManager(evaluators: evaluator)
afSession = Session.init(serverTrustManager: manager)
static func pinnedCertificates() -> [SecCertificate] {
var certificates: [SecCertificate] = []
if let pinnedCertificateURL = Bundle.main.url(forResource: "expatpa.com", withExtension: "cer") {
do {
let pinnedCertificateData: CFData = try Data(contentsOf: pinnedCertificateURL) as CFData
if let pinnedCertificate: SecCertificate = SecCertificateCreateWithData(nil, pinnedCertificateData) {
certificates.append(pinnedCertificate)
}
} catch {
print("certicate exception--")
}
}
return certificates
}
afSession.request(request).validate().responseString { .... }
.noCertificatesFound
means your Bundle.main.url(forResource: "expatpa.com", withExtension: "cer")
returned nothing and passed an empty array to the evaluator. I suggest you just use Alamofire's default .pinnedCertificates
evaluator, which will find all certificates in the main bundle by default.