Статьи

Учебник по Java Keystore

1. Введение

Кто из нас не посещал ebay, amazon, чтобы купить что-нибудь, или его личный банковский счет, чтобы проверить это. Считаете ли вы, что эти сайты достаточно безопасны для размещения ваших личных данных, таких как (номер кредитной карты или номер банковского счета и т. Д.)?

Большинство этих сайтов используют протокол Socket Layer (SSL) для защиты своих интернет-приложений. SSL позволяет зашифровывать данные от клиента, такого как веб-браузер, перед передачей, так что кто-то, пытающийся перехватить данные, не сможет их расшифровать.

Многие серверы приложений Java и веб-серверы поддерживают использование хранилищ ключей для конфигурации SSL. Если вы создаете безопасные Java-программы, обучение созданию хранилища ключей является первым шагом.

2. SSL и как это работает

HTTP-соединение на основе HTTP всегда инициируется клиентом с использованием URL-адреса, начинающегося с https: // вместо http: //. В начале сеанса SSL выполняется рукопожатие SSL. Это рукопожатие производит криптографические параметры сеанса. Упрощенный обзор того, как обрабатывается рукопожатие SSL, показан на диаграмме ниже.

Java KeyStore Tutorial_html_m4e1c1e9d

Вкратце, как это работает:

  1. Браузер запрашивает защищенную страницу (обычно https: //).
  2. Веб-сервер отправляет свой открытый ключ со своим сертификатом.
  3. Браузер проверяет, что сертификат был выдан доверенной стороной (обычно доверенным корневым центром сертификации), что сертификат все еще действителен и что сертификат связан с сайтом, к которому обращался.
  4. Затем браузер использует открытый ключ для шифрования случайного симметричного ключа шифрования и отправляет его на сервер с зашифрованным URL-адресом, а также с другими зашифрованными данными http.
  5. Веб-сервер расшифровывает симметричный ключ шифрования, используя свой закрытый ключ, и использует симметричный ключ для расшифровки данных URL и http.
  6. Веб-сервер отправляет обратно запрошенный HTML-документ и данные http, зашифрованные с помощью симметричного ключа.
  7. Браузер расшифровывает данные http и html, используя симметричный ключ, и отображает информацию.

Мир SSL имеет, по сути, три типа сертификатов: закрытые ключи, открытые ключи (также называемые открытыми сертификатами или сертификатами сайта) и корневые сертификаты.

3. Частные ключи

Закрытый ключ содержит идентификационную информацию сервера, а также значение ключа. Он должен хранить этот ключ в безопасности и защищаться паролем, поскольку он используется для согласования хэша во время рукопожатия. Кто-то может использовать его для расшифровки трафика и получения вашей личной информации. Это как оставить ключ от дома в замке.

4. Публичные сертификаты

Публичный сертификат (открытый ключ) — это та часть, которая предоставляется клиенту, ему нравится ваш личный паспорт, когда вы показываете его в аэропорту. Открытый сертификат, тесно связанный с закрытым ключом, создается из закрытого ключа с использованием запроса на подпись сертификата (CSR). После создания личного ключа вы создаете CSR, который отправляется в ваш центр сертификации (CA). CA возвращает подписанный сертификат, который содержит информацию об идентификации сервера и о CA.

5. Корневые сертификаты

Корневой сертификат CA — это сертификат CA, который представляет собой самозаверяющий сертификат. Этот сертификат представляет объект, который выдает сертификат и известен как Центр сертификации или CA, такой как VeriSign, Thawte и т. Д.

6. Центры сертификации

Компании, которые будут подписывать сертификаты для вас, такие как VeriSign, Thawte, Commodo, GetTrust. Кроме того, многие компании и учреждения действуют как свои собственные CA, либо создавая полную реализацию с нуля, либо используя опцию с открытым исходным кодом, такую ​​как OpenSSL.

7. Цепочка сертификатов

Когда сервер и клиент устанавливают соединение SSL, клиенту предоставляется сертификат; клиент должен определить, доверять ли этому сертификату, этот процесс называется цепочкой сертификатов. Клиент проверяет эмитента сертификата, просматривает его список доверенных корневых сертификатов и сравнивает эмитента в представленном сертификате с субъектами доверенных сертификатов.

Если совпадение найдено, соединение продолжается. Если нет, веб-браузеры могут открыть диалоговое окно, предупреждая вас о том, что он не может доверять сертификату, и предлагая возможность доверять сертификату.

8. Keystore с использованием Java keytool

Java Keytool — это утилита управления ключами и сертификатами. Это позволяет пользователям управлять своими собственными парами открытого и закрытого ключей и сертификатами. Java Keytool хранит ключи и сертификаты в так называемом хранилище ключей . Защищает приватные ключи паролем.

Каждый сертификат в хранилище ключей Java связан с уникальным псевдонимом. При создании хранилища ключей Java вы сначала создадите файл .jks, который первоначально будет содержать только закрытый ключ, а затем создадите CSR. Затем вы импортируете сертификат в хранилище ключей, включая любые корневые сертификаты.

9. Команды хранилища ключей

Создание хранилища ключей, ключей и запросов сертификатов

  • Создать хранилище ключей Java и пару ключей
    1
    keytool -genkey -alias mydomain -keyalg RSA -keystore keystore.jks -storepass password
  • Создайте запрос на подпись сертификата (CSR) для существующего хранилища ключей Java
    1
    keytool -certreq -alias mydomain -keystore keystore.jks -storepass password -file mydomain.csr
  • Создать хранилище ключей и самозаверяющий сертификат
    1
    keytool -genkey -keyalg RSA -alias selfsigned -keystore keystore.jks -storepass password -validity 360

Импортные сертификаты

  • Импортируйте корневой или промежуточный сертификат CA в существующее хранилище ключей Java
  • 1
    keytool -import -trustcacerts -alias root -file Thawte.crt -keystore keystore.jks -storepass password
  • Импортируйте подписанный первичный сертификат в существующее хранилище ключей Java
    1
    keytool -import -trustcacerts -alias mydomain -file mydomain.crt -keystore keystore.jks -storepass password

Экспортные сертификаты

  • Экспорт сертификата из хранилища ключей
    1
    keytool -export -alias mydomain -file mydomain.crt -keystore keystore.jks -storepass password

Проверить / Список / Просмотр сертификатов

  • Проверьте автономный сертификат
    1
    keytool -printcert -v -file mydomain.crt
  • Проверьте, какие сертификаты находятся в хранилище ключей Java
    1
    keytool -list -v -keystore keystore.jks -storepass password
  • Проверьте определенную запись хранилища ключей, используя псевдоним
    1
    keytool -list -v -keystore keystore.jks -storepass password -alias mydomain

Удалить сертификаты

  • Удалить сертификат из хранилища ключей Java Keytool
    1
    keytool -delete -alias mydomain -keystore keystore.jks -storepass password

Изменить пароли

  • Изменить пароль хранилища ключей Java
    1
    keytool -storepasswd -new new_storepass -keystore keystore.jks -storepass password
  • Изменить пароль закрытого ключа
    1
    keytool -keypasswd -alias client -keypass old_password -new new_password -keystore client.jks -storepass password

10. Настройте SSL, используя Keystores и самоподписанные сертификаты в Apache Tomcat.

  1. С помощью этой команды создайте новое хранилище ключей и самозаверяющий сертификат, вам будет предложено ввести определенную информацию, такую ​​как имя пользователя, подразделение, компания и местоположение.
    1
    keytool -genkey -alias tomcat -keyalg RSA -keystore /home/ashraf/Desktop/JavaCodeGeek/keystore.jks -validity 360

    Java KeyStore Tutorial_html_m5d3841d

  2. Вы можете перечислить детали сертификата, которые вы только что создали с помощью этой команды
    1
    keytool -list -keystore /home/ashraf/Desktop/JavaCodeGeek/keystore.jks

    Java KeyStore Tutorial_html_131ca506

  3. Загрузить Tomcat 7
  4. Настройте сервер Tomcat для поддержки соединения SSL или https. Добавление элемента соединителя в Tomcat \ conf \ server.xml
    1
    2
    <Connector port="8443" maxThreads="150" scheme="https" secure="true"
    SSLEnabled="true" keystoreFile="/home/ashraf/Desktop/JavaCodeGeek/.keystore" keystorePass="password" clientAuth="false" keyAlias="tomcat" sslProtocol="TLS" />
  5. Запустите Tomcat и перейдите по адресу https: // localhost: 8443 / , вы найдете следующую проблему безопасности, когда браузер будет отображать ненадежные сообщения об ошибках. В случае электронной коммерции такие сообщения об ошибках приводят к немедленному недоверию к веб-сайту, и организации рискуют потерять доверие и бизнес со стороны большинства потребителей, это нормально, поскольку ваш сертификат еще не подписан такими центрами сертификации, как Thawte или Verisign. который проверит личность заявителя и выдаст подписанный сертификат. Java KeyStore Tutorial_html_15195a43
  6. Вы можете в любом случае нажать «Продолжить», пока не получите подписанный сертификат.