Hiểu kho khóa, chứng chỉ và bí danh


95

Kho khóa là chứng chỉ thực hay bí danh là chứng chỉ?

Nếu tôi sử dụng một bí danh khác để ký ứng dụng của mình, nó có làm rối tung các bản cập nhật trên thị trường không? Hay tôi cần ký ứng dụng của mình bằng một kho khóa khác để làm mọi thứ rối tung lên? Và thông tin dưới bí danh có thể xem được từ đâu?

Câu trả lời:


127

Tệp kho khóa được tạo bởi Keytool lưu trữ các cặp khóa cá nhân và khóa công khai. Mỗi cặp hoặc mục nhập được lưu trữ trong kho khóa được tham chiếu bởi một bí danh duy nhất. Tóm lại:

Mục nhập kho khóa = cặp khóa riêng tư + công khai = được xác định bằng bí danh

Kho khóa bảo vệ từng khóa riêng bằng mật khẩu riêng và cũng bảo vệ tính toàn vẹn của toàn bộ kho khóa bằng mật khẩu (có thể khác).

Ví dụ: khi bạn ký một ứng dụng Android bằng tùy chọn Gói ứng dụng đã ký xuất của công cụ Eclipse Android, trước tiên bạn được yêu cầu chọn một kho khóa, sau đó được yêu cầu chọn một bí danh / mục / cặp từ kho khóa đó. Sau khi cung cấp mật khẩu cho cả kho khóa và bí danh đã chọn, ứng dụng sẽ được ký và khóa công khai (chứng chỉ) cho bí danh đó được nhúng vào APK.

Bây giờ để trả lời câu hỏi của bạn, bạn chỉ có thể phát hành bản cập nhật cho một ứng dụng đã được ký bằng bí danh 'foo' bằng cách ký lại bản cập nhật bằng bí danh tương tự. Việc mất kho khóa nơi lưu trữ bí danh của bạn sẽ khiến bạn không thể phát hành phiên bản cập nhật của ứng dụng.

Tuy nhiên, có một cách để ký ứng dụng bằng bí danh mới, nhưng nó liên quan đến việc sao chép bí danh hiện có trong kho khóa bằng cách sử dụng keytool -keyclone :

Tạo một mục nhập kho khóa mới, có cùng khóa cá nhân và chuỗi chứng chỉ như mục nhập ban đầu.

Mục gốc được xác định bằng bí danh (mặc định là "mykey" nếu không được cung cấp). Mục nhập (đích) mới được xác định bởi dest_alias. Nếu không có bí danh đích nào được cung cấp tại dòng lệnh, người dùng sẽ được nhắc về bí danh đó.

Nếu mật khẩu khóa cá nhân khác với mật khẩu kho khóa, thì mục nhập sẽ chỉ được sao chép nếu cung cấp khóa khóa hợp lệ. Đây là mật khẩu được sử dụng để bảo vệ khóa cá nhân được kết hợp với bí danh. Nếu không có mật khẩu khóa nào được cung cấp tại dòng lệnh và mật khẩu khóa cá nhân khác với mật khẩu kho khóa, người dùng sẽ được nhắc nhập mật khẩu đó. Khóa cá nhân trong mục nhập nhân bản có thể được bảo vệ bằng một mật khẩu khác, nếu muốn. Nếu không có tùy chọn -new nào được cung cấp tại dòng lệnh, người dùng sẽ được nhắc nhập mật khẩu của mục nhập mới (và có thể chọn để nó giống như đối với khóa riêng của mục nhập nhân bản).

Thêm thông tin:

http://download.oracle.com/javase/1.5.0/docs/tooldocs/solaris/keytool.html

http://developer.android.com/guide/publishing/app-signs.html


3
Trang web nhà phát triển đề xuất sử dụng cùng một chứng chỉ cho tất cả các ứng dụng của bạn. Vì vậy, điều này có nghĩa là, miễn là tôi đang sử dụng cùng một kho khóa, tôi có thể sử dụng bất kỳ bí danh nào với bất kỳ mật khẩu nào và nó sẽ không làm rối tung các bản cập nhật, vì nó chỉ là một tham chiếu? Kho khóa thực sự là phần quan trọng?
Roger

1
Tôi đã viết lại câu trả lời của mình để chính xác hơn. Tóm lại, bạn thực sự phải sử dụng cùng một bí danh để ký tất cả các bản cập nhật ứng dụng của mình.
Julio Gorgé

2
@Julio Vì vậy, phương pháp hay nhất là sử dụng cùng một bí danh cho tất cả các Ứng dụng khác nhau mà bạn muốn xuất bản, như trang web nhà phát triển đề xuất? Tôi không thấy lý do gì để tạo bí danh riêng cho tất cả các Ứng dụng của bạn.
Tony Chan,

@ JulioGorgé-Này, tôi chỉ muốn biết rằng bí danh R có phân biệt chữ hoa chữ thường .. ??
Tên là Nilay,

@ JulioGorgé bạn có nghĩa là cùng một bí danh hay cùng một khóa. Bí danh chỉ là tên, tôi có thể đổi tên bí danh. Bạn có thể phát hành bản cập nhật miễn là các khóa (khóa công khai cụ thể) trong ứng dụng khớp với nhau.
Dheeraj Bhaskar
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.