chuyển đổi khóa .p7b thành .pfx


10

Tôi có chứng chỉ SSL ở định dạng .p7b mà tôi cần chuyển đổi sang .pfx. Nếu tôi thử điều này thông qua quản lý chứng chỉ windows, tùy chọn cho chuyên gia là .pfx bị vô hiệu hóa.

Thử với openssl tôi đã tìm thấy hai lệnh sau để thực hiện chuyển đổi:

openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer
openssl pkcs12 -export -in certificate.cer -inkey privateKey.key -out certificate.pfx -certfile CACert.cer

nhưng tôi không chắc sử dụng khóa nào cho lệnh teh esecond hoặc chứng chỉ mà CACert.cer đề cập đến.

Làm cách nào để chuyển đổi khóa này sang định dạng .pfx?

Câu trả lời:


20

PKCS # 7 không bao gồm phần riêng tư (khóa) của cặp chứng chỉ / khóa riêng, nó thường được sử dụng để phổ biến chứng chỉ (ví dụ như phản hồi cho yêu cầu chứng chỉ PKCS # 10, như một phương tiện để phân phối S / MIME certs được sử dụng để mã hóa tin nhắn hoặc để xác thực các tin nhắn đã ký, v.v.). Điều quan trọng cần nhớ là nó chỉ dành cho các chứng chỉ theo định nghĩa các mục công khai.

PKCS # 12 là một thùng chứa phổ quát hơn - nó được dự định để lưu trữ cả khóa riêng và các bộ phận chứng chỉ chung với nhau để chúng có thể được di chuyển xung quanh. Nó có khả năng được bảo vệ bằng mật khẩu để cung cấp một số bảo vệ cho các phím.

PFX là tiền thân của PKCS # 12.

Bạn không thể (như Anitak chỉ ra) chuyển đổi từ PKCS # 7 sang PKCS # 12 mà không có dữ liệu bổ sung (phần khóa riêng) vì PKCS # 7 không có tất cả dữ liệu.

Mark Sutton đã chỉ ra lý do tại sao bạn không thể xuất dưới dạng PFX - chứng chỉ được đề cập có khóa riêng được gắn cờ là không thể xuất. Nhà cung cấp dịch vụ mật mã (CSP) sẽ không cho phép khóa đó được di chuyển, đây là cố ý. Cách * duy nhất bạn có thể nhận được cặp khóa cert \ có thể xuất là nếu Chứng chỉ gốc được cấp với bộ cờ có thể xuất được. Cũng có thể không có khóa riêng liên quan đến chứng chỉ nhưng tôi cho rằng đó không phải là trường hợp ở đây.

Có một bản tóm tắt tốt về các loại PKCS khác nhau trên Wikipedia .

  • Cách duy nhất hợp pháp ít nhất. Tùy thuộc vào Phần cứng CSP \ Crypto, có thể có các cơ chế, đặc biệt là đối với phần mềm chỉ có CSP, nhưng đó là lĩnh vực nghiên cứu lỗ hổng bảo mật chỉ khi tôi quan tâm chứ không phải quản trị viên hệ thống.

Cảm ơn - có vẻ như mua chứng chỉ mới có thể rẻ hơn so với việc khôi phục chứng chỉ, dựa trên lượng thời gian chúng tôi sẽ phải đối phó với bên thứ ba để thực hiện việc này.
DrStalker

12

Tôi trải qua điều này cứ sau 2 năm (khi tôi gia hạn chứng chỉ ký mã) và mỗi lần như vậy là một nỗi đau.

Một thông tin quan trọng là bạn chỉ cần đổi tên các tệp .p7b thành .spc (như đã nêu ở đây: http://support.microsoft.com/kb/269395 ).

Sau đó, bạn có thể sử dụng công cụ pvk2pfx.exe để chuyển đổi PVK + SPC của bạn thành PFX.

pvk2pfx.exe -pvk input.pvk -pi <existing_input.pvk_password> -spc input.spc -pfx output.pfx -po <new_output.pfx_password>

(bạn có thể bỏ qua bước đổi tên p7b và sử dụng trực tiếp; tôi chưa thử ...)


Điều này hữu ích hơn nhiều so với câu trả lời được chấp nhận. Tôi ngạc nhiên về tình trạng ký mã vô nghĩa. Tôi co rúm người khi nghĩ phải lặp đi lặp lại điều này khi chứng chỉ hết hạn.
Tim

3

Với công cụ windows nếu tùy chọn pfx bị tắt, điều đó có nghĩa là khóa riêng không thể xuất từ ​​cửa hàng cục bộ. Điều này là do nó không có ở đó (vì các khóa không được tạo trên hộp bạn đang sử dụng) hoặc vì khi bạn tạo các khóa, khóa riêng không được đánh dấu là có thể xuất được và mẫu chứng chỉ windows không được cấu hình để cho phép xuất.

Tôi giả sử bạn sử dụng cơ quan cấp chứng chỉ Microsoft để cấp chứng chỉ của mình. Điều này có đúng không?

Nếu vậy thì: -

1.Hãy chắc chắn rằng mẫu chứng chỉ cho phép xuất các khóa riêng.
2.Làm thế nào bạn tạo yêu cầu chứng chỉ của bạn, bạn có thể sử dụng các kỹ thuật sau đây

CREATE tập tin INF như sau

[Version]
Signature = "$ Windows NT $

[NewRequest]
Chủ đề =" vv"
KeySpec = 1
có thể xuất khẩu = 1
MachineKeySet = TRUE
ProviderName = "CSPName"
ProviderType = 1

[RequestAttributes] CertificateTemplate =

Chú ý các thể xuất khẩu = 1
Sau đó sử dụng các lệnh fllowing tại dấu nhắc lệnh

certreq -new infile.inf reqfile.req // trong đó infile.inf là tệp ở trên và reqfile là tệp yêu cầu đầu ra

certreq -submit -config \ reqfile.req // Gửi yêu cầu chứng nhận đến CA

Sau khi hoàn tất có thể xuất chứng chỉ dưới dạng pfx

Hoặc goto http://www.blacktipconsulting.com/Site/ Products.html nơi tôi đã đặt công cụ dòng lệnh miễn phí của mình, thực hiện tất cả điều này cho bạn và xuất chứng chỉ dưới dạng pfx sau khi hoàn tất


2

Như Helvick đã chỉ ra, phản hồi của PKCS10 là PKCS7 và nó không chứa khóa riêng. Vì vậy, trong khi tạo CSR, bạn nên tạo tệp privatekey.key. Bạn có thể sử dụng các lệnh sau. (Tôi biết đây là câu hỏi bốn năm tuổi nhưng tôi không thể làm điều đó trong khi theo dõi cuộc thảo luận trên trang).

openssl pkcs7 -inform DER -in PK7BDownloadedArchive.p7b -text -print_certs -out intermediateCert.pem

openssl pkcs12 -export -in intermediateCert.pem -inkey privateKey.key -out FinalPKCS12Cert.p12

Chúc may mắn!

Trân trọng, JE


Bạn có thể không cần -informtranh luận.
palswim

1

Tôi có thể sai, nhưng tôi nghĩ rằng tệp PCKCS # 7 của bạn chỉ bao gồm một nửa công khai chứng chỉ của bạn.

Tệp PKCS # 12 sẽ cần phải có cả hai nửa - do đó tại sao nó cần -inkeytùy chọn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.