ios – 从embedded.mobileprovision配置文件获取证书到期日期

我需要使用命令行获取ipa的embedded.mobileprovision文件中使用的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.mobileprovision中取出,解码并将其保存到文件中或通过管道传递它.

如果我将sommand分开,我们得到以下结果:

一个.从embedded.mobileprovision中获取证书:

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

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

base64 -d encodedcert.b64 certificate.cer

C.用openssl阅读:

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

不幸的是,我的base64命令生成的certificate.cer文件是零字节长…

谁可以帮我进一步?

解决方法

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

问题是我的PlistBuddy命令错了.我应该使用’DeveloperCertificates:0’而不是’:DeveloperCertificates’.

我也不需要base64的东西.

因此,在embedded.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

分为三个部分:

>从embedded.mobileprovision获取一个plist:

security cms -D -i Payload/*.app/embedded.mobileprovision > tmp.plist

>从plist获得第一个证书:

/usr/libexec/PlistBuddy -c 'Print DeveloperCertificates:0' tmp.plist |

>读取通过管道传递的证书并提取enddate(-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

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...