Takahiro Octopress Blog

-1から始める情弱プログラミング

AFNetworking 2.6.0でやってみよう自己証明書でのSSL通信

AFNetworking2.5.xまでの自己証明書でのSSL通信

これまでAFNetworking2.5.xを使ってきた筆者ですが、開発中は当然のことながら自己証明書を利用することがあります。
まずはこれまでの書き方をAFHTTPSessionManagerを例に確認してみましょう。

1
2
3
4
5
6
// AFHTTPSessionManagerをインスタンス化
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.securityPolicy.allowInvalidCertificates = YES;
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/plain", @"application/json", nil];

...

そうです。
自己証明書を許可するのに、manager.securityPolicy.allowInvalidCertificates = YES;と書いていました。

しかし、2015/08/18に 2.6.0 が登場した途端、ネット上で大騒ぎに…笑。
2.6.0のRelease Noteを見てみると、 Full Certificate Chain Validation has been removed from AFSecurityPolicy. なんて一言が…。

いろいろと困ったのですが、筆者の場合は次のやり方でうまくいきました。

AFNetworking2.6.0での自己証明書 SSL通信

はい。2.6.0では下記のように書きました。

1
2
3
4
5
6
7
// AFHTTPSessionManagerをインスタンス化
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.securityPolicy.allowInvalidCertificates = YES;
manager.securityPolicy.validatesDomainName = NO;
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/plain", @"application/json", nil];

...

何が変わったかお気づきでしょうか?
そうです。
manager.securityPolicy.validatesDomainName = NO;を追加したのです。

まとめ

iOS9からATS設定が追加されたこともあり、HTTPSが推奨されています。
しかも、正式な証明書が開発・商用関係なく使われていくことでしょう。
なので、こういった更新は納得感ありますが、なかなか開発者には辛いところもありますよね。
とは言え、AppleやGoogleが決めていくことにはついていった方が良いよな〜といったところで本日はここまで。

Comments