2009-09-21 11 views
16

Ho un capannone carico di certificati 'aps_developer_identity.cer' esportati dal portale per sviluppatori iPhone. Sono stati tutti creati utilizzando la stessa richiesta di firma del certificato e (quindi) la stessa chiave privata. Se esporto solo la chiave privata dalla catena chiave Apple, è quindi possibile prendere la chiave privata e 'aps_developer_identity.cer' e usare openssl per creare un certificato p12/pkcs # 12 unito che posso usare sul mio server (Windows) .aps_developer_identity.cer a p12 senza dover esportare dalla catena chiave?

Giusto per essere chiari, so come ottenere un p12 unito dalla catena chiave esportando sia la chiave privata che il certificato insieme, ma voglio rimuovere tutti i clic del mouse extra e digitare se posso.

+0

"Sono stati tutti creati utilizzando la stessa richiesta di firma del certificato" - Perché? In tal caso verrebbero tutti nominati con lo stesso nome comune, qual è lo scopo di questo? – NoBugs

risposta

35

Sono riuscito a capirlo, ha solo bisogno di essere inserito in uno script di shell ed è bello andare. Suppongo che tu abbia scaricato e rinominato il tuo certificato 'apple_developer_identity.cer', qui uso 'test.cer' e che tu abbia esportato la chiave dello sviluppatore dal tuo portachiavi, nell'esempio sotto chiamato '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 

NOTA: Se si pensa che tutto questo un po 'lungo senza fiato per raggiungere ciò che può essere fatto con un paio di clic del mouse e la tipizzazione del nome di un file, quindi prendere in considerazione il caso in cui si dispone di 20 applicazioni che si vuoi abilitare per le notifiche. Ogni App ha un certificato di sviluppo e produzione, che scade rispettivamente in 4 e 12 mesi. Questo è un lavoro molto noioso e soggetto a errori ...

+0

da dove proviene "_CertificateSigningRequest.certSigningRequest"?Ricordo di aver avuto questo file una volta all'inizio quando creavo un c o cert O_o –

+0

Ci sono istruzioni dettagliate su come creare il CSR qui: http://jainmarket.blogspot.com/2009/11/generate-apple-push-notification .html Ho aggiunto il carattere di sottolineatura al mio perché tengo nella stessa cartella di tutti i miei altri certificati e in questo modo è il primo nell'elenco ... – withakay

+1

Il problema _CertificateSigningRequest.certSigningRequest è assolutamente non chiaro e deve essere spiegato. Il link non si approfondisce su questo. So come produrne uno con il portachiavi ma ricevo costantemente l'errore "Nessun certificato corrisponde alla chiave privata" quando lo uso nello script sopra ... perché? esattamente a cosa si riferisce certSigningRequest in quanto sopra? – Zigglzworth

4

Lavoro fantastico qui. Grazie per il vero aiuto ragazzi. Ho inserito il mio script di shell qui sotto che potrebbe aiutare gli altri. Ho molte chiavi da trattare e volevo anche una sceneggiatura. Questo script genererà nomi statici per i file di output (anche se sarebbe semplice da modificare).

Spero che aiuti qualcun altro.

esempio di utilizzo (assumendo il nome dello script):

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

Lo script:

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

Grazie. Questo è stato estremamente utile. –

-2

È possibile effettuare P12/certificato PKCS # 12 direttamente nel portachiavi. Non c'è bisogno di eseguire alcun comando.

1.double click sul file cert sviluppatore/produzione scaricato dal sito Apple dev. (Sarà aggiunto nel portachiavi)

2.I assumere avete p12, che avete ottenuto da esportazione chiave privata

3. passare alla scheda I miei certificati sotto portachiavi.

Basta cliccare sulla vostra dev/certificato di prod per APN.it dovrebbe mostrare chiave privata ad esso associati

4.Right cliccare e certificato di esportazione in formato .p12

questo è finale del file .p12 !!

+0

Non penso che tu abbia letto la domanda prima di pubblicare questa risposta. OP afferma chiaramente che NON vogliono usare Keychain. – Jonathan