1. 程式人生 > IOS開發 >iOS MDM詳解(2)— 證書的製作

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選項。如下:

MDM_CSR.png

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

    檔案 給vendor 進行簽名處理。

customer.csr簽名

關於customer.csr檔案的簽名網上普遍有兩種方法,一個Python指令碼,一個時Java版的Softthinker,在此使用Python指令碼。

Python指令碼原始碼,使用過程中可能由於Mac中python版本有問題,無法下載所需的AppleIncRootCertificate.cerAppleWWDRCA.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"的簽名檔案。 執行結果如圖:

MDM_SIGN.png

——————

我的目錄檔案截圖:

MDM_RESULT.png

我用於簽名的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

雙擊MDM_Certificate.pem安裝,檢視證書資訊如圖

證書-使用者ID

其中使用者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的推送證書完全不同?我感覺完全是兩個概念。