2011-04-20 31 views
91

Kho lưu trữ khóa có phải là chứng chỉ thực hay là bí danh chứng chỉ không?Hiểu kho khóa, chứng chỉ và bí danh

Nếu tôi sử dụng một bí danh khác để ký ứng dụng của tôi, nó sẽ làm hỏng các cập nhật trên thị trường? Hoặc tôi có cần phải ký ứng dụng của tôi với một kho khóa khác để làm mọi thứ lộn xộn không? Và thông tin trong bí danh có thể xem được từ đâu?

Trả lời

120

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 đượ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:

nhập Keystore = tin + công khai chìa khóa cặp = xác định bởi một bí danh

Các keystore bảo vệ mỗi khóa bí mật với mật khẩu cá nhân của mình, và cũng bảo vệ sự toàn vẹn của toàn bộ keystore với một mật khẩu (có thể khác). Ví dụ, khi bạn ký một ứng dụng Android bằng cách sử dụng tùy chọn Export Signed Package Package của công cụ Eclipse Android, bạn được yêu cầu chọn một kho khóa đầu tiên, và 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 đượ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 ứng dụng đã được ký bằng bí danh 'foo' bằng cách ký lại cập nhật với cùng một bí danh. Mất kho khóa nơi bí danh của bạn được lưu trữ sẽ ngăn bạn 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ý một ứng dụng với một bí danh mới, nhưng nó liên quan đến việc nhân bản một bí danh tồn tại trong keystore sử dụng keytool -keyclone:

Tạo một mục keystore mới, mà có cùng khóa cá nhân và chuỗi chứng chỉ làm mục nhập gốc.

Mục nhập ban đầu được xác định bởi bí danh (mặc định là "mykey" nếu không được cung cấp). Mục nhập mới (đích) đượ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 được nhắc cho nó.

Nếu mật khẩu khóa riêng là 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 mã khóa hợp lệ. Đây là mật khẩu được sử dụng để bảo vệ khóa riêng tư được liên kết 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à khóa riêng mật khẩu khác với mật khẩu kho khóa , người dùng là được nhắc. Khóa riêng trong mục được sao chép 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 mới được cung cấp tại dòng lệnh , người dùng đượ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ư khóa riêng của mục được nhân bản).thông tin

thêm:

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

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

+3

Các trang web dev cho thấy 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 hỏng các cập nhật, vì nó chỉ là một tham chiếu? Các 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 phải thực sự sử dụng cùng một bí danh để ký tất cả các bản cập nhật của ứng dụng của bạn. –

+2

@Julio Vì vậy, cách tốt 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 để tạo bí danh riêng cho tất cả Ứng dụng của bạn. –

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