iOS MDM詳解(2)— 證書的製作
簡介
這個證書就是MDM Server 和 APNs推送訊息所需要的證書,當然和APP推送證書完全不同,雖然功能差不多。
MDM中分為Vendor 和Customer兩個角色,即服務商和使用者。
如果你有個企業開發者賬號,沒錯就是$299的那個,你既可以是Vendor,也可以是Customer。作為一個Vendor,你可以為Customer的證書請求檔案頒發個用於簽名的證書。
如果你僅僅是個Customer也就是沒有$299的賬號,只能等Vendor給你頒發個
.cer
證書、簽名產生個plist_encoded 檔案,然後提交到identity.apple.com/pushcert/,如果檔案不正確會提示格式錯誤,若正確會生成一個用於推送的證書mdm.pem
。
以下以一個Vendor的角色進行以下操作。
1、 開通MDM服務功能
預設的企業開發者賬號沒有開通MDM服務,需要申請開通MDM服務成為Vendor,輸入企業賬號和密碼登入,提示你填寫一些東西申請服務。如果你按要求填寫了,提交了,然後就是傻傻的等待了。當時我提交後一週後也沒反應,索性直接打電話人工客服,一分鐘搞定。如果開通成功後會發郵箱通知,然後在製作證書的時候會出現MDM CSR選項。如下:
2、生成MDM證書
作為一個vendor首先要生成個用於簽名的.cer證書
,具體步驟如下
-
開啟鑰匙串生成
mdm_vendor.certSigningRequest
-
匯出祕鑰
mdm_vendor.p12
-
登入開發者中心製作
MDM CSR
型別的證書,下載即得到證書mdm.cer
。此證書用來為customer生成的.csr證書檔案簽名。
####作為一個customer
-
終端中生成
customer.csr
檔案openssl genrsa -des3 -out customerPrivateKey.pem 2048 openssl req -new -key customerPrivateKey.pem -out customer.csr 複製程式碼
或者利用鑰匙串生成,然後以.csr字尾儲存,然後匯出祕鑰.p12格式並記住密碼
-
提交
customer.csr
對customer.csr
簽名
關於customer.csr
檔案的簽名網上普遍有兩種方法,一個Python指令碼,一個時Java版的Softthinker,在此使用Python指令碼。
Python指令碼原始碼,使用過程中可能由於Mac中python版本有問題,無法下載所需的AppleIncRootCertificate.cer
和AppleWWDRCA.cer
這兩個官方提供的 證書。所以改了下指令碼,直接把證書檔案下載到本地。
根據要求需要把 mdm_vendor.p12
轉化為 mdm_vendor.key
格式的:
openssl pkcs12 -in mdm_vendor.p12 -nocerts -out mdm_vendor.key
複製程式碼
然後在終端中執行以下操作
python mdm_vendor_sign.py
--key mdm_vendor.key
--csr customer.csr
--mdm mdm.cer
--root AppleIncRootCertificate.cer
--WWDR AppleWWDRCA.cer
複製程式碼
執行過程中提示輸入密碼密碼,結束,目錄下多出一個"plist_encoded"的簽名檔案。 執行結果如圖:
——————
我的目錄檔案截圖:
我用於簽名的Python檔案為了方便操作在原始檔的基礎上做了些修改。
到identity.apple.com/pushcert/ 提交 生成的plist_encoded
檔案,如果檔案有問題會提示無效的檔案,如果一切正常會生成我們最後需要的MDM_Certificate.pem
的證書,以後server和APNs通訊就是需這個證書。
3、驗證MDM_Certificate.pem證書有效性並進行格式轉化
以上得到了MDM_Certificate.pem
,那麼我們得到的這個是不是正確的呢?我們可以再終端中驗證一下:
openssl s_client -connect gateway.push.apple.com:2195 -cert MDM_Certificate.pem -key customerPrivateKey.pem -debug -showcerts -status
如果提示了錯誤,或連線直接closed則證書有問題。如果一直一直處於等待輸入狀態,輸入任意、退出則證書是有效的。
接下來幾乎網上所有的文章都是這樣的
![image](https://img.796t.com/image/2019/12/24/13/MDM_Certificate.png)
雙擊MDM_Certificate.pem
安裝,檢視證書資訊如圖
![證書-使用者ID](https://img.796t.com/image/2019/12/24/13/MDM_Certificate2.png)
其中使用者ID : com.apple.mgmt.External.*
這個很重要,在配置.mobileconfig檔案要用到。
然後就沒了,還有人說直接匯出為.p12格式。但是為啥我的安裝後根本導不出p12格式呢? 我們是Java後臺所以需要p12格式的,這裡就需要進一步的格式轉化了。
在終端中:
openssl pkcs12 -export -in MDM_Certificate.pem -out MDM_Certificate.p12 -inkey customerPrivateKey.pem
4、至此得到和APNs通訊的證書MDM_Certificate.p12
。
把證書和密碼交給我們的後端人員,證書製作完成,是不是和APP的推送證書完全不同?我感覺完全是兩個概念。