[iOS]オレオレ証明書なSSLサーバに試験的に接続を許可する

2014.05.27

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

コーディング中のアプリケーションでも、サーバーとの疎通試験を行う機会は多いです。 でも、サーバーはまだ構築中だけど、SSLの証明書をまだ取得してないし、でもSSL通信での疎通試験はしたいし・・・ そんなときに、一旦SSLの証明書チェックを通る実装をしましょう。

NSURLRequestを拡張する

サーバへのアクセスはNSURLConnectionを使用するのですが、普通に通信しようとするとSSLの通信エラーが出ます。 NSURLConnection/CFURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9813) そこで、NSURLRequestを拡張します。

NSURLRequest+SSL.h

//
// NSURLRequest+SSL.h
//

#import <Foundation/Foundation.h>
@interface NSURLRequest (SSL)
+ (BOOL)allowsAnyHTTPSCertificateForHost:(NSString*)host;
@end

NSURLRequest+SSL.m

//
// NSURLRequest+SSL.m
//

#import "NSURLRequest+SSL.h"

@implementation NSURLRequest(SSL)
+ (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)host {
    return YES;
}
@end

これだけです。 通信するときにホストを限定したい場合は、hostのstringによって条件分岐をするようにして下さい。 ただし、この実装のままだと、appleの審査に通らない可能性が高いので、審査の際はちゃんとオレオレではなくしっかりとした証明書で通信を行い、本ソースを除外することをおすすめします。