2009-09-21 2 views
16

Ich habe eine shed load von 'aps_developer_identity.cer' Zertifikate vom iPhone Developer Portal exportiert. Sie wurden alle mit derselben Zertifikatsignierungsanforderung und (demselben) privaten Schlüssel erstellt. Wenn ich nur den privaten Schlüssel aus der Apple Key Chain exportiere, ist es dann möglich, den privaten Schlüssel und die 'aps_developer_identity.cer' zu verwenden und openssl zu verwenden, um ein verschmolzenes p12/pkcs # 12 Zertifikat zu erstellen, das ich auf meinem (Windows) Server benutzen kann .aps_developer_identity.cer auf p12, ohne aus der Key Chain exportieren zu müssen?

Nur um klar zu sein, ich weiß, wie man einen zusammengeführten p12 aus der Schlüsselanhänger durch Exportieren sowohl des privaten Schlüssels und des Zertifikats zusammen, aber ich möchte alle zusätzlichen Mausklick und Tippen entfernen, wenn ich kann.

+0

"Sie wurden alle mit der gleichen Zertifikatsanforderung erstellt" - Warum? In diesem Fall würden sie alle den gleichen Namen erhalten, was ist der Zweck? – NoBugs

Antwort

35

Ich habe es geschafft, dies auszuarbeiten, es braucht nur in einem Shell-Skript und es ist gut zu gehen. Ich gehe davon aus, dass Sie Ihr Zertifikat 'apple_developer_identity.cer' heruntergeladen und umbenannt haben, hier verwende ich 'test.cer' und Sie haben auch Ihren Entwicklerschlüssel aus Ihrem Schlüsselbund exportiert, im folgenden Beispiel '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 

HINWEIS: Wenn Sie denken, dies alles ein bisschen außer Atem zu lange zu erreichen, was mit wenigen Mausklicks und der Eingabe des Namens einer Datei durchgeführt werden kann, dann wird der Fall betrachtet, wo man 20 Apps, die Sie möchte für Benachrichtigungen aktivieren. Jede App hat ein Entwicklungs- und Produktionszertifikat, welches in 4 bzw. 12 Monaten abläuft. Das ist ein sehr langweiliger und fehleranfälliger Job ...

+0

Woher kommt der "_CertificateSigningRequest.certSigningRequest"?Ich erinnere mich daran, diese Datei einmal am Anfang zu haben, als ich ein Dev-Cert erstellt habe. O_o –

+0

Es gibt detaillierte Anweisungen, wie man den CSR hier erstellt: http://jainmarket.blogspot.com/2009/11/generate-apple-push-notification .html Ich habe den Unterstrich zu meinem hinzugefügt, weil ich im selben Ordner wie alle meine anderen Zertifikate lebe und so ist es der erste in der Liste ... – withakay

+1

Das _CertificateSigningRequest.certSigningRequest Problem ist absolut unklar und muss erklärt werden. Der Link geht darauf nicht näher ein. Ich weiß, wie man einen mit Schlüsselbund erzeugt, bekomme aber ständig den Fehler "Kein Zertifikat entspricht dem privaten Schlüssel", wenn ich es im obigen Skript verwende ... warum? genau auf was certSigningRequest wird oben verwiesen? – Zigglzworth

4

Tolle Arbeit hier. Danke für die echte Hilfe Jungs. Ich habe unten mein Shell-Skript eingefügt, das anderen helfen könnte. Ich habe mehrere Schlüssel, mit denen ich mich beschäftigen muss und wollte auch ein Skript. Dieses Skript gibt statische Namen für die Ausgabedateien aus (obwohl das einfach geändert werden könnte).

Ich hoffe, es hilft jemand anderem.

Beispiel für die Verwendung (unter der Annahme Skriptnamen):

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

Das Skript:

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

Danke. Das war sehr hilfreich. –

-2

Sie können p12/PKCS # 12-Zertifikat direkt in Schlüsselbund machen. Keine Notwendigkeit, einen Befehl auszuführen.

1.Double Klick auf Ihrer Entwickler/Produktion cert-Datei von Apple dev Website heruntergeladen werden. (Es wird in Schlüsselbund hinzugefügt werden)

2.I annehmen, dass Sie P12-Datei, die Sie vom Export private Schlüssel bekamen

3. Wechseln Sie auf den Tab Meine Zertifikate unter dem Schlüsselbund.

klicken Sie einfach auf Ihrem dev/prod Zertifikat für APN.it sollte es

4.Right klicken und Export-Zertifikat in P12-Format

das ist letzte P12-Datei verknüpfen private Schlüssel zeigen !!

+0

Ich glaube nicht, dass Sie die Frage gelesen haben, bevor Sie diese Antwort gepostet haben. OP erklärt klar, dass sie KEY nicht verwenden möchten. – Jonathan