How do I use a self-signed certificate for HTTPS requests.
Can you give me an demo?
//处理https证书验证
let secManager = Manager(
configuration: URLSessionConfiguration.default,
serverTrustPolicyManager: CustomServerTrustPoliceManager()
)
//从bundle里获取自签名证书进行ssl认证
class CustomServerTrustPoliceManager : ServerTrustPolicyManager {
override func serverTrustPolicy(forHost host: String) -> ServerTrustPolicy? {
// return .disableEvaluation
let pathToCert = Bundle.main.path(forResource: "appssec_root_ca", ofType: "cer")
let localCertificate:NSData = NSData(contentsOfFile: pathToCert!)!
return .pinCertificates(certificates: [SecCertificateCreateWithData(nil, localCertificate)!], validateCertificateChain: true,
validateHost: true)
}
public init() {
super.init(policies: [:])
}
}
let provider = MoyaProvider<APIService>(manager: secManager, plugins: [NetworkLoggerPlugin(verbose: true)])
//处理https证书验证
let secManager = Manager( configuration: URLSessionConfiguration.default, serverTrustPolicyManager: CustomServerTrustPoliceManager() )//从bundle里获取自签名证书进行ssl认证
class CustomServerTrustPoliceManager : ServerTrustPolicyManager { override func serverTrustPolicy(forHost host: String) -> ServerTrustPolicy? { // return .disableEvaluation let pathToCert = Bundle.main.path(forResource: "appssec_root_ca", ofType: "cer") let localCertificate:NSData = NSData(contentsOfFile: pathToCert!)! return .pinCertificates(certificates: [SecCertificateCreateWithData(nil, localCertificate)!], validateCertificateChain: true, validateHost: true) } public init() { super.init(policies: [:]) } }
let provider = MoyaProvider<APIService>(manager: secManager, plugins: [NetworkLoggerPlugin(verbose: true)])
Thank you very much for your help,Could you please provide the mode of Moya14,Thanks。
This issue has been marked as stale because it has not had recent activity. It will be closed if no further activity occurs.
This issue has been auto-closed because there hasn't been any activity for at least 21 days. However, we really appreciate your contribution, so thank you for that! 🙏 Also, feel free to open a new issue if you still experience this problem 👍.
Support Moya14.0.0 & Alamofire 5.4.3
struct Certificates {
static let certificate: SecCertificate = Certificates.certificate(filename: "certificateFileName")
private static func certificate(filename: String) -> SecCertificate {
let filePath = Bundle.main.path(forResource: filename, ofType: "cer") ?? ""
let data = try! Data(contentsOf: URL(fileURLWithPath: filePath))
let certificate = SecCertificateCreateWithData(nil, data as CFData)!
return certificate
}
}
var session: Session {
let certificates = [
(URL.init(string: baseURLString)?.host)!:
PinnedCertificatesTrustEvaluator(certificates: [Certificates.certificate],
acceptSelfSignedCertificates: true,
performDefaultValidation: true,
validateHost: false)]
let serverTrustPolicy = ServerTrustManager(
allHostsMustBeEvaluated: false,
evaluators: certificates)
let session = Session(serverTrustManager: serverTrustPolicy)
return session
}
let provider = MoyaProvider<API>(session: session)
Most helpful comment
//处理https证书验证
//从bundle里获取自签名证书进行ssl认证
let provider = MoyaProvider<APIService>(manager: secManager, plugins: [NetworkLoggerPlugin(verbose: true)])