Làm thế nào để chuyển đổi tệp .pfx sang kho khóa với khóa riêng?


107

Tôi cần ký ứng dụng Android ( .apk).
Tôi có .pfxtập tin. Tôi đã chuyển đổi nó thành .certệp qua Internet Explorer và sau đó chuyển đổi .cersang .keystoresử dụng keytool. Sau đó, tôi đã cố gắng đăng nhập .apkbằng jarigner nhưng nó nói rằng .keystore không chứa khóa cá nhân.

Tôi đang làm gì sai?


Điều này có thể hữu ích: làm thế nào tôi có thể tìm và chạy keytool cho Windows stackoverflow.com/questions/5488339/...
Peter Barbanyaga

Câu trả lời:


259

Sử dụng JDK 1.6 trở lên

Justin đã chỉ ra trong các bình luận bên dưới rằng một mình keytool có thể thực hiện điều này bằng cách sử dụng lệnh sau (mặc dù chỉ trong JDK 1.6 trở lên):

keytool -importkeystore -srckeystore mypfxfile.pfx -srcstoretype pkcs12 
-destkeystore clientcert.jks -deststoretype JKS

Sử dụng JDK 1.5 trở xuống

OpenSSL có thể làm tất cả. Câu trả lời này trên JGuru là phương pháp tốt nhất mà tôi tìm thấy cho đến nay.

Trước hết hãy đảm bảo rằng bạn đã cài đặt OpenSSL . Nhiều hệ điều hành đã được cài đặt nó như tôi tìm thấy với Mac OS X.

Hai lệnh sau chuyển đổi tệp pfx sang định dạng có thể được mở dưới dạng kho khóa Java PKCS12:

openssl pkcs12 -in mypfxfile.pfx -out mypemfile.pem
openssl pkcs12 -export -in mypemfile.pem -out mykeystore.p12 -name "MyCert"

LƯU Ý rằng tên được cung cấp trong lệnh thứ hai là bí danh của khóa của bạn trong kho khóa mới.

Bạn có thể xác minh nội dung của kho khóa bằng tiện ích Java keytool bằng lệnh sau:

keytool -v -list -keystore mykeystore.p12 -storetype pkcs12

Cuối cùng, nếu cần, bạn có thể chuyển đổi kho này thành kho khóa JKS bằng cách nhập kho khóa đã tạo ở trên vào kho khóa mới:

keytool -importkeystore -srckeystore mykeystore.p12 -destkeystore clientcert.jks -srcstoretype pkcs12 -deststoretype JKS

28
không có nhu cầu cho tất cả ba bước, chỉ cần chạy: keytool -importkeystore -srckeystore mykeystore.pxf -destkeystore clientcert.jks -srcstoretype pkcs12 -deststoretype JKS
JustinMorris

Tôi nghĩ rằng các phiên bản cũ hơn của keytool sẽ không cho phép bạn làm điều đó. Tôi nhớ rằng 8 năm trước, tôi phải chạy openssl nhưng bây giờ với keytool trong Oracle JDK 6 và 7, nó hoạt động như một sự quyến rũ, giống như Justin đã nói.
David Brossard

2
Xin lưu ý rằng tôi đã đưa ra câu trả lời đó ở dạng đơn giản hơn và chi tiết hơn trước Justin một năm.
gjpc

@gjpc Đã lưu ý. Câu trả lời của bạn rất đầy đủ và xứng đáng nhận được nhiều phiếu bầu :)
MikeD

Đây thực sự là một câu trả lời tuyệt vời và nó đã cứu tôi sau nhiều ngày nghiên cứu. Câu trả lời này thực sự xứng đáng với nhiều lượt ủng hộ hơn nữa. Cảm ơn ngài.
Mythul

22

jarigner có thể sử dụng tệp pfx của bạn làm kho khóa để ký vào jar của bạn. Đảm bảo rằng tệp pfx của bạn có khóa cá nhân và chuỗi chứng chỉ khi bạn xuất nó. Không cần phải chuyển đổi sang các định dạng khác. Bí quyết là lấy Bí danh của tệp pfx của bạn:

 keytool -list -storetype pkcs12 -keystore your_pfx_file -v | grep Alias

Sau khi bạn có bí danh của mình, việc ký rất dễ dàng

jarsigner.exe -storetype pkcs12 -keystore pfx_file jar_file "your alias"

Hai lệnh trên sẽ nhắc bạn nhập mật khẩu bạn đã chỉ định khi xuất pfx. Nếu bạn muốn có mật khẩu của bạn treo ra trong việc sử dụng văn bản rõ ràng các -storepass chuyển đổi trước khi -keystore switch

Sau khi đã ký, hãy chiêm ngưỡng tác phẩm của bạn:

jarsigner.exe -verify -verbose -certs  yourjarfile

1
1 không cần phải chuyển đổi các tập tin keystore (Tôi có nó trong định dạng đủ rồi!)
Trejkaz

22

Tôi tìm thấy này trang mà cho bạn biết làm thế nào để nhập khẩu một PFX để JKS (Java chính Store):

keytool -importkeystore -srckeystore PFX_P12_FILE_NAME -srcstoretype pkcs12 -srcstorepass PFX_P12_FILE -srcalias SOURCE_ALIAS -destkeystore KEYSTORE_FILE -deststoretype jks -deststorepass PASSWORD -destalias ALIAS_NAME

3
Đây sẽ là câu trả lời đầy đủ!
JustAGuy

Tôi đang tìm kiếm một câu trả lời như câu này - với tên bí danh
dùng3437460

Tôi có một vấn đề, pfx không có mật khẩu, -srcstorepassvấn đề của tôi cũng vậy . PFX này được tạo bởi một ứng dụng khách LetsEncrypt cho Windows
FiruzzZ

2

Tệp PFX của bạn phải chứa khóa riêng bên trong nó. Xuất khóa cá nhân và chứng chỉ trực tiếp từ tệp PFX của bạn (ví dụ: sử dụng OpenSSL) và nhập chúng vào kho khóa Java của bạn.

Biên tập

Thêm thông tin:

  • Tải xuống OpenSSL cho Windows tại đây .
  • Xuất khóa cá nhân: openssl pkcs12 -in filename.pfx -nocerts -out key.pem
  • Giấy chứng nhận xuất khẩu: openssl pkcs12 -in filename.pfx -clcerts -nokeys -out cert.pem
  • Nhập khóa cá nhân và chứng chỉ vào kho khóa Java bằng cách sử dụng keytool.

bạn có thể vui lòng cho tôi biết làm cách nào để nhập key.pem và cert.pem bằng keytool không?
Sad Al Abdullah

1
Thêm một phần nhỏ: bạn phải thêm -nodes vào cuối khi xuất ky private
morgan_il

2

Justin (ở trên) là chính xác. Tuy nhiên, hãy nhớ rằng tùy thuộc vào người bạn lấy chứng chỉ từ ai (CA trung gian, CA gốc có liên quan hay không) hoặc cách pfx được tạo / xuất, đôi khi chúng có thể bị thiếu chuỗi chứng chỉ. Sau khi Nhập, Bạn sẽ có chứng chỉ kiểu PrivateKeyEntry, nhưng với chuỗi có độ dài là 1.

Để khắc phục điều này, có một số tùy chọn. Tùy chọn dễ dàng hơn trong tâm trí tôi là nhập và xuất tệp pfx trong IE (chọn tùy chọn Bao gồm tất cả các chứng chỉ trong chuỗi). Quá trình nhập và xuất chứng chỉ trong IE sẽ rất dễ dàng và được ghi chép lại ở những nơi khác.

Sau khi xuất, hãy nhập kho khóa như Justin đã chỉ ở trên. Bây giờ, bạn sẽ có một kho khóa với chứng chỉ kiểu PrivateKeyEntry và với độ dài chuỗi chứng chỉ lớn hơn 1.

Một số ứng dụng khách dịch vụ Web dựa trên .Net đã xảy ra lỗi (không thể thiết lập mối quan hệ tin cậy), nếu bạn không làm như trên.


Điều này dường như không hoạt động trên IE11. Nó không thể bao gồm chuỗi chứng chỉ mặc dù tôi đang nói với nó. Tôi biết điều này đã có hiệu quả trong quá khứ.
Brian Knoblauch

0

Nếu bạn làm việc với JDK 1.5 hoặc thấp hơn, tiện ích keytool sẽ không có -importkeystoretùy chọn (xem tài liệu về keytool JDK 1.5 ) và giải pháp của MikeD sẽ chỉ khả dụng bằng cách chuyển .pfxtrên máy có JDK mới hơn (1.6 trở lên).

Một tùy chọn khác trong JDK 1.5 trở xuống (nếu bạn có sản phẩm Oracle WebLogic), là làm theo hướng dẫn từ tài liệu Oracle này: Sử dụng Định dạng chứng chỉ PFX và PEM với Kho khóa . Nó mô tả việc chuyển đổi thành .pemđịnh dạng, cách trích xuất thông tin chứng chỉ từ định dạng văn bản này và nhập nó vào .jksđịnh dạng bằng java utils.ImportPrivateKeytiện ích (đây là tiện ích đi kèm với sản phẩm WebLogic).

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.