概要
とある案件でWi-Fi経由でipaをインストールしたい状況が発生したのでそれについて調べました。
Web上に置かれたAdHoc版iOSアプリのインストールにはSSLに対応したサーバが必要とのこと。
そこで、オレオレ証明書を作り、iPhone/iPadでインストールできるまでの手順をまとめたいと思います。
なお、今回の記事は以下の記事を参考にさせていただきました。
オレオレ証明書の作成
フロー
今回の例は、自分のMacbookをサーバにしてそこからインストールする方法です。
- 自身のIPアドレスを確認しておく(
ifconfig
など) - 以下のファイルを生成する(作業用に適当なフォルダを作成してその中で作業するといいです)
- サーバ秘密鍵用の乱数ファイルを作成する
$ openssl dgst -md5 /var/log/system.log > rand.dat
- サーバ秘密鍵を作成。 passwordはあとで削除するので適当でOK
$ openssl genrsa -des3 -rand rand.dat 1024 > server_key.pem
- サーバ秘密鍵のパスワードを削除。 Apache再起動のたびにpasswordが求められるため
$ openssl rsa -in server_key.pem -out server_key.pem
- 証明書署名要求(CSR)ファイルを作成
$ openssl req -new -key server_key.pem -out server_csr.pem
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:TOKYO
Locality Name (eg, city) []:TOKYO
Organization Name (eg, company) [Internet Widgits Pty Ltd]:adhocapp
Organizational Unit Name (eg, section) []:system
Common Name (e.g. server FQDN or YOUR name) []:[自分のPCのIPアドレス]
Email Address []:[自分のPCのIPアドレス]
A challenge password []:(入力なしでリターン)
An optional company name []:(入力なしでリターン)
- 自己署名証明書を作成
$ openssl req -days 3650 -in server_csr.pem -key server_key.pem -x509 -out crt.pem
- Apacheのフォルダにコピー
$ sudo cp server_key.pem /private/etc/apache2/server.key
$ sudo cp crt.pem /private/etc/apache2/server.crt
-
/private/etc/apache2/httpd.conf
の編集。ApacheでSSL通信を使えるようにする
※ /private/etc/apache2/httpd.conf
を別のフォルダにコピーして編集。編集後、元の場所にペースト。(セキュリティシステムが効いてて直接編集はできないため)
# LoadModule ssl_module libexec/apache2/mod_ssl.so
↓
LoadModule ssl_module /usr/libexec/apache2/mod_ssl.so
# LoadModule socache_shmcb_module libexec/apache2/mod_socache_shmcb.so
↓
LoadModule socache_shmcb_module /usr/libexec/apache2/mod_socache_shmcb.so
# El Capitanだとlibexec/apache2/xxxx.so は無くて(libexecフォルダがない)、すべて/usr/libexec/apache2フォルダ以下にある。
# libexec/apache2→/usr/libexec/apache2に全て置換でも良さそう。
# Secure (SSL/TLS) connections
# Include /private/etc/apache2/extra/httpd-ssl.conf
↓
Include /private/etc/apache2/extra/httpd-ssl.conf
-
/private/etc/apache2/extra/httpd-ssl.conf
を編集(httpd.conf
と同じように別フォルダで編集してもとの場所にペースト)。SSLサーバー証明書/秘密鍵の場所を指定。
# SSLCertificateFile "/private/etc/apache2/server.crt"
↓
SSLCertificateFile "/private/etc/apache2/server.crt"
# SSLCertificateKeyFile "/private/etc/apache2/server.key"
↓
SSLCertificateKeyFile "/private/etc/apache2/server.key"
ServerName [自分のPCのIPアドレス]:443
ServerAdmin hoge@[自分のPCのIPアドレス]
- MIME設定を更新する
デフォルトのままだとipa
とplist
のMIMEタイプがないのでそれを追記します。
/private/etc/apache2/mime.types
ファイルに以下を追記します。
拡張子 | MIMEの種類 |
---|---|
.ipa | application/octet-stream |
.plist | text/xml |
- Apacheを再起動
$ sudo apachectl restart
- ブラウザで、https://[自分のPCのIPアドレス]にアクセスして以下のような画面になったらOK
→「このWebサイトを閲覧」をクリックすると「It's Work!」が(デフォルトのままだと)表示されます。
自己署名SSL証明書をインストールする
最初に参考にさせていただいた記事では自己署名SSL証明書を、プロビジョニングプロファイルにしてインストールする手順が書かれていました。
が、iPhone構成ユーティリティアプリが現状使えないようなので別の方法でインストールする必要があります。
それにはもうひとつの記事を参考に解決しました。
前段で作成したサーバに配置した証明書(crt.pem
)を、いったんキーチェーンにインストールします。(ファイルダブルクリックするだけでOK)
すると、作成の際に指定したIPアドレスの名前でキーチェーンのリストに表示されます。
続くメニューでPEM形式を選択し書き出します。デフォルトでは[設定したIPアドレス].pem
という名前で書き出されます。
このファイルを、次で説明するHTMLにリンクを記述し、ダウンロードできる位置に配置します。
AdHoc配信用Webサイトを用意する
- インストールに必要なファイルへのリンクを記述したHTMLファイルを作成する(※ 後述)
- 作成したファイルを
Document////////////
フォルダに置く
3. HTMLファイル
4. ipaファイル
5. ipaのメタ情報を記述したplist
ファイル
6. オレオレサーバ証明書
7. アプリアイコン(512x512のpng画像)
8. ローディング中の画像(57x57のpng画像)
9. 自己署名SSL証明書(前述した、書き出したpem
ファイル)
HTMLを用意する
以下のように、各種ファイルへのリンクを記述したHTMLファイルを用意しドキュメントルートへ配置します。
<html>
<html lang="ja">
<meta charset="utf-8"/>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>For Adhoc App</title>
</head>
<body>
<div>
<h1>アプリ</h1>
<p><a href="itms-services://?action=download-manifest&url=https://[自分のIPアドレス]]/manifest.plist">インストール</a></p>
</div>
<div>
<h1>証明書</h1>
<p><a href="./[自分のIPアドレス].pem">証明書インストール</a></p>
</div>
</body>
</html>
インストール処理に必要なplist
ファイルを用意する
なお、ここで作成するplist
ファイルに誤りがあると、「xxx.xxx.xxx.xxxに接続できません」のようなエラーが出てインストール自体ができないので注意が必要です。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>items</key>
<array>
<dict>
<key>assets</key>
<array>
<dict>
<key>kind</key>
<string>software-package</string>
<key>url</key>
<string>https://(自分のPCのIPアドレス)/(Adhocのipaファイル).ipa</string>
</dict>
<dict>
<key>kind</key>
<string>display-image</string>
<!-- optional. ローディング中の画像。57×57-pixel PNG icon -->
<key>needs-shine</key>
<true/>
<key>url</key>
<string>https://(自分のPCのIPアドレス)/(ローディング中の画像57×57).png</string>
</dict>
<!-- full-size-image: 512x512 のpng画像。 -->
<dict>
<key>kind</key>
<string>full-size-image</string>
<key>needs-shine</key>
<true/>
<key>url</key>
<string>https://(自分のPCのIPアドレス)/( 512x512 の画像).png</string>
</dict>
</array>
<key>metadata</key>
<dict>
<key>bundle-identifier</key>
<!-- adhocアプリのバンドルID -->
<string>xxx.xxx.xxx</string>
<key>bundle-version</key>
<!-- adhocアプリのバージョン -->
<string>0.0.1</string>
<key>kind</key>
<string>software</string>
<key>title</key>
<!-- adhocアプリ名。イントールするときに表示される。-->
<string>Adhocアプリ</string>
</dict>
</dict>
</array>
</dict>
</plist>
※ 最初に参考にした記事では、plist
ファイルの最後の閉じタグ(</plist>
)がなく、エラーになっていたので加筆しています。
-
/private/etc/apache2/extra/httpd-ssl.conf
をもう一度編集(httpd.confと同じように別フォルダで編集してもとの場所にペースト)。WEBページ用のフォルダをDocumentRootにセット。
## DocumentRoot "/Library/WebServer/Documents"
↓
DocumentRoot "(WEBページ用のフォルダパス)"
- Apacheを再起動。なにか間違ってなければこれで準備完了
$ sudo apachectl restart
iPhone/iPadからAdhoc配信用Webサイト経由でアプリのインストール
-
上記でセットアップしたPCと同じネットワークのWi-FiにiPhone/iPadで接続し、証明書をインストールする
「証明書インストール」のリンクをタップすると以下のような画面が表示されるので「許可」を押します。
インストールを進めると証明書がインストールされますが、まだ「信頼」のチェックがオフのままなので、「証明書の信頼設定」からチェックをオンにします。
なお、信頼設定は設定アプリの「一般 > 情報 > 証明書信頼設定
」の中にあります。 -
Safariで再び
https://[自分のPCのIPアドレス]
にアクセスし、次はアプリのインストールのリンクをタップする
以上の手順でインストールすることができるようになります。
回線の帯域などによっては若干時間がかかる場合があるようです。