Định nghĩa Truststore và Keystore


Câu trả lời:


268

Kho khóa chứa khóa riêng và chứng chỉ có khóa chung tương ứng.

Cửa hàng ủy thác chứa các chứng chỉ từ các bên khác mà bạn muốn liên lạc hoặc từ Cơ quan Chứng nhận mà bạn tin tưởng để xác định các bên khác.


12
Mặc dù điều này nên đúng trong thực tế, nhưng chúng có thể (và thường là) một cái giống nhau. Bạn thực sự có thể nhập khóa riêng và chứng chỉ công khai vào [java home] / jre / lib / security / cacerts mặc định "truststore". Tiện ích keytool không tạo ra sự khác biệt trong hai thuật ngữ, chỉ trong các loại cửa hàng (tức là - JKS so với PKCS12). Đối với vấn đề đó, Java thực hiện điều tương tự trong mã nguồn. Bạn tạo một java.security.KeyStore và sử dụng trình quản lý ủy thác để quản lý các chứng chỉ trong đó, nhưng không có lớp TrustStore.

4
Java không có một TrustStore se . Hoặc tôi không thể tìm thấy nó trong các tài liệu java (ví dụ java.security.TrustStore:). Khi chúng tôi muốn tin tưởng vào Tổ chức phát hành chứng chỉ, nó được tin cậy thông qua một KeyStore(và KeyStoređược chuyển vào TrustManagerFactory).
jww

5
Điều đáng nói là KeyStore.load(InputStream is, char[] password)( tài liệu ) có thể lấy mật khẩu null và sau đó nó sẽ cấp quyền truy cập vào chứng chỉ công cộng. Đó là, mã muốn duyệt một cửa hàng tin cậy không cần biết mật khẩu (vì lý do rất chính đáng!)
xverges

83
  1. Một kho khóa chứa các khóa riêng. Bạn chỉ cần điều này nếu bạn là một máy chủ hoặc nếu máy chủ yêu cầu xác thực ứng dụng khách.

  2. Một cửa hàng tin cậy chứa chứng chỉ CA để tin tưởng. Nếu chứng chỉ máy chủ của bạn được ký bởi một CA được công nhận, thì cửa hàng ủy thác mặc định đi kèm với JRE sẽ tin tưởng nó (vì nó đã tin tưởng các CA đáng tin cậy), vì vậy bạn không cần phải tự xây dựng hoặc thêm bất cứ thứ gì vào đó từ JRE.

Nguồn


73

Trong một cái bắt tay SSL, mục đích của TrustStore là xác minh thông tin đăng nhập và mục đích của keyStore là cung cấp thông tin xác thực .

keyStore

keyStore trong Java lưu trữ khóa riêng và chứng chỉ tương ứng với khóa chung của chúng và yêu cầu nếu bạn là SSL Server hoặc SSL yêu cầu xác thực ứng dụng khách.

TrustStore

TrustStore lưu trữ chứng chỉ từ bên thứ ba, ứng dụng Java của bạn giao tiếp hoặc chứng chỉ được ký bởi CA (cơ quan cấp chứng chỉ như Verisign, Thawte, Geotrust hoặc GoDaddy) có thể được sử dụng để xác định bên thứ ba.

Quản lý tin cậy

TrustManager xác định liệu kết nối từ xa có nên được tin cậy hay không, tức là liệu bên từ xa có phải là người yêu cầu hay không và KeyManager quyết định thông tin xác thực nào sẽ được gửi đến máy chủ từ xa để xác thực trong quá trình bắt tay SSL.

Nếu bạn là Máy chủ SSL, bạn sẽ sử dụng khóa riêng trong thuật toán trao đổi khóa và gửi chứng chỉ tương ứng với khóa chung của mình cho khách hàng, chứng chỉ này được lấy từ keyStore. Về phía máy khách SSL, nếu được viết bằng Java, nó sẽ sử dụng các chứng chỉ được lưu trữ trong trustStore để xác minh danh tính của Máy chủ. Chứng chỉ SSL thường được phát hành dưới dạng tệp .cer được thêm vào keyStore hoặc trustStore bằng cách sử dụng bất kỳ tiện ích quản lý khóa nào, ví dụ như keytool .

Nguồn: http://javarevisited.blogspot.ch


31

Bạn cũng có thể quan tâm đến bài viết từ Sun, như một phần của tài liệu JSSE tiêu chuẩn:

http://docs.oracle.com/javase/8/docs/technotes/guides/security/jsse/JSSERefGuide.html#Stores

Thông thường, cửa hàng ủy thác được sử dụng để chỉ lưu trữ khóa công khai, cho mục đích xác minh, chẳng hạn như với xác thực X.509. Đối với mục đích quản lý, việc quản trị viên hoặc nhà phát triển chỉ đơn giản là kết hợp cả hai vào một cửa hàng.


1
Không may tặng 404
Chris Beach

@ChrisBeach - đã cập nhật liên kết đến đúng trên trang web của Oracle.
Peter Mularien

1
Cửa hàng ủy thác
Hầu tước Lorne

9

Trong Java, sự khác biệt giữa kho khóa và kho ủy thác là gì?

Dưới đây là mô tả từ các tài liệu Java tại Hướng dẫn tham khảo mở rộng ổ cắm bảo mật Java (JSSE) . Tôi không nghĩ rằng nó cho bạn biết bất cứ điều gì khác với những gì người khác đã nói. Nhưng nó cung cấp tài liệu tham khảo chính thức.

kho khóa / ủy thác

Kho khóa là một cơ sở dữ liệu của tài liệu chính. Tài liệu chính được sử dụng cho nhiều mục đích khác nhau, bao gồm xác thực và toàn vẹn dữ liệu. Có nhiều loại kho khóa khác nhau, bao gồm PKCS12 và JKS của Oracle.

Nói chung, thông tin kho khóa có thể được nhóm thành hai loại: mục chính và mục chứng chỉ tin cậy. Mục nhập khóa bao gồm danh tính của một thực thể và khóa riêng của nó và có thể được sử dụng cho nhiều mục đích mã hóa khác nhau. Ngược lại, mục nhập chứng chỉ tin cậy chỉ chứa khóa công khai bên cạnh danh tính của thực thể. Do đó, mục nhập chứng chỉ tin cậy không thể được sử dụng khi cần có khóa riêng, chẳng hạn như trong javax.net.ssl.KeyManager. Trong triển khai JDK của JKS, kho khóa có thể chứa cả mục nhập chính và mục nhập chứng chỉ tin cậy.

Truststore là một kho khóa được sử dụng khi đưa ra quyết định về những gì cần tin tưởng. Nếu bạn nhận được dữ liệu từ một thực thể mà bạn đã tin tưởng và nếu bạn có thể xác minh rằng thực thể đó là thực thể mà nó tuyên bố là, thì bạn có thể cho rằng dữ liệu thực sự đến từ thực thể đó.

Một mục nhập chỉ nên được thêm vào một cửa hàng tin cậy nếu người dùng tin tưởng thực thể đó. Bằng cách tạo một cặp khóa hoặc bằng cách nhập chứng chỉ, người dùng sẽ tin tưởng vào mục nhập đó. Bất kỳ mục trong kho ủy thác đều được coi là mục đáng tin cậy.

Có thể hữu ích khi có hai tệp kho khóa khác nhau: một tệp chỉ chứa các mục nhập chính của bạn và tệp kia chứa các mục nhập chứng chỉ tin cậy của bạn, bao gồm chứng chỉ CA. Cái trước chứa thông tin cá nhân, trong khi cái sau thì không. Sử dụng hai tệp thay vì một tệp kho khóa cung cấp sự phân tách rõ ràng hơn về sự phân biệt logic giữa chứng chỉ của riêng bạn (và khóa riêng tương ứng) và chứng chỉ của người khác. Để cung cấp bảo vệ nhiều hơn cho các khóa riêng của bạn, hãy lưu trữ chúng trong kho khóa với quyền truy cập hạn chế và cung cấp các chứng chỉ tin cậy trong kho khóa có thể truy cập công khai hơn nếu cần.


4
  1. Sự khác biệt đầu tiên và chính giữa TrustStore và keyStore là TrustStore được TrustManager sử dụng để xác định xem có nên tin cậy kết nối từ xa hay không, keyStore được sử dụng từ KeyManager để quyết định thông tin xác thực nào sẽ được gửi đến máy chủ từ xa để xác thực trong quá trình bắt tay SSL.

  2. Một điểm khác biệt nữa là về mặt lý thuyết, keyStore chỉ chứa các khóa riêng nếu bạn đang chạy Máy chủ trong kết nối SSL hoặc bạn đã bật xác thực ứng dụng khách ở phía máy chủ và mặt khác, TrustStore lưu trữ khóa công khai hoặc chứng chỉ từ CA (Cơ quan cấp chứng chỉ) được sử dụng để tin tưởng bên từ xa hoặc kết nối SSL.

    Trong thực tế, bạn có thể lưu trữ trong cùng một tệp cả khóa riêng và khóa chung, do công cụ quản lý tệp đó là như nhau (keytool), vì vậy bạn có thể sử dụng một tệp cho cả hai mục đích, nhưng có lẽ bạn không nên .

  3. Ít nhất trên Mac OSX của tôi, keyStore mặc định là ${user.home}/.keystorevà TrustStore mặc định là /System/Library/Java/Support/CoreDeploy.bundle/Contents/Home/lib/security/cacerts.

    Nếu bạn muốn ghi đè chúng, bạn nên thêm các tham số JVM -Djavax.net.ssl.keyStore /path/to/keyStorehoặc -Djavax.net.ssl.trustStore /path/to/trustStore. Bạn cũng có thể cần đặt mật khẩu keyStore trong trường hợp java.security.UnrecoverableKeyException: Password must not be null, sử dụng tham số -Djavax.net.ssl.trustStorePassword=passwordhoặc-Djavax.net.ssl.trustStorePassword=password

Nguồn chính:

http://javarevisited.blogspot.co.uk/2012/09/difference-b between -truststore-vs-keyStore-Java-SSL.html

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.