2009-09-21 6 views
16

J'ai une hangar charge des certificats 'aps_developer_identity.cer' exportés depuis le portail iPhone Developer. Ils ont tous été créés en utilisant la même demande de signature de certificat et (par conséquent) la même clé privée. Si j'exporte juste la clé privée de la Key Chain Apple, il est alors possible de prendre la clé privée et 'aps_developer_identity.cer' et d'utiliser openssl pour créer un certificat p12/pkcs # 12 fusionné que je peux utiliser sur mon serveur (Windows) . Pour être clair, je sais comment obtenir un p12 fusionné à partir de la chaîne principale en exportant à la fois la clé privée et le certificat, mais je veux supprimer tous les clics et les saisies de souris supplémentaires si je le peux.aps_developer_identity.cer à p12 sans avoir à exporter à partir de Key Chain?

+0

"Ils ont tous été créés en utilisant la même demande de signature de certificat" - Pourquoi? Dans ce cas, ils porteraient tous le même nom commun, à quoi cela sert-il? – NoBugs

Répondre

35

J'ai réussi à résoudre ce problème, il suffit de l'emballer dans un script shell et c'est bon à faire. Je suppose que vous avez téléchargé et renommé votre certificat 'apple_developer_identity.cer', ici j'utilise 'test.cer', et que vous avez également exporté votre clé de développeur de votre trousseau, dans l'exemple ci-dessous nommé '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 

NOTE: Si vous pensez que tout cela un peu longue haleine pour obtenir ce qui peut être fait en quelques clics de souris et la saisie du nom d'un fichier, puis considérer le cas où vous avez 20 Apps que vous vouloir activer pour les notifications. Chaque application dispose d'un certificat de développement et de production, qui expire respectivement dans 4 et 12 mois. C'est un travail très ennuyeux et sujet aux erreurs ...

+0

D'où vient le "_CertificateSigningRequest.certSigningRequest"?Je me souviens avoir eu ce fichier une fois au tout début lors de la création d'un cert de développement O_o –

+0

Il y a des instructions détaillées sur la façon de créer le CSR ici: http://jainmarket.blogspot.com/2009/11/generate-apple-push-notification .html J'ai ajouté le trait de soulignement au mien parce que je garde dans le même dossier que tous mes autres certs et ainsi c'est le premier dans la liste ... – withakay

+1

Le problème _CertificateSigningRequest.certSigningRequest est absolument peu clair et doit être expliqué. Le lien ne précise pas cela. Je sais comment en produire un avec le trousseau mais je reçois constamment l'erreur "Aucun certificat ne correspond à la clé privée" quand je l'utilise dans le script ci-dessus ... pourquoi? exactement ce que certSigningRequest est mentionné dans ce qui précède? – Zigglzworth

4

Un travail impressionnant ici. Merci pour l'aide réelle les gars. J'ai laissé tomber dans mon script shell ci-dessous qui peut aider les autres. J'ai plusieurs des clés à gérer et je voulais un script aussi. Ce script affichera des noms statiques pour les fichiers de sortie (bien que cela soit simple à modifier).

J'espère que ça aide quelqu'un d'autre.

exemple d'utilisation (en supposant le nom du script):

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

Le 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

Merci. C'était extrêmement utile. –

-2

Vous pouvez faire P12/PKCS # 12 certificat directement dans le trousseau. Pas besoin d'exécuter une commande.

cliquez sur votre 1.Double fichier cert développeur/production téléchargé à partir du site dev Apple. (Il va être ajouté dans le trousseau)

2.I suppose que vous avez le fichier .p12 que vous avez obtenu d'exporter la clé privée

3.Accédez à l'onglet Mon certificat sous le trousseau.

Cliquez simplement sur votre dev/certificat prod pour APN.it devrait montrer la clé privée associée à

4.Right cliquez et le certificat d'exportation dans le format .p12

fichier final des thats p12 !!

+0

Je ne pense pas que vous avez lu la question avant de poster cette réponse. OP déclare clairement qu'ils ne veulent pas utiliser Keychain. – Jonathan

Questions connexes