iOS開發 - 超級簽名實現之描述文件

来源:https://www.cnblogs.com/GarveyCalvin/archive/2019/10/23/ios-super-sign.html
-Advertisement-
Play Games

簡介 因為最近企業簽掉得太嚴重了,上頭要求實現超級簽進行游戲下載。故有了此文章,記錄一下過程。 簽名原理其實很簡單,超級簽名的技術就是使用個人開發者賬號,將用戶的設備當作開發設備進行應用分發。這也導致成本非常高,一個開發者賬號最多只能註冊一百台設備,然而一個賬號的價格為99美元。不過目前超級簽分發的 ...


簡介

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

簽名原理其實很簡單,超級簽名的技術就是使用個人開發者賬號,將用戶的設備當作開發設備進行應用分發。這也導致成本非常高,一個開發者賬號最多只能註冊一百台設備,然而一個賬號的價格為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 跳轉到已下載描述文件

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

  1. 蘋果開發者網站中下載對應的發佈描述文件;
  2. 把發佈描述文件部署在伺服器;
  3. web 訪問伺服器的發佈描述文件,如: http://***.com/embedded.mobileprovision

  4. Done。

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

參考文獻

Create GUIDs online

SSL Converter - Convert SSL Certificates to different formats

mobileconfig文件的簽名和認證(signed、verified)

iOS超級簽名

通過Safari瀏覽器獲取iOS設備UDID(設備唯一標識符)

聲明

博文作者:GarveyCalvin
博文出處:http://www.cnblogs.com/GarveyCalvin/
本文版權歸作者和博客園共有,歡迎轉載,但須保留此段聲明,並給出原文鏈接,謝謝合作!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.什麼是TICK技術棧? 1.1 簡介 "TICK" 是由 "InfluxData" 開發的一套開源工具棧,由 Telegraf, InfluxDB, Chronograf, Kapacitor 四個工具的首字母組成。 1.2 Telegraf "Telegraf" 是一個用Go語言開發的代理程式 ...
  • 簡介: Apache Ambari是一種基於Web的工具,支持Apache Hadoop集群的供應、管理和監控。Ambari已支持大多數Hadoop組件,包括HDFS、MapReduce、Hive、Pig、 Hbase、Zookeeper、Sqoop和Hcatalog等。 Apache Ambari ...
  • (1) 查看mysql資料庫是否為utf8(status) (2) 設置spoon (3) 文本打開spoon.bat,找到set OPT=%OPT% %PENTAHO_DI_JAVA_OPTIONS% 在這後面加上 "-Dfile.encoding=UTF-8" ...
  • spoon(kettle)連接Mysql和Oracle資料庫配置 ...
  • 出於對業務的不瞭解,往往會讓人做出錯誤的判斷 CREATE TABLE ( int(11) NOT NULL AUTO_INCREMENT COMMENT '客戶ID', varchar(250) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL CO ...
  • --創建表空間 CREATE TABLESPACE FSNEW DATAFILE 'E:\oracle\oracledata\oradata\FSNEW' SIZE 30GEXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M; --創建表空間 --查看當前用戶所有表 sel ...
  • Oracle資料庫的兩個欄位值為逗號分割的字元串,例如:欄位A值為“1,2,3,5”,欄位B為“2”。 想獲取兩個欄位的交集(相同值)2,獲取兩個欄位的差集(差異值)1,3,5。 ...
  • iOS 和 H5 頁面交互(WKWebview 和 UIWebview cookie 設置) 主要記錄關於cookie相關的坑 1. UIWebview 1. UIWebview 相對比較簡單 直接通過 NSHTTPCookieStorage 設置cookie就能實現。 代碼部分 2. 如果在第一次 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...