2009-09-21 38 views
16

Tôi có một tải kho của chứng chỉ 'aps_developer_identity.cer' được xuất từ ​​cổng Nhà phát triển iPhone. Tất cả chúng đều được tạo ra bằng cách sử dụng cùng một Yêu cầu ký chứng chỉ và (do đó) cùng một khóa riêng. Nếu tôi chỉ xuất khóa riêng tư từ chuỗi khóa Apple thì có thể lấy khóa riêng và 'aps_developer_identity.cer' và sử dụng openssl để tạo chứng chỉ p12/pkcs # 12 đã hợp nhất mà tôi có thể sử dụng trên máy chủ (Windows) của mình . Chỉ cần rõ ràng, tôi biết cách lấy p12 hợp nhất từ ​​Chuỗi khóa bằng cách xuất cả khóa cá nhân và chứng chỉ cùng nhau, nhưng tôi muốn xóa tất cả nhấp chuột và nhập thừa nếu tôi có thể.aps_developer_identity.cer đến p12 mà không phải xuất từ ​​Chuỗi khóa?

+0

"Tất cả đều được tạo bằng cách sử dụng cùng một Yêu cầu ký chứng chỉ" - Tại sao? Trong trường hợp đó, tất cả chúng sẽ được đặt tên cùng tên chung, mục đích của điều này là gì? – NoBugs

Trả lời

35

Tôi đã quản lý để làm việc này, nó chỉ cần gói trong một kịch bản trình bao và nó là tốt để đi. Tôi giả sử bạn đã tải xuống và đổi tên chứng chỉ 'apple_developer_identity.cer' của mình, ở đây tôi sử dụng 'test.cer' và bạn cũng đã xuất khóa nhà phát triển của mình từ keychain, trong ví dụ bên dưới có tên '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 

LƯU Ý: Nếu bạn nghĩ rằng tất cả điều này một chút hơi dài để đạt được những gì có thể được thực hiện với một vài cú click chuột và gõ tên của một tập tin, sau đó xem xét trường hợp bạn có 20 Apps mà bạn muốn bật thông báo. Mỗi ứng dụng có chứng chỉ phát triển và sản xuất, sẽ hết hạn sau 4 tháng và 12 tháng. Đó là một công việc rất nhàm chán và dễ bị lỗi ...

+0

"_CertificateSigningRequest.certSigningRequest" xuất phát từ đâu?Tôi nhớ có tập tin này một lần ngay từ đầu khi tạo ra một chứng chỉ dev O_o –

+0

Có hướng dẫn chi tiết về cách tạo CSR tại đây: http://jainmarket.blogspot.com/2009/11/generate-apple-push-notification .html Tôi đã thêm dấu gạch dưới để khai thác vì tôi giữ trong cùng một thư mục với tất cả các chứng chỉ khác của tôi và cách đó là thư mục đầu tiên trong danh sách ... – withakay

+1

Vấn đề _CertificateSigningRequest.certSigningRequest hoàn toàn không rõ ràng và cần được giải thích. Liên kết không giải thích về điều này. Tôi biết làm thế nào để sản xuất một với keychain nhưng liên tục nhận được lỗi "Không có chứng chỉ phù hợp với khóa riêng" khi tôi sử dụng nó trong kịch bản trên ... tại sao? chính xác những gì certSigningRequest đang được đề cập đến ở trên? – Zigglzworth

4

Làm việc tuyệt vời ở đây. Cảm ơn những người giúp đỡ thực sự. Tôi đã bỏ tập lệnh shell bên dưới để có thể giúp người khác. Tôi có một số chìa khóa để giải quyết và cũng muốn có một kịch bản. Kịch bản lệnh này sẽ xuất các tên tĩnh cho các tệp đầu ra (mặc dù điều đó sẽ đơn giản để thay đổi).

Tôi hy vọng nó sẽ giúp người khác.

ví dụ sử dụng (giả sử tên script):

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

Kịch bản:

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

Cảm ơn bạn. Điều này cực kỳ hữu ích. –

-2

Bạn có thể làm p12/PKCS # 12 giấy chứng nhận trực tiếp trong keychain. Không cần thực hiện bất kỳ lệnh nào.

nhấp chuột 1.double trong hồ sơ cert nhà phát triển/sản xuất của bạn được tải về từ trang web của apple dev. (Nó sẽ được bổ sung trong keychain)

2.I giả sử bạn có đuôi .p12 tập tin mà bạn nhận được từ xuất khẩu khóa riêng

3. chuyển đến tab Chứng chỉ của tôi dưới hình thức khóa.

chỉ cần nhấp vào dev/Giấy chứng nhận sản của bạn cho APN.it sẽ hiển thị khóa bí mật liên kết với nó

4.Right bấm và giấy chứng nhận xuất khẩu ở đuôi .p12 định dạng

thats thức đuôi .p12 tập tin !!

+0

Tôi không nghĩ rằng bạn đã đọc câu hỏi trước khi đăng câu trả lời này. OP nêu rõ rằng họ KHÔNG muốn sử dụng Keychain. – Jonathan

Các vấn đề liên quan