タグ : iOS

iOS10のSSL対応におけるAWS ELB利用時の盲点


iOS10から必須となる通信の暗号化(SSL)ですが、
AWSのロードバランサーを使ってる場合に盲点が・・・

前提

AWSのELBにてSSLを利用
2014年1月以前にSSL設定
iOSアプリからSSLアクセス

盲点

SSL自体Appleが必要としているTLS v1.2に対応したものに設定したのに、
いざXcodeで実行すると以下のメッセージが…

NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9824)

原因

ELBのHTTPS/SSLリスナーのSSLネゴシエーション設定が
 ELBSecurityPolicy-2011-08
になっていて、TLS v1.2を使わないポリシーに・・・

SSLネゴシエーション設定

SSLネゴシエーション設定

解決策

SSLネゴシエーション設定をELBSecurityPolicy-2014-01以降の
 ELBSecurityPolicy-2015-05
 ELBSecurityPolicy-2015-03
 ELBSecurityPolicy-2015-02
 ELBSecurityPolicy-2014-10
 ELBSecurityPolicy-2014-01
のいずれか新しいポリシーに変更するだけです。

SSLネゴシエーション設定選択

SSLネゴシエーション設定選択

Node.jsでSSL通信(iOS8, iOS9のサファリでは注意)


Node.jsでSSL通信させる書き方

var https = require('https');
var fs = require('fs');
var options = {
    key: fs.readFileSync('キーのファイルパス'),
    cert: fs.readFileSync('証明書のファイルパス'),
    ca: fs.readFileSync('中間証明書のファイルパス')
};
https.createServer(options, function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hello World\n');
}).listen(1337, "0.0.0.0");

ここで重要なのが中間証明書(ca)の設定で、
以前はこのcaの設定が無くても動いてたのに、
iOS8以降のサファリでは動かない場合あり。
特にsquidなどのプロキシ経由など。

iOS7説明動画(大阪弁)


iOS7説明動画(大阪弁)

とっつきやすいw