はじめに
開発中のiOSアプリをOTAインストールするため、この記事を参考にオレオレ証明書でHTTPSサーバを構築したのですが
何点かつまづいたことがあったので備忘のため内容を残しておきます。
構築環境
HTTPSサーバ
- OS: Windows Server 2012 R2 Standard
- Webサーバ: IIS 6.2
証明書発行環境
- OS: MacOS Sierra
- OpenSSL: 1.0.2n
- easy-rsa: 3.0.4
iOS端末
- OS: 11.0.2
つまづいたこと
- 
ipaとmanifest.plistにアクセスできない 
- 
HTTPSで動作させているが、インストールリンクを開くと「xxxに接続できません」というエラーがでる 
- 
クライアントにインストールしたCA証明書の信頼設定ができない 
ipaとmanifest.plistにアクセスできない
これは調べたらすぐに分かりましたが、サーバ側のMIMEの設定が足りていなかったことが原因でした。
サーバに次のように設定をすることで解決しました。
| 拡張子 | MIMEの種類 | 
|---|---|
| .ipa | application/octet-stream | 
| .plist | text/xml | 
HTTPSで動作させているが、インストールリンクを開くと「xxxに接続できません」というエラーがでる
原因はいくつかあると思いますが、自分の場合はHTTPSサーバの設定が正しくされていないことが原因でした。
正しく設定できているかはSafariでは分かりづらいのでChromeで確認するのがオススメです。
Chromeの場合だとURLの左の鍵マークをタップするとエラー内容が表示されるので問題解決しやすいです。
足りなかった設定
- 
IPAのインストールの前にiOS端末にオレオレCAの証明書をインストールする 
 参考にした記事では証明書をインストールするためのプロビジョニングプロファイルを作成してインストールを行っていましたが、
 証明書をPEM形式などでエクスポートしてSafariからアクセスすることでもインストールすることができました。
- 
iOS端末でインストールしたCA証明書を証明書信頼設定で信頼の置けるCAだと設定する 
 インストール後そのままだとオレオレCAで発行したサーバ証明書は自動的に信頼されない。
 設定アプリを開き、
一般>証明書信頼設定
を開くと先ほどインストールした証明書が表示されているのでトグルスイッチをONに設定する。
- CA証明書のCN(コモンネーム)はHTTPSサーバのFQDNかIPアドレスを設定する
 証明書を発行する際にCNを入力するがこれが実際のサーバの値と異なるとブラウザ側でエラーとなる。
 エラーを回避するためには同じ値を入れること。
 例)サーバのIPアドレスが192.168.10.5だったらCNに192.168.10.5を入力する
 そうしないと、Safariでは分かりづらいがChromeでは下記のようにエラーとなる。
   
クライアントにインストールしたCA証明書の信頼設定ができない
IISに搭載している機能を使ってもオレオレ証明書を作ることができるがこの場合、CNだけ値が入ることになり他のorganization情報は空になる。
この場合証明書をiOS端末にインストールしたとしても証明書信頼設定に何も出てこない状態になる。
easy-rsaで証明書を作る場合はデフォルトでorganization情報が省略になるため注意が必要。
設定するためにはvarの
#set_var EASYRSA_DN "org"
のコメントアウトを外してやれば設定できるようになる
