iOSアプリをOTA配信 ~自己署名証明書でSSLサーバ構築編


はじめに

iOSアプリのOTA配信でplistがSSL指定を余儀なくされたことが動機としてあり
どうせ理解するなら

  • nginxでWebサーバをたててみたい
  • SSL化のTips欲しい

上記を中心に進めてみました。

この手法でのインフラ・ネットワーク系のセキュリティについては検証しきれていません。あくまでOTAの検証環境の運用ベースでの構築で、不要時は落としておくサーバであることを前提に進めます。

環境

サーバ

さくらインターネット:さくらのVPS

一番安い980円を使っています

端末

Mac:OS X 10.9.2

  • ターミナル
  • Cyberduck(SFTPで転送)
  • キーチェーンアクセス
  • Safari

作業フロー

サーバセットアップ

こちらのサイトを参考に作業フローを決めました。

VPS 借りたら、せめてこれくらいはやっとけというセキュリティ設定
http://dogmap.jp/2011/05/12/vps-security/

ログインをパスワードから公開鍵認証に変更

こちらの内容にそっての作業です。
http://qiita.com/chkk525@github/items/0a027173d56bb09dab0b

パスワードでのログインをきる前に、公開鍵認証とも有効にした状態で
sshdをrestartし、公開鍵認証を確認したら

/etc/.ssh/sshd_config
PasswordAuthentication no

を行う方が安全かとは思います。そしてもう一度sshdのrestart

ssh [ユーザ名]@[接続先サーバ] -i [RSA秘密鍵]
例) ssh [email protected]:/home/hoge/ -i ~/.ssh/id_rsa

自己署名証明書の作成

keyを作る

$ openssl genrsa 2048 > server.key

keyをもとに証明書を作る

$ openssl req -new -x509 -days 3650 -key server.key -out server.crt

これで秘密鍵(server.key)と証明書(server.crt)ができました

Webサーバ構築:nginx

リポジトリを登録して

$ sudo rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm

インストール

$ sudo yum install nginx

バージョンを確認

$ nginx -v

起動

$ sudo service nginx start

ブラウザなどで表示できるかをみます。

ドキュメントルート

centOS6でnginxを使った場合は下記のようになりました。
環境によって異なることもありそうなので、公式サイトを見てください。

/usr/share/nginx/html/

自己署名証明書を配置

/etc/nginx/conf.d/の下にconfファイルがいくつかあり
example_ssl.conf を元に作成しました。これは一例です。

/etc/nginx/conf.d/ssl.conf
# HTTPS server
#
server {
    listen      80;
    listen       443 ssl;
    server_name  fuga.ne.jp;

    ssl_certificate      /etc/nginx/cert/server.crt;
    ssl_certificate_key  /etc/nginx/cert/server.key;

    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout  5m;

    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers   on;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
}

証明書と秘密鍵をconfファイルに記載したパスに配置します。

confファイルの記述が正しいか確認

sudo /etc/init.d/nginx configtest

何事もなければ再起動します

sudo /etc/init.d/nginx restart

SSL化の確認

作成したserver.crtを端末に取り込む前、取り込んだ後の状態で正常稼働しているかどうかの確認が可能です。
Macの場合はcrtファイルをダブルクリックでキーチェーンアクセスに取り込み、SafariからSSL化したサーバへアクセスし正常稼働しているかを見ます。

参考URL

SAKURA VPS がカーネルパニックを起こした!
http://thinkit.x-sys.net/p1024.html

CentOS6で最新版のnginxをyumでインストールする
http://nomnel.net/blog/install-nginx-in-centos6-using-yum/

さくらVPS: 契約してからの作業メモ
http://qiita.com/chkk525@github/items/0a027173d56bb09dab0

OpenSSLで自己署名証明書を作成する
http://inaz2.hatenablog.com/entry/2013/11/27/212224

nginxでSSLを立てるまで
http://qiita.com/edo_m18/items/7e0e4b6d8e1e1d314184

nginxの最近のブログ記事
http://heartbeats.jp/hbblog/nginx/

さいごに

apacheはともかくnginxはまるで触ったことのない状態で、Webサーバの立ち上げまでは数十分くらい。時間をとられたのが

  • VPSを使っていることでのはまり:カーネルパニックと接続不良
  • openSSLやSSLについての調査

iPhone構成ユーティリティを使ってのiOSデバイスとサーバ疎通は今回ちょっと長く書きすぎましたので別途用意します。