从 embedded.mobileprovisioning 预配配置文件中获取证书到期日期



我需要使用命令行获取 ipa 的 embedded.mobileprovisioning 文件中使用的 iOS 企业证书的到期日期。

到目前为止,我已经有了这个:

security cms -D -i Payload/*.app/embedded.mobileprovision > tmp.plist && /usr/libexec/PlistBuddy -c 'Print :DeveloperCertificates' tmp.plist | base64 -d - | openssl x509 -inform DER -noout -text

回应:

Apr 22 12:28:47 c01892 base64[14721] <Info>: Read 510 bytes.
Apr 22 12:28:47 c01892 base64[14721] <Info>: Wrote 680 bytes.
Apr 22 12:28:47 c01892 base64[14721] <Info>: Read 510 bytes.
Apr 22 12:28:47 c01892 base64[14721] <Info>: Wrote 680 bytes.
Apr 22 12:28:47 c01892 base64[14721] <Info>: Read 440 bytes.
Apr 22 12:28:47 c01892 base64[14721] <Info>: Wrote 588 bytes.
unable to load certificate
14722:error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag:/SourceCache/OpenSSL098/    OpenSSL098-52.20.2/src/crypto/asn1/tasn_dec.c:1323:
14722:error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error:/SourceCache/    OpenSSL098/OpenSSL098-52.20.2/src/crypto/asn1/tasn_dec.c:379:Type=X509

openssl 命令可以很好地处理我们的证书文件:

openssl x509 -inform DER -noout -text -in "iPhone Distribution: XXXX.cer"

所以我缺少的是将证书从 embedded.mobileprovisioning 中取出,对其进行解码并将其保存到文件中或通过管道传递。


如果我把索曼德分开,我们会得到以下内容:

a. 从

embedded.mobileprovisioning 中获取证书:

security cms -D -i Payload/*.app/embedded.mobileprovision > tmp.plist && /usr/libexec/PlistBuddy -c 'Print :DeveloperCertificates' tmp.plist > encodedcert.b64

b. 将检索到的 base64 解码为.cer文件:

base64 -d encodedcert.b64 certificate.cer

c. 用openssl阅读:

openssl x509 -inform DER -noout -text -in certificate.cer

不幸的是,我的 base64 命令生成的证书.cer文件长度为零字节......

谁能进一步帮助我?

我已经成功地获得了证书信息。

问题是我的PlistBuddy命令是错误的。我应该使用"开发人员证书:0"而不是":D证书"。

我也不需要base64的东西。

因此,从嵌入式.mobileprovision配置文件中的企业证书获取信息的工作命令行是

security cms -D -i Payload/*.app/embedded.mobileprovision > tmp.plist && /usr/libexec/PlistBuddy -c 'Print DeveloperCertificates:0' tmp.plist | openssl x509 -inform DER -noout -enddate

分为三个部分:

  1. 从 embedded.mobileprovisioning 获取 plist:

    security cms -D -i Payload/*.app/embedded.mobileprovision > tmp.plist
    
  2. 从 plist 中获取第一个证书:

    /usr/libexec/PlistBuddy -c 'Print DeveloperCertificates:0' tmp.plist |
    
  3. 读取通过管道传递的证书并提取结束日期(-text 而不是 -enddate 为您提供完整的证书信息):

    openssl x509 -inform DER -noout -enddate
    

编辑:这是没有临时plist文件的命令:

 /usr/libexec/PlistBuddy -c 'Print DeveloperCertificates:0' /dev/stdin <<< $(security cms -D -i Payload/*.app/embedded.mobileprovision) | openssl x509 -inform DER -noout -enddate

相关内容

  • 没有找到相关文章

最新更新