Хранилище в Java, dev64

Аз продължавам тази в предишния пост SSL темата. Тази публикация е около терминологията, свързана с SSL в Java библиотеки. Той започва пост, тъй като преводът на Java SSL Основи статия. Оригиналът обаче не завърши, така че си позволих да се отклонява от оригинала.

Какво е Java за ключове?

Хранилище за ключове се използва за съхраняване собствения си частен ключ и сертификат сървър или клиент.

За удостоверяване на клиента и сървъра SSL връзки изискват частни ключове и сертификати. Ако използвате еднопосочна автентификация, на хранилището за ключове е нужен само от страната на сървъра. Когато взаимното удостоверяване и клиент и сървър за обмен на сертификати, съответно, и на сървъра, и клиентът трябва да са за ключове с чифт частен ключ / публичен ключ + сертификат.

Т.е. с други думи, за ключове, използвани за съхранение на ключове и сертификати, които се използват за идентифициране на ключови собственика (клиент или сървър).

Вторият тип хранилище се използва за съхраняване на доверени сертификати. Това поставя ключовете доверени сертификати, CA. При използване на самостоятелно подписан сертификат в доверен магазин на може да се сложи самоподписаният сертификат. Това също е с ключовете, но в Java се нарича доверен магазин.

Формати, поддържани от Java за ключове

по този начин както е описано по-горе, за ключове - контейнер, използван за съхранение на ключове и сертификати. Java поддържа два ключове във формат:

  • JKS (Java Key Store) - Java формат
  • PKCS12 - това е стандарт,

Въведете хранилището за ключове, използвайте по подразбиране, определена в свойствата на сигурността на Java подаде keystore.type собственост. Ако приложението има достъп до файла с ключа магазин, без изрично да се посочи неговия вид, използван JKS формат. Java свойства сигурност файл се намира в ИЪ директория в рамките на инсталационната директория с Java по пътя: /lib/security/java.security

За да работите с Java хранилището за ключове в разпространение имат специална програма keytool. Keytool достатъчно за операции с ключовете в Java. Все пак, форматът е JKS propietarnym и затворен. Ето защо, често на различни реализации и да си взаимодействат с трета страна на разработчиците може да се използва комунални услуги, предоставени с OpenSSL библиотеката.

В случаите, когато имате намерение да използвате ключове само в Java това хранилище за JKS формат е добре.

Хранилище за ключове (поне в JKS формат) може да съхранява няколко чифта ключове и сертификати. За идентифициране на всяка отделна двойка или сертификат се използва известен. Alias ​​е посочено в изходния код за достъп до съответния клавиш или сертификата. Достъпът до всеки псевдоним е ограничен от парола.

Процесът на създаване на хранилище за ключове (JKS или PKS12) включва генериране на двойка ключове (публични и частни). След като получи от сертифициращ орган (CA), за да подпише с публичния ключ и свързаните с тях информация за идентификация под формата на сертификат. Сертификат орган генерира сертификат въз основа на публичен ключ и идентификационна информация, предоставена му в КСО.

Wikipedia казва, че СО издава сертификат, който се свързва с публичния ключ до посочения отличаващо име (тя може да бъде име на хост (име на хост, потребителско име, или на името на приложението), за да се създаде хранилище Стъпки представлява потребителя или приложението домакин са, както следва .:

1) Генериране на двойка ключове (публичен / частен ключ)

В Java при генериране на двойка ключове с помощта на keytool веднага се създаде самостоятелно самостоятелно подписан сертификат, който може да се използва веднага за тестване. Следващите стъпки, така че само трябва да се създаде пълноправен официален сертификат.

2) Създаване на искане за издаване на сертификат (Certificate Заявка за подписване (КСО)).

3) Вземете CSR, подписаните от доверен CA (изход от това е, сертификат)

4) Сертификат за внос, CA направена в хранилището ви за ключове.

5) Сертификат за внос на Калифорния в truststore като доверен сертификат

Java е по подразбиране за ключове

Уеб сървър или приложение може да се използва, за да кажа, Java за ключове във файла, определен за монтаж свойства javax.net.ssl.keyStore. (Пътят до файла с ключовете). Ако заявлението не се уточнява за ключове имот, а след това се стартира на хранилището за ключове по подразбиране. Хранилище по подразбиране се съхраняват в .keystore файл в домашната директория на потребителя, на свой ред се определя от система user.home собственост.

Java е по подразбиране Truststore

Приложението може да укажете да се използва специфичен Java truststore инсталационен файл свойства javax.net.ssl.trustStore. Ако заявлението не се посочва ясно truststore, тогава truststore по подразбиране се зарежда и да се използва. По подразбиране Java truststore се намира по подразбиране в / ИЪ / Сигурност / cacerts и парола: "changeit". truststore файлове - обичайните за ключове във файла, който съдържа един или повече доверие сертификат CA (сертифициращи органи).

За да се улесни създаването и управлението на това хранилище на файлове в Java разпределение включва keytool полезност. което ви позволява да създадете JKS файлове. Keytool ви позволява да управлявате сертификати и лични ключове двойки с обществеността.

При опция -genkey, keytool генерира нова двойка публичен / частен ключ, и създава самостоятелно подписан сертификат за публичния ключ.


keytool -genkey -keystore server.jks -dname "CN = Localhost, OU = dev64, О = dev64-WordPress, L = файл, ST = файл, С = RU" -storepass storepass -alias сървъра тест -keypass serverpass

Сертификатът е създаден във формат X.509. В този формат, като собственик на използваната идентификация Distinquished Име или просто DN в X.500 формат. Абсолютно същият идентификационен обект формат се използва, като LDAP-протокол или SNMP. Distinquished Име се определя като разделени със запетая атрибути: «CN = Андрей Чесноков, OU = dev64, О = dev64-WordPress, L = файл, ST = файл, С = RU». Тук индивидуалните качества се декодират, както следва:

  • CN - общо име име на собственик
  • ОУ - organizationUnit (например, отдел или разделяне) отдел или разделяне
  • O - ORGANIZATIONNAME - голям името на организацията, например «ABCSystems, Inc.»
  • L - localityName - местност (град) име, например «Пало Алто» място (град)
  • ST - stateName - щат или провинция име, например «Калифорния»
  • C - страна - две букви, код на държавата, например «CH»

Някои от атрибутите могат да бъдат пропуснати в този случай, тя е настроена да Unknown. При генериране на тест за ключове, всички стойности могат да бъдат определени. Когато получите официален сертификат данни са регламентирани и се проверяват организацията на сертифициращия орган.

Във всеки сертификат се съхранява в Distinqueshed Имена (DN) формат X.509 двойка, един DN принадлежи на притежателя на сертификата, а втората показва идентификатор DN CA, подписал сертификата. В случай на самоподписаният сертификат, както DN показва притежателя на сертификата.

Distinquished име се определя, като използвате опцията keytool -dname. Ако не е посочен dname опция, след което keytool ще накара всички задължителни полета от командния ред.

Тази опция указва името на файла с хранилище за ключове. Ако го пропусне, след keytool ще създаде файл с име .keystore в домашната директория на потребителя.

Достъпът до хранилището за ключове е защитен с парола. Съответно -keypass опция се задава парола за достъп до хранилището за ключове като цяло. Тази парола се изисква да четат или да промени това хранилище възможности.

Вторият парола, както е споменато по-горе, се изисква за достъп определен псевдоним в това хранилище. Тази втора парола е обозначено с -keypass опция.

по този начин с една единствена команда, се превръща за ключове с чифт ключове и сертификати, на хранилището за ключове е да се вземе и да го постави в правилната директория на програмата ви. Но това е друга история.

Вие определено трябва да се провери на официалната документация на keytool, тя съдържа много полезна информация.