2013-02-28 44 views
119

Tôi có OpenSSL x64 trên Windows 7 mà tôi đã tải xuống từ openssl-for-windows on Google Code. Tôi đang cố chạy:Chuyển chứng chỉ PKCS # 12 sang PEM bằng OpenSSL

openssl pkcs12 -export -in "path.p12" -out "newfile.pem" 

nhưng tôi gặp lỗi.

unable to load private key 

Làm cách nào để trích xuất chứng chỉ trong PEM từ kho PKCS # 12 bằng OpenSSL?

+0

Stack Overflow là trang web dành cho các câu hỏi lập trình và phát triển.Câu hỏi này dường như không có chủ đề vì nó không phải là về lập trình hay phát triển. Xem [Tôi có thể hỏi những chủ đề gì ở đây] (http://stackoverflow.com/help/on-topic) trong Trung tâm trợ giúp. Có lẽ [Super User] (http://superuser.com/) hoặc [Unix & Linux Stack Exchange] (http://unix.stackexchange.com/) sẽ là một nơi tốt hơn để hỏi. Ngoài ra, hãy xem [Tôi nên đăng câu hỏi về Dev Ops ở đâu?] (Http://meta.stackexchange.com/q/134306) – jww

+0

@jww Tôi nghĩ rằng câu hỏi này là hơn 3 tuổi rằng hơi muộn để báo hiệu cờ ngoài chủ đề. –

+0

Chỉ là một hình thức để mọi người biết chủ đề của nó. Mọi người đang hỏi cùng những câu hỏi ngoài chủ đề và trích dẫn câu hỏi này. Nếu mọi người không được nói với chủ đề ngoài của nó, thì họ sẽ tiếp tục hỏi về Stack Overflow. – jww

Trả lời

290

Hãy thử:

openssl pkcs12 -in path.p12 -out newfile.crt.pem -clcerts -nokeys 
openssl pkcs12 -in path.p12 -out newfile.key.pem -nocerts -nodes 

Sau đó bạn có:

  • chứng chỉ trong newfile.crt.pem
  • khóa riêng trong newfile.key.pem

Để đặt chứng chỉ và khóa trong cùng một tệp sử dụng

sau
openssl pkcs12 -in path.p12 -out newfile.pem 
+0

Có thể là khóa cá nhân và chứng chỉ sẽ được lưu trữ trong cùng một * .pem tệp? – Ramis

+12

vâng, đó là: 'openssl pkcs12 -in path.p12 -out newfile.pem' –

+2

yêu cầu nhập mật khẩu. đó là gì ? –

1

này sẽ làm việc với một tập tin .pem trong đó có chìa khóa cá nhân và chứng trong cùng một tệp (Tôi đã thử điều này với giấy chứng nhận Push Notification của Apple)

(PushNotif.pem chứa private key và cert trong một tập tin)

$ openssl pkcs12 -Xuất -in PushNotif.pem -inkey PushNotif.pem out PushNotif.p12
Nhập pass phrase cho PushNotif.pem:
Nhập khẩu Mật khẩu:
Xác minh - Nhập Mật khẩu Xuất:

Khi bạn nhập mật khẩu, bạn nên sử dụng.

+1

Điều này sẽ chuyển đổi PEM thành PKCS12 và không phải theo cách khác mà OP được hỏi. –

15

Bạn chỉ cần cung cấp mật khẩu. Bạn có thể làm điều đó trong cùng một dòng lệnh với cú pháp sau:

openssl pkcs12 -export -in "path.p12" -out "newfile.pem" -passin pass:[password] 

Sau đó, bạn sẽ được nhắc nhập mật khẩu để mã hóa khóa cá nhân trong tệp đầu ra của mình. Bao gồm các "nút" tùy chọn trong dòng trên nếu bạn muốn export các tin quan trọng được mã hóa (plaintext):

openssl pkcs12 -export -in "path.p12" -out "newfile.pem" -passin pass:[password] -nodes 

Thông tin thêm: http://www.openssl.org/docs/apps/pkcs12.html

9

Nếu bạn có thể sử dụng Python, nó thậm chí còn dễ dàng hơn nếu bạn có mô-đun pyopenssl. Ở đây là:

from OpenSSL import crypto 

# May require "" for empty password depending on version 

with open("push.p12", "rb") as file: 
    p12 = crypto.load_pkcs12(file.read(), "my_passphrase") 

# PEM formatted private key 
print crypto.dump_privatekey(crypto.FILETYPE_PEM, p12.get_privatekey()) 

# PEM formatted certificate 
print crypto.dump_certificate(crypto.FILETYPE_PEM, p12.get_certificate()) 
+0

Có lý do nào để mở tệp bằng cách sử dụng 'tệp' chứ không phải' mở' không? Tôi chỉ muốn hiểu nó như tôi sẽ sử dụng nó trong tương lai (để đơn giản hóa giải pháp của tôi gọi openssh như lệnh) –

+0

Không, không có sự khác biệt. Bạn chỉ có thể làm 'open (" push.p12 ", 'rb'). Read()'. – KVISH

0

Tôi đã có một tập tin PFX và cần thiết để tạo file KEY cho nginx, vì vậy tôi đã làm điều này:

openssl pkcs12 -in file.pfx -out file.key -nocerts -nodes 

Sau đó, tôi đã phải chỉnh sửa file KEY và loại bỏ tất cả nội dung lên đến -----BEGIN PRIVATE KEY-----. Sau đó NGINX chấp nhận tệp KEY.

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