Відповіді:
У магазині брелоків зберігаються приватні ключі та сертифікати з відповідними відкритими ключами.
Довірений магазин містить сертифікати інших сторін, з якими ви очікуєте спілкуватися, або від органів сертифікації, яким ви довіряєте ідентифікувати інших сторін.
TrustStore
само по собі . Або я не зміг її знайти в документах Java (наприклад, java.security.TrustStore
). Коли ми хочемо довіряти Сертифікаційному органу, він довіряється через KeyStore
(і KeyStore
передається в TrustManagerFactory
).
У магазині брелоків є приватні ключі. Це вам потрібно лише в тому випадку, якщо ви є сервером або якщо сервер вимагає аутентифікації клієнта.
Довірений магазин містить сертифікати CA, яким слід довіряти. Якщо сертифікат вашого сервера підписаний визнаним адміністратором, довірений магазин, що постачається за замовчуванням, що постачається з JRE, вже буде йому довіряти (тому що він вже довіряє надійним ЦО), тому вам не потрібно створювати свій власний або додавати щось до одного від JRE.
У рукостисканні SSL метою trustStore є перевірка облікових даних, а мета keyStore - надання облікових даних .
KeyStore
keyStore в Java зберігає приватний ключ та сертифікати, що відповідають їх відкритим ключам, і вимагає, якщо ви SSL Server або SSL вимагає аутентифікацію клієнта.
TrustStore
TrustStore зберігає сертифікати від третьої сторони, ваш додаток Java повідомляє або сертифікати, підписані CA (органи сертифікації, такі як Verisign, Thawte, Geotrust або GoDaddy), які можна використовувати для ідентифікації третьої сторони.
TrustManager
TrustManager визначає, чи слід віддаленому з’єднанню довіряти чи ні, тобто чи віддалений учасник - це той, на кого він претендує, і KeyManager вирішує, які облікові дані аутентифікації повинні бути надіслані віддаленому хосту для аутентифікації під час передачі SSL.
Якщо ви SSL-сервер, ви будете використовувати приватний ключ під час алгоритму обміну ключами та надсилати клієнтам сертифікати, відповідні вашим відкритим ключам, цей сертифікат отримується від keyStore. На стороні клієнта SSL, якщо його написано на Java, він використовуватиме сертифікати, що зберігаються в trustStore, для перевірки ідентичності Сервера. Сертифікати SSL найчастіше надходять як файл .cer, який додається в keyStore або trustStore за допомогою будь-якої утиліти управління ключами, наприклад keytool .
Джерело: http://javarevisited.blogspot.ch
Можливо, вас також зацікавить списання з Sun, як частина стандартної документації JSSE:
http://docs.oracle.com/javase/8/docs/technotes/guides/security/jsse/JSSERefGuide.html#Stores
Зазвичай довірений магазин використовується для зберігання лише відкритих ключів для цілей перевірки, наприклад, для автентифікації X.509. З метою керування, адміністратори або розробники досить часто пов'язують їх в один магазин.
У Java, яка різниця між магазином брелоків і магазином довіри?
Ось опис документів Java в Довідковому посібнику Java Secure Socket Extension (JSSE) . Я не думаю, що це говорить вам щось інше, ніж те, що сказали інші. Але це дає офіційну довідку.
keystore / truststore
Клавіатура - це база даних ключових матеріалів. Ключовий матеріал використовується для різних цілей, включаючи аутентифікацію та цілісність даних. Доступні різні типи магазинів для ключів, зокрема PKCS12 та JKS Oracle.
Взагалі кажучи, інформацію про зберігання ключів можна згрупувати у дві категорії: ключові записи та довірені записи сертифікатів. Ключовий запис складається з ідентичності підприємства та його приватного ключа і може використовуватися для різних криптографічних цілей. На противагу цьому, довірений запис сертифіката містить лише відкритий ключ на додаток до особи юридичної особи. Таким чином, довірений запис сертифіката не може використовуватися там, де потрібен приватний ключ, наприклад, у javax.net.ssl.KeyManager. У реалізації JDK JKS зберігання клавіш може містити як ключові записи, так і довірені записи сертифікатів.
Довірений магазин - це сховище ключів, яке використовується під час прийняття рішень щодо того, чому можна довіряти. Якщо ви отримуєте дані від суб'єкта, якому ви вже довіряєте, і якщо ви можете переконатися, що ця особа є такою, якою вона претендує, то ви можете припустити, що дані дійсно надійшли від цього об'єкта.
Запис слід додати до сховища довіри, лише якщо користувач довіряє цій сутності. Генеруючи пару ключів або імпортуючи сертифікат, користувач надає довіру цьому запису. Будь-який запис у довіреній сховищі вважається довіреним.
Може бути корисним наявність двох різних файлів зберігання ключів: один, що містить лише ваші ключові записи, а другий, що містить ваші довірені записи сертифікатів, включаючи сертифікати CA. Перший містить приватну інформацію, тоді як другий - ні. Використання двох файлів замість одного файлу зберігання ключів забезпечує більш чітке розділення логічного розрізнення ваших власних сертифікатів (та відповідних приватних ключів) та інших сертифікатів. Щоб забезпечити більший захист ваших приватних ключів, зберігайте їх у сховищі ключів з обмеженим доступом та надайте довірені сертифікати у більш доступній для публіки сховищі ключів, якщо це необхідно.
Перша і основна відмінність trustStore від keyStore полягає в тому, що TrustManager використовує trustStore для визначення того, чи слід довіряти віддаленому з’єднанню, keyStore використовується з KeyManager, вирішуючи, які дані автентифікації повинні бути надіслані віддаленому хосту для аутентифікації під час передачі SSL.
Інша відмінність полягає в тому, що keyStore теоретично містить приватні ключі, необхідні лише в тому випадку, якщо ви працюєте з сервером у SSL-з'єднанні або увімкнули автентифікацію клієнта на стороні сервера, а з іншого боку trustStore зберігає відкритий ключ або сертифікати від CA (Certificate Authorities), які використовуються для довіряти віддаленій стороні або SSL-з'єднанню.
Насправді ви можете зберігати в одному файлі і приватні, і відкриті ключі, враховуючи, що інструмент для управління цим файлом однаковий (keytool), тому ви можете використовувати один файл для обох цілей, але ви, мабуть, не повинні .
Принаймні, на моєму Mac OSX типовим є KeyStore ${user.home}/.keystore
, а за замовчуванням - trustStore /System/Library/Java/Support/CoreDeploy.bundle/Contents/Home/lib/security/cacerts
.
Якщо ви хочете їх замінити, слід додати параметри JVM
-Djavax.net.ssl.keyStore /path/to/keyStore
або
-Djavax.net.ssl.trustStore /path/to/trustStore
. Можливо, вам також знадобиться встановити пароль keyStore у випадку
java.security.UnrecoverableKeyException: Password must not be
null
, використовуючи параметр
-Djavax.net.ssl.trustStorePassword=password
або-Djavax.net.ssl.trustStorePassword=password
Основне джерело: