1. 程式人生 > 程式設計 >iOS 超級簽名之描述檔案的實現過程

iOS 超級簽名之描述檔案的實現過程

簡介

因為最近企業籤掉得太嚴重了,上頭要求實現超級籤進行遊戲下載。故有了此文章,記錄一下過程。

簽名原理其實很簡單,超級簽名的技術就是使用個人開發者賬號,將使用者的裝置當作開發裝置進行應用分發。這也導致成本非常高,一個開發者賬號最多隻能註冊一百臺裝置,然而一個賬號的價格為99美元。不過目前超級籤分發的應用穩定性很高,不用再像企業籤那樣經常掉籤。

新建 .mobileconfig 描述檔案

該描述檔案用於獲取使用者裝置的UDID,使用者通過某個點選操作下載此檔案,安裝後伺服器會收到該使用者裝置的 UDID 回撥事件。

<?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>PayloadContent</key>
 <dict>
  <key>URL</key>
  <string>https://[你的伺服器地址].com/resource/uploadUUID.do</string> <!--接收資料的介面地址-->
  <key>DeviceAttributes</key>
  <array>
  <string>UDID</string>
  <string>IMEI</string>
  <string>ICCID</string>
  <string>VERSION</string>
  <string>PRODUCT</string>
  </array>
 </dict>
 <key>PayloadOrganization</key>
 <string>xxx.xxx.com</string> <!--組織名稱-->
 <key>PayloadDisplayName</key>
 <string>查詢裝置UDID</string> <!--安裝時顯示的標題-->
 <key>PayloadVersion</key>
 <integer>1</integer>
 <key>PayloadUUID</key>
 <string>c156f2f8-fc42-4260-8fc5-8644861d8293</string> <!--自己隨機填寫的唯一字串,http://www.guidgen.com/ 可以生成-->
 <key>PayloadIdentifier</key>
 <string>xxx.xxx.profile-service</string>
 <key>PayloadDescription</key>
 <string>本檔案僅用來獲取裝置ID</string> <!--描述-->
 <key>PayloadType</key>
 <string>Profile Service</string>
 </dict>
</plist>

註冊開發者裝置及簽名包體

由於時間太趕,這裡註冊開發者裝置及簽名包體採用的都是三方提供的服務,因此沒有細節提供,但是怎樣去做還是可以說一下的。

我們可以藉助Spaceship工具完成註冊新的開發者裝置和更新Provisioning Profile,簽名包體可以用Sigh框架,具體實現請自行搜尋。

最後使用者下載的方式與企業籤的一樣,使用itms-services協議進行下載。

ssl 簽名 .mobileconfig 配置檔案

我看了很多文章,都是用開發者證書去簽名的,可是我弄了好久,死活從“未簽名”變成了“”尚未驗證“,當時一度絕望了好長時間。從 iPhone 配置實用工具 2.2 到 iPhone 配置實用工具 3.5,皆不成功。

配置檔案是可以使用的,雖然說安裝時會提示紅色字“尚未驗證”,看起來不太安全之外,一切安好。可是要有追求啊,別人能做到的東西,那就是肯定能做的。

ssl 證書籤名配置檔案是知道的,可是向後端人員要證書檔案的時候一度受到了困擾,所以前期擱置了好久,直到其它的方法都被我試過了,都不行之後,只好繼續調研 ssl 證書籤名配置檔案。

踩完無數的坑之後,這裡介紹一種親測可用的方法,使用 ssl 證書進行配置檔案的簽名。我是看這篇文章實現的為iOS的mobileconfig配置檔案進行簽名。

很簡單,需要三個檔案,三行命令,完成。

$ openssl smime -sign -in unsigned.mobileconfig -out signed.mobileconfig -signer mbaike.crt -inkey mbaike.key -certfile ca-bundle.pem -outform der -nodetach
$ openssl rsa -in mbaike.key -out mbaikenopass.key
$ openssl smime -sign -in unsigned.mobileconfig -out signed.mobileconfig -signer mbaike.crt -inkey mbaikenopass.key -certfile ca-bundle.pem -outform der -nodetach

這裡耗時主要是在等運維人員提供相關證書檔案,千萬別給錯了,否則很難 Debug。

下載描述檔案後不能自動跳轉到安裝介面

在 iOS 12.2 上蘋果做了改動,下載完後需要使用者手動進行安裝。點選 設定 —— 已下載描述檔案,會自動彈出描述檔案安裝介面,點選右上角安裝即可。

官方說明點這兒在 iPhone 或 iPad 上安裝配置描述檔案。

利用 .mobileprovision 跳轉到已下載描述檔案

這是為了方便使用者不需手動找描述檔案並安裝,可以直接跳過去,省去使用者操作。

  • 從蘋果開發者網站中下載對應的釋出描述檔案;
  • 把釋出描述檔案部署在伺服器;
  • web 訪問伺服器的釋出描述檔案,如: http://***.com/embedded.mobileprovision
  • Done。

當執行第三步後,會自動跳轉至描述檔案。

參考文獻

Create GUIDs online

SSL Converter - Convert SSL Certificates to different formats

mobileconfig檔案的簽名和認證(signed、verified)

iOS超級簽名

通過Safari瀏覽器獲取iOS裝置UDID(裝置唯一識別符號)

總結

以上所述是小編給大家介紹的iOS 超級簽名實現之描述檔案的實現過程,希望對大家有所幫助,也非常感謝大家對我們網站的支援!