Closed6

mdmcert.downloadでMDMプッシュ証明書を手で(opensslコマンドで)作ってみる

Yusuke IwakiYusuke Iwaki

micromdmのmdmcertコマンドを実際に実行してみると...

$ ./mdmctl mdmcert.download -new -email=ひみつ
├── mdmcert.download.pki.crt
├── mdmcert.download.pki.key
├── mdmcert.download.push.csr
├── mdmcert.download.push.key

この4ファイルが作られる。
mdmcert.downloadの、ファイル暗号化のための鍵(これがおそらくmdmcert.download.pki.)と、プッシュ証明書に使われる証明書(これがおそらくmdmcert.download.push.)とが作られている?

具体的なAPIリクエストは↓

POST https://mdmcert.download/api/v1/signrequest

{
  key: f847aea2ba06b41264d587b229e2712c89b1490a1208b7ff1aafab5bb40d47bc,
  email: Eメールアドレス,
  csr: mdmcert.download.push.csrをbase64エンコードしたもの,
  encrypt: mdmcert.download.pki.crtをbase64エンコードしたもの,
}

となってそう。

Yusuke IwakiYusuke Iwaki
openssl genrsa -out push.key 2048
openssl req -sha256 -new -key push.key -out push.csr -subj "/C=JP/O=oreore-org/CN=oreore-mdm"
$ tree
.
├── push.csr
├── push.key
├── server.crt
├── server.csr
└── server.key
$ jo key=f847aea2ba06b41264d587b229e2712c89b1490a1208b7ff1aafab5bb40d47bc email="ひみつだ@ひみつ.com" csr=$(base64 -i push.csr) encrypt=$(base64 -i server.crt) | http POST https://mdmcert.download/api/v1/signrequest
HTTP/1.1 200 OK
Connection: keep-alive
Content-Length: 21
Content-Type: application/json
Date: Mon, 20 Feb 2023 02:40:40 GMT
Server: nginx

{
    "result": "success"
}

メールが飛んできた!

Yusuke IwakiYusuke Iwaki

送られてきたplist.b64.p7、中身はこんな数字の羅列。

hex文字列をbinaryに復元して、s/mimeの復号をすればよさそう。

./mdmctl mdmcert.download -decrypt=/Users/yusuke-iwaki/Downloads/mdm_signed_request.20230219_181248_1529.plist.b64.p7

これで出来上がる mdmcert.download.push.req を見てみると、base64エンコードされた状態。

cat ~/Downloads/mdm_signed_request.20230219_184040_1530.plist.b64.p7  | xxd -r -p > mdm_signed_request.20230219_184040_1530.plist.p7
openssl smime -decrypt -inform der -in mdm_signed_request.20230219_184040_1530.plist.p7 -inkey server.key > push_signed.req
Yusuke IwakiYusuke Iwaki

MDM_ McMurtrie Consulting LLC_Certificate.pem というファイルがダウンロードできる。

Yusuke IwakiYusuke Iwaki

まとめると

暗号化用のキーペアなどをつくる。

openssl genrsa -out server.key 4096
openssl req -sha256 -new -key server.key -out server.csr -subj "/CN=oreore-mdm"
openssl x509 -req -sha256 -days 365 -in server.csr -signkey server.key -out server.crt

プッシュ証明書用のCSRを作る

openssl genrsa -out push.key 2048
openssl req -sha256 -new -key push.key -out push.csr -subj "/C=JP/O=oreore-org/CN=oreore-mdm"

mdmcert.downloadにリクエスト

$ jo key=f847aea2ba06b41264d587b229e2712c89b1490a1208b7ff1aafab5bb40d47bc email="ひみつだ@ひみつ.com" csr=$(base64 -i push.csr) encrypt=$(base64 -i server.crt) | http POST https://mdmcert.download/api/v1/signrequest
HTTP/1.1 200 OK
Connection: keep-alive
Content-Length: 21
Content-Type: application/json
Date: Mon, 20 Feb 2023 02:40:40 GMT
Server: nginx

{
    "result": "success"
}

メールで送られてきた mdm_signed_request.20230219_184040_1530.plist.b64.p7 みたいなファイルを復号

cat ~/Downloads/mdm_signed_request.20230219_184040_1530.plist.b64.p7  | xxd -r -p > mdm_signed_request.20230219_184040_1530.plist.p7
openssl smime -decrypt -inform der -in mdm_signed_request.20230219_184040_1530.plist.p7 -inkey server.key > push_signed.req

あとは、push_signed.reqをApple Push Certificate Portalにアップロード。いえい

このスクラップは2023/02/20にクローズされました