WEBサイト制作・アプリ開発・システム開発・ブランディングデザイン制作に関するご相談はお気軽にご連絡ください。
構想段階からじっくりとヒアリングし、お客様の課題にあわせたアプローチ手法でお客様の“欲しかった”をカタチにしてご提案いたします。
Blog スタッフブログ
iOS
Swift
システム開発
[Swift]Alamofire5で期限の切れたSSL証明書を無視する
こんにちは、株式会社MIXシステム開発担当のBloomです。
早速本題のAlamofire5で期限の切れたSSL証明書を無視する手順について、
お仕事の中で得た知見を共有させていただきたいと思います。
この記事は開発環境などで動作確認のため、一時的にSSLを無視したい場合の対処法となります。リリース時には特別な意図がない限りSSL証明書の検証を行なってください。
Alamofire5について
以前の記事ではAlamofire4を利用していましたが今回はAlamofire5の利用となり、一部構文が変化しています。
リンク先の記事の構文をAlamofire5で書き換えるとこのようになります。
func callStringArrayApi() {
let url = URL(string: apiUrl + "/api/example")!
AF.request(url,
method: .get,
parameters: nil,
encoding: JSONEncoding.default)
.responseDecodable(of: [String].self, decoder: JSONDecoder()) { response in
switch response.result {
case .success:
if let arr = response.value {
print("string array decoded: \(arr)")
} else {
print("string array decoding failed")
}
case .failure(let error):
print(error)
}
}
}
これを踏まえてSSL証明書を検証しない形式のコードを記載します。
SSL証明書を検証しないリクエスト
class APIConnection: NSObject {
static let shared = APIConnection()
private override init(){
super.init()
}
var apiUrl: String {
return "https://example.com"
}
private let session: Session = {
let manager = ServerTrustManager(evaluators: ["example.com": DisabledTrustEvaluator()])
let configuration = URLSessionConfiguration.af.default
return Session(configuration: configuration, serverTrustManager: manager)
}()
func callApi(handler:@escaping (Data?) -> Void) {
let url = URL(string: apiUrl + "/api/example")!
session.request(url,
method: .get,
encoding: URLEncoding.default).responseData { response in
handler(response.data)
}
}
}
Alamofireで利用するSessionをクラス内で保持し、ServerTrustManagerの初期化時にドメインに対してDisabledTrustEvaluatorを指定しています。
これに加えて[Signing & Capabilities] -> [App Transport Security Exception]から対象ドメインをException Domainsに指定しておきましょう。
これで開発環境のSSL証明書が古い場合でも一旦動作確認ができるようになりました。良かったですね。