2015-04-22 13 views
6

Potrzebuję uzyskać datę wygaśnięcia naszego certyfikatu przedsiębiorstwa iOS Enterprise używanego w pliku embedded.mobileprovision ipa za pomocą wiersza polecenia.Uzyskaj datę wygaśnięcia certyfikatu z profilu obsługi embedded.mobileprovision

Mam to do tej pory:

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 

Odpowiedź:

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 polecenie działa na naszym pliku certyfikatu tylko drobne:

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

Więc co ja brakuje tego, pobierając certyfikat z embedded.mobileprovision, dekoduje go i zapisuje w pliku lub przekazuje go za pomocą potoków.


Gdybym podzielić Sommand się, otrzymujemy następujące:

a. Uzyskaj certyfikat z embedded.mobileprovision:

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

b. Odkodować pobrany plik base64 do pliku .cer:

base64 -d encodedcert.b64 certificate.cer 

c. Przeczytaj go z OpenSSL:

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

Niestety, wygenerowany plik certificate.cer przez moją komendą base64 jest długa zerowe bajty ...

Kto może mi dalej pomóc?

Odpowiedz

9

Udało mi się uzyskać informacje o certyfikacie.

Problem polegał na tym, że moje polecenie PlistBuddy było nieprawidłowe. Powinienem użyć "DeveloperCertificates: 0" zamiast ": DeveloperCertificates".

Nie potrzebowałem również rzeczy Base64.

Więc poleceń pracy, aby uzyskać informacje z certyfikatem przedsiębiorstw w profilu embedded.mobileprovision jest

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 

podzielony na trzy części:

  1. Get plist z osadzone.mobileprovision:

    security cms -D -i Payload/*.app/embedded.mobileprovision > tmp.plist 
    
  2. Pobierz pierwszy certyfikat z plist:

    /usr/libexec/PlistBuddy -c 'Print DeveloperCertificates:0' tmp.plist | 
    
  3. Czytaj certyfikat przekazany przez rurę i wyodrębnić ENDDATE (-text zamiast -enddate daje całą informacje o certyfikacie):

    openssl x509 -inform DER -noout -enddate 
    

Edytuj: Oto polecenie bez tymczasowego pliku plist:

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