2009-09-21 8 views
16

Mam rzucić ładunek z certyfikatów "aps_developer_identity.cer" wyeksportowanych z portalu iPhone Developer. Wszystkie zostały utworzone przy użyciu tego samego żądania podpisania certyfikatu i (w ten sposób) tego samego klucza prywatnego. Jeśli wyeksportuję tylko klucz prywatny z Apple Key Chain, wówczas możliwe będzie pobranie klucza prywatnego i "aps_developer_identity.cer" i użycie openssl do stworzenia scalonego certyfikatu p12/pkcs # 12, którego mogę użyć na moim serwerze (Windows) .aps_developer_identity.cer do p12 bez eksportowania z Key Chain?

Dla jasności, wiem, jak uzyskać scalone p12 z łańcucha kluczy, eksportując jednocześnie klucz prywatny i certyfikat, ale chcę usunąć wszystkie dodatkowe kliknięcia myszką i pisanie, jeśli mogę.

+0

"Wszystkie zostały utworzone przy użyciu tego samego żądania podpisania certyfikatu" - Dlaczego? W takim przypadku wszyscy nazwaliby się tym samym pospolitym nazwiskiem, jaki jest cel tego? – NoBugs

Odpowiedz

35

Udało mi się to rozwiązać, po prostu trzeba zawinąć w skrypcie powłoki i dobrze jest iść. Zakładam, że pobrałeś i zmieniłeś nazwę swojego certyfikatu "apple_developer_identity.cer", tutaj używam "test.cer", a także, że wyeksportowałeś swój klucz programisty ze swojego pęku kluczy, w poniższym przykładzie o nazwie "private_dev_key.p12".

#convert *.cer (der format) to pem 
openssl x509 -in test.cer -inform DER -out test.pem -outform PEM 

#convert p12 private key to pem (requires the input of a minimum 4 char password) 
openssl pkcs12 -nocerts -out private_dev_key.pem -in private_dev_key.p12 

# if you want remove password from the private key 
openssl rsa -out private_key_noenc.pem -in private_key.pem 

#take the certificate and the key (with or without password) and create a PKCS#12 format file 
openssl pkcs12 -export -in test.pem -inkey private_key_noenc.pem -certfile _CertificateSigningRequest.certSigningRequest -name "test" -out test.p12 

UWAGA: Jeśli uważasz, że to wszystko jest trochę długo zdyszany, aby osiągnąć to, co można zrobić za pomocą kilku kliknięć myszką i wpisywanie nazwy pliku, a następnie rozważyć przypadek, gdy masz 20 Aplikacje, które chcesz włączyć powiadomienia. Każda aplikacja ma certyfikat rozwoju i produkcji, który wygasa odpowiednio za 4 i 12 miesięcy. To bardzo nudna i podatna na błędy praca ...

+0

skąd pochodzi "_CertificateSigningRequest.certSigningRequest"?Pamiętam posiadanie tego pliku raz na samym początku podczas tworzenia certyfikatu dev O_o –

+0

Istnieją szczegółowe instrukcje, jak utworzyć CSR tutaj: http://jainmarket.blogspot.com/2009/11/generate-apple-push-notification .html Dodałem podkreślnik do kopalni, ponieważ przechowuję go w tym samym folderze co wszystkie moje inne certyfikaty iw ten sposób jest on pierwszy na liście ... – withakay

+1

Problem _CertificateSigningRequest.certSigningRequest jest całkowicie niejasny i należy go wyjaśnić. Link nie wyjaśnia tego. Wiem, jak stworzyć taki z pękiem kluczy, ale ciągle otrzymuję komunikat "Brak certyfikatu pasuje do klucza prywatnego", gdy używam go w powyższym skrypcie ... dlaczego? dokładnie to, do czego odnosi się certyfikat certSigningRequest w powyższym? – Zigglzworth

4

Niesamowita praca tutaj. Dzięki za pomoc dla prawdziwych facetów. Poniżej zamieściłem poniższy skrypt powłoki, który może pomóc innym. Mam kilka kluczy, którymi chciałbym się zająć i również chciałem napisać scenariusz. Ten skrypt wypisze statyczne nazwy dla plików wyjściowych (choć byłoby to łatwe do zmiany).

Mam nadzieję, że pomoże to komuś innemu.

przykład użycia (zakładając nazwę skryptu):

$ . thisScript request_file.cer priv_key.p12 aps_dev.cer

Skrypt:

if [ $# -ne 3 ] 
then 
echo "Error in $0 - Invalid Argument Count" 
echo "Syntax: $0 request_cer_file p12_file app_cer_file output_filename" 
echo " - request_cer_file  is the request file you sent to apple" 
echo " - p12_file   is found in your keychain (it's the private key)" 
echo " - app_cer_file   is found on App ID screen from Apple" 
else 

reqFile=$1 
p12File=$2 
cerFile=$3 

certPEM='apn_cert.pem' 
pKeyPEM='apn_pkey.pem' 
pKeyNoEncPEM='apn_pkey_noenc.pem' 
p12FileOut='apn_cert_key.p12' 

# remove old 
rm $certPEM 
rm $pKeyPEM 
rm $pKeyNoEncPEM 
rm $p12FileOut 

#convert *.cer (der format) to pem 
openssl x509 -in $cerFile -inform DER -out $certPEM -outform PEM 

#convert p12 private key to pem (requires the input of a minimum 4 char password) 
openssl pkcs12 -nocerts -out $pKeyPEM -in $p12File 

# if you want remove password from the private key 
openssl rsa -out $pKeyNoEncPEM -in $pKeyPEM 

#take the certificate and the key (with or without password) and create a PKCS#12 format file 
openssl pkcs12 -export -in $certPEM -inkey $pKeyNoEncPEM -certfile $reqFile -name "apn_identity" -out $p12FileOut 

# 
# 
# If all things worked then the following should work as a test 
# openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert apn_cert.pem -key apn_pkey_noenc.pem 
# 
# 
echo "Looks like everything was successful" 
echo "Test command:" 
echo "openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert apn_cert.pem -key apn_pkey_noenc.pem" 
echo 
fi 
+0

Dziękuję. To było niezwykle pomocne. –

-2

Można dokonać P12/certyfikat PKCS # 12 bezpośrednio w pęku kluczy. Nie trzeba wykonywać żadnych poleceń.

1.double kliknięcie pliku cert deweloper/produkcja pobranego ze strony apple dev. (To będzie dodana w pęku kluczy)

2.I że masz .p12 plik, który dostał od eksportu klucza prywatnego

3. Przejdź do karty Moje certyfikaty w pęku kluczy.

właśnie powinien pokazać klucz prywatny skojarzony z nim

4.Right kliknij i świadectwa wywozowego w formie

.p12 kliknięciu dev/zaświadczenia prod dla APN.it ów końcowego .p12 pliku !!

+0

Nie sądzę, abyś przeczytał to pytanie przed opublikowaniem tej odpowiedzi. OP wyraźnie stwierdza, że ​​NIE chcą używać Keychain. – Jonathan

Powiązane problemy