Cách xuất chuỗi chứng chỉ CA từ PFX ở định dạng PEM mà không cần thuộc tính túi


31

Tôi có tệp PKCS12 chứa chuỗi chứng chỉ đầy đủ và khóa riêng. Tôi cần chia nó thành 3 tệp cho một ứng dụng. 3 tệp tôi cần như sau (ở định dạng PEM):

  • một tệp khóa không được mã hóa
  • một tập tin chứng chỉ khách hàng
  • một tệp chứng chỉ CA (root và tất cả các trung gian)

Đây là một nhiệm vụ phổ biến tôi phải thực hiện, vì vậy tôi đang tìm cách để thực hiện việc này mà không cần chỉnh sửa thủ công đầu ra.

Tôi đã thử như sau:

openssl pkcs12 -in <filename.pfx> -nocerts -nodes -out <clientcert.key>
openssl pkcs12 -in <filename.pfx> -clcerts -nokeys -out <clientcert.cer>
openssl pkcs12 -in <filename.pfx> -cacerts -nokeys -chain -out <cacerts.cer>

Điều này hoạt động tốt, tuy nhiên, đầu ra chứa các thuộc tính túi mà ứng dụng không biết cách xử lý.

Sau một số tìm kiếm, tôi tìm thấy một giải pháp được đề xuất là chuyển các kết quả qua x509 để loại bỏ các thuộc tính túi.

openssl x509 -in <clientcert.cer> -out <clientcert.cer>

Điều này hoạt động, nhưng tôi gặp phải một vấn đề trên tập tin cacert. Tệp đầu ra chỉ chứa một trong 3 certs trong chuỗi.

Có cách nào để tránh bao gồm các thuộc tính túi trong đầu ra của lệnh pkcs12 hoặc cách để có đầu ra lệnh x509 bao gồm tất cả các chứng chỉ? Ngoài ra, nếu chạy nó qua x509 là giải pháp đơn giản nhất, có cách nào để chuyển đầu ra từ pkcs12 sang x509 thay vì viết ra tệp hai lần không?

Câu trả lời:


36

Giải pháp cuối cùng tôi đã đưa ra là dẫn nó qua sed.

openssl pkcs12 -in <filename.pfx> -nocerts -nodes | sed -ne '/-BEGIN PRIVATE KEY-/,/-END PRIVATE KEY-/p' > <clientcert.key>
openssl pkcs12 -in <filename.pfx> -clcerts -nokeys | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > <clientcert.cer>
openssl pkcs12 -in <filename.pfx> -cacerts -nokeys -chain | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > <cacerts.cer>

Cảm ơn! Điều này giúp tôi tiết kiệm thời gian hôm nay! ;-)
Jim P.

Cảm ơn bạn rất nhiều!
PaulJ
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.