這個證書就是MDM Server 和 APNs推送消息所須要的證書,固然和APP推送證書徹底不一樣,雖然功能差很少。python
MDM中分爲Vendor 和Customer兩個角色,即服務商和用戶。
若是你有個企業開發者帳號,沒錯就是$299的那個,你既能夠是Vendor,也能夠是Customer。做爲一個Vendor,你能夠爲Customer的證書請求文件頒發個用於簽名的證書。git
若是你僅僅是個Customer也就是沒有$299的帳號,只能等Vendor給你頒發個
.cer
證書、簽名產生個plist_encoded 文件,而後提交到identity.apple.com/pushcert/,若是文件不正確會提示格式錯誤,若正確會生成一個用於推送的證書mdm.pem
。github
如下以一個Vendor的角色進行如下操做。後端
默認的企業開發者帳號沒有開通MDM服務,須要申請開通MDM服務成爲Vendor,輸入企業帳號和密碼登陸,提示你填寫一些東西申請服務。若是你按要求填寫了,提交了,而後就是傻傻的等待了。當時我提交後一週後也沒反應,索性直接打電話人工客服,一分鐘搞定。若是開通成功後會發郵箱通知,而後在製做證書的時候會出現MDM CSR選項。以下:bash
.cer證書
,具體步驟以下打開鑰匙串生成mdm_vendor.certSigningRequest
app
導出祕鑰mdm_vendor.p12
記住導出密碼下面簽名時會用到ide
登陸開發者中心製做MDM CSR
類型的證書,下載即獲得證書mdm.cer
。此證書用來爲customer生成的.csr證書文件簽名。spa
####做爲一個customerdebug
終端中生成customer.csr
文件3d
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.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通訊就是需這個證書。
以上獲得了MDM_Certificate.pem
,那麼咱們獲得的這個是否是正確的呢?咱們能夠再終端中驗證一下:
openssl s_client -connect gateway.push.apple.com:2195 -cert MDM_Certificate.pem -key customerPrivateKey.pem -debug -showcerts -status
若是提示了錯誤,或鏈接直接closed則證書有問題。若是一直一直處於等待輸入狀態,輸入任意、退出則證書是有效的。
接下來幾乎網上全部的文章都是這樣的
雙擊MDM_Certificate.pem
安裝,查看證書信息如圖
其中用戶ID : com.apple.mgmt.External.*
這個很重要,在配置.mobileconfig文件要用到。
而後就沒了,還有人說直接導出爲.p12格式。可是爲啥個人安裝後根本導不出p12格式呢? 咱們是Java後臺因此須要p12格式的,這裏就須要進一步的格式轉化了。
在終端中:
openssl pkcs12 -export -in MDM_Certificate.pem -out MDM_Certificate.p12 -inkey customerPrivateKey.pem
MDM_Certificate.p12
。把證書和密碼交給咱們的後端人員,證書製做完成,是否是和APP的推送證書徹底不一樣?我感受徹底是兩個概念。