Edited at

iOS 構成プロファイルの署名

とりあえず初めに

署名されている = 信頼できる安全なものってわけではない事に注意

署名済みプロファイルを入れさせようとするフィッシングサイトも出てきています。

佐川急便を騙り、デバイス登録チャレンジペイロードを含むプロファイル。

一般的にはMDM(iOSの遠隔監視ツール)の登録をさせようとするもの。

インストールを完了させなくても、デバイス情報をサーバに送る場合があります。というか送る仕様のプロファイル。

Apple Developerの証明書による署名をしているため、検証済みとなってしまっています。



やっぱプロファイルインストール禁止設定入れておこうね!


Apple Configurator 2を用いた署名


  • [ファイル]→「プロファイルに署名...」を選択して、署名IDを選択。













  • 組織識別情報を作成している場合は、それを用いて署名が可能。


    • ただし自己署名ルート証明書となり、iOS側では未検証となる。


      • iOSに信頼済み証明書として登録することで回避できるが、不特定多数への配布に向かない。





  • 署名を削除する場合は、[ファイル]→「プロファイルの署名を削除」を選択。




Apple Configurator 2で署名ができない場合

前項の「署名ID」で証明書が出てこなくて署名ができない場合

署名するためには鍵用途(Key Usage)に「デジタル署名(Digital Signature)」が含まれていないとリストに出てこない様子。

なのでオレオレ証明書とかでプロファイルに署名をしたい場合は、そのように作るか、次項のOpenSSLを使って署名する。

なお、俺々証明書を作る場合はXCA使えば楽かも知れない。

っていうかもうちょっとイイ感じのPKI管理は無いものか。。。


OpenSSLを用いた署名

macOS Sierra, OpenSSL 0.9.8zh 14 Jan 2016

$ openssl smime -sign -nodetach \

-signer [証明書].cer \
-inkey [秘密鍵].key \
-in [未署名プロファイル入力元].mobileconfig \
-out [署名プロファイル出力先].mobileconfig \
-outform der


SSL証明書を用いてOpenSSLで署名

有効な証明書を用いれば、検証済みプロファイルとして扱われる。

(Let's Encryptでも可能だが、有効期限が短いため使いづらいか)

その場合は、チェーン証明書を追加する必要がある。

$ openssl smime -sign -nodetach \

-signer [証明書].cer \
-inkey [秘密鍵].key \
-certfile [チェーン証明書].cer
-in [未署名プロファイル入力元].mobileconfig \
-out [署名プロファイル出力先].mobileconfig \
-outform der


プロファイル毎のiPhone上での表示


  • 未署名




    インストール中に「未署名のプロファイル:このプロファイルは署名されていません」の警告

  • 自己署名







    インストール中に「未検証のプロファイル:"[プロファイル名]"の真正性を確認できません」の警告

  • SSL証明書







個人的まとめ

あくまで、プロファイルを署名することの目的は「作成者の明示」と「改竄の防止」である。プロファイルの中身が信頼できるものであることを保証するものではない。

正規の証明書で署名することで、インストール時の赤字表示や警告を無くすことができ、プロファイル自体の改ざんを防ぐ事が可能ではある。

だが、証明書の有効期限が切れてしまった場合はiOS側で期限切れの警告表示となり、警告を消すためだけに更新作業を行ったり、期限切れ警告を無視するよう利用者に案内することを考慮すると最初から署名しない選択肢もアリなのかもしれない。

各キャリアのメールやWi-Fiのプロファイル、MVNO各社のAPNプロファイルも未署名だし、一概に無署名は悪、信頼署名が正義って事でも無い。


よく調べていないこと

署名されたプロファイルの更新は、同一の証明書(もしくは同一CN)で署名されたものでのみ更新が可能っぽいが試していない。

プロファイル識別子が同一であっても、未署名or異なる署名のプロファイルで更新を試みた場合は「先にプロファイルを削除してください」と警告が出て更新ができない。

意図しないプロファイルの差し替えを防ぐ仕様として好ましいのではあるが、YJSNPIのような不正プロファイルが署名されていたら手の打ちようがなくなる。


おまけ

署名はあくまで署名なので、メールやWi-Fi、VPNのパスワード類はすべて平文のまま。

パスワードを伏せるのであれば、暗号化プロファイルの利用を。

正式に署名して運用をする場合は、オレオレ証明書やSSL証明書ではなくサイニング証明書を使うべき。普通のSSL証明書を使ってしまうと用途外利用で怒られるかもしれない。