Loading
BLOG 開発者ブログ
  • ホーム>
  • 開発者ブログ>
  • 【ハマリ注意】イントラネットでiOSアプリをEnterprise配布するときに気をつけたい3つのこと...

2017年10月10日

【ハマリ注意】イントラネットでiOSアプリをEnterprise配布するときに気をつけたい3つのこと

こんにちは。クラウドソリューショングループのwatanabe.tです。

組織内でスマートフォン向けアプリを使用する場合、スマートフォンにはAndroidとiOSの2つの選択肢があります。
それぞれにメリット・デメリットが存在しますが、今回はiOSに注目していきましょう。

iOSの場合、外部にアプリを公開せず、組織内だけで配布するために、AppStoreを介さずにアプリを配布したい場合、
Apple Developer Enterprise Programを利用しなければなりません。
これを利用することで、事前に端末を登録する必要はなくなり、インストールする端末の制限もありません。
しかし、これには知らないとハマってしまう罠がいくつかあるため、今回はその中から重要度が高い3つのポイントをご紹介します。

 

1. アプリ配布用サーバの証明書の証明書は自己証明書可、ただし端末にプロファイルをインストールする必要あり

アプリを配布するサーバーはSSL化が必須になっていますが、イントラネットの場合はSSL証明書を取得するのは非常に難しくなっています。

そのため、自己証明書を作成し、アプリ配布用サーバで使用することでSSL化しますが、このままでは証明書エラーとなり、アプリをインストールすることができません。

そこで、自己証明書を作成した際に、同時にプロファイルの作成・iOSへインストールを行っておくことで、証明書エラーを回避することが可能です。

具体的には、DER形式の秘密鍵を生成し、それをアプリをインストールする前に端末にインストールする必要があります。

DER形式の秘密鍵を生成するには、opensslを利用して以下のようにPEM形式の秘密鍵から作成可能です。

これをイントラ内のiOS端末がアクセスできる場所に置き、端末にインストールしておきましょう。

また、iOS10以降ではプロファイルをインストールした後、自動的には信頼されません。

プロファイルを信頼するためには、設定アプリから 一般 > 情報 > 証明書信頼設定 と選択し、インストールしたドメインを信頼するようにする必要があります。

これらを行うことで、インストール時にはエラーが表示されなくなります。

 

2. インストール後、定期的にapple.comとの間で通信が必要

Enterprise Programで配布したアプリはインストールした後、アプリの開発元を信頼するため、apple.comのドメインに接続する必要があります。

具体的には、 https://ppq.apple.com へ定期的にアクセスを自動で行います。

そのため、端末をインターネットに接続できるような状態にし、ファイアーウォールの設定も https://ppq.apple.com への接続を許可するように設定しておく必要があります。

ただし、 定期的に というのが具体的にどの程度の期間なのかは明記されていないため、必要なときだけアクセスできるように設定を変更するのは、運用上よろしくありません。

したがって、イントラで利用する際にはプロキシサーバーを構築し、端末からのアクセスはプロキシサーバーを経由するようにした上で、apple.comへのアクセスのみ許可するようにするのが良いでしょう。

 

3. 手動でアプリとアプリ開発元を信頼する必要がある

アプリをインストールした後、iOS9以降はそのままでは起動することができません。

これは、iOS9以降からはアプリをAppStore以外からインストールした場合、開発元の信頼が自動的に行われなくなったためです。

そのため、アプリインストール後には設定アプリから、 一般 > プロファイルとデバイス管理 > エンタープライズApp と選択し、 <開発元名>を信頼 を選択して信頼する必要があります。

これは開発元毎に行われるため、一度信頼をしてしまえば、同じ開発元であれば異なるアプリを新規にインストールした際には行う必要はありません。

 

まとめ

今回はiOSのEnterprise配布にフォーカスしましたが、いかがでしたでしょうか。

iOSはAndroidと比べてセキュリティ面などが厳重な分、注意しなければならない点が多くありました。

可能な限りアプリ自体の開発以外の工数は抑えられるようにしていきたいですね。

 

watanabe.tのブログ

クラウドソリューショングループ所属

昨年度はモバイル開発を、今年度からはGCPなどのクラウド周りの開発を行っているエンジニアです。

最近はfirebaseの活用法、golangやGCP周りの勉強をしています。

アーカイブ
タグ