2009-09-21 4 views
16

iPhone Developer portalından ihraç edilen 'aps_developer_identity.cer' sertifikalarının bir yükleme yükümlü var. Hepsi aynı Sertifika İmzalama İsteği ve (dolayısıyla) aynı özel anahtar kullanılarak oluşturuldu. Eğer sadece özel anahtarını Apple Key Chain'dan ihraç edersem, o zaman özel anahtar ve 'aps_developer_identity.cer' almak mümkün olur ve benim (Windows) sunucusunda kullanabileceğim birleştirilmiş p12/pkcs # 12 sertifikası oluşturmak için openssl'i kullanabilir miyim? .aps_developer_identity.cer?

Açık olması gerekirse, hem özel anahtarı hem de sertifikayı birlikte dışa aktararak Anahtar Zincir'den birleştirilmiş p12'yi nasıl elde edeceğimi biliyorum, ancak ekleyebileceğim tüm fazladan fareyi ve yazmayı kaldırmak istiyorum.

+0

"Hepsi aynı Sertifika İmzalama İsteği kullanılarak oluşturuldu" - Neden? Bu durumda hepsi aynı ortak isimle adlandırılacaklardı, bunun amacı nedir? – NoBugs

cevap

35

Bunu başarmayı başardım, sadece bir kabuk komut dosyasına sarılmaya ihtiyacı var ve gitmek güzel. 'apple_developer_identity.cer' sertifikanızı indirip yeniden adlandırdığınızı, burada 'test.cer' kullandığımı ve geliştirici anahtarınızı anahtar zincirinizden ihraç ettiğinizi varsayarak, 'private_dev_key.p12' adlı aşağıdaki örnekte olduğunu varsayıyorum.

#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 

NOT: Bu tüm biraz uzun, birkaç fare tıklaması ve bir dosyanın adının yazarak neler yapılabileceğini başarmak o zaman 20 Apps durumu dikkate soluklu düşünüyorsanız o sen bildirimler için etkinleştirmek istiyorum. Her Uygulama, sırasıyla 4 ve 12 ayda süren bir geliştirme ve üretim sertifikasına sahiptir. Bu çok sıkıcı ve hataya eğilimli bir iştir ...

+0

"_CertificateSigningRequest.certSigningRequest" nereden geliyor?Bu dosyayı en başından beri bir dev Cert oluştururken hatırlıyorum O_o –

+0

Burada CSR'nin nasıl oluşturulacağına dair ayrıntılı talimatlar bulunmaktadır: http://jainmarket.blogspot.com/2009/11/generate-apple-push-notification .html Altçizgi ekledim çünkü tüm diğer belgelerim ile aynı klasörde kaldım ve bu şekilde listedeki ilk ... – withakay

+1

_CertificateSigningRequest.certSigningRequest sorunu kesinlikle belirsizdir ve açıklanması gerekir. Link bunun üzerinde durmuyor. Bir anahtarlık ile nasıl üretileceğini biliyorum ama yukarıdaki betikte kullandığımda sürekli "Hata özel anahtarla eşleşmiyor" hatasını alıyorum ... neden? tam olarak yukarıdaki certSigningRequest'e atıfta bulunuluyor mu? Son komut için – Zigglzworth

4

Harika iş burada. Gerçek yardım için teşekkürler. Aşağıda kabuk kabuğuma başkalarına yardımcı olabilecek bir yere düştüm. Benimle uğraşmak için birkaç anahtarım var ve bir senaryo da istedim. Bu betik, çıktı dosyaları için statik adlar çıkarır (ancak değiştirilmesi kolay olur).

Umarım başkasına yardım eder. (Script adını varsayarak)

örnek kullanımı:

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

senaryo:

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

Teşekkür ederim. Bu derece yararlı oldu. –

-2

Sen anahtarlıkta doğrudan p12/PKCS # 12 sertifika yapabilirsiniz. Herhangi bir komutun çalıştırılmasına gerek yoktur.

elma dev sitesinden indirilen geliştirici/üretim sertifika dosyası üzerinde

1.Double tıklayın. (Bu anahtarlıkta ilave olacak)

2.I varsayalım size özel anahtarı ihraç döndüm .p12 dosyası var 3. Anahtarlıklar altındaki 3. Sertifikalarım sekmesine gidin.

sadece son .p12 dosyası şu .p12 biçimine

özel tıklayarak 4.Right o

ilişkili anahtar ve İhracat sertifikası göstermelidir APN.it için dev/prod sertifikası tıklayın !!

+0

Bu cevabı göndermeden önce soruyu okuduğunuzu düşünmüyorum. OP, Anahtarlık kullanmak istemediklerini açıkça belirtir. – Jonathan