Java Platform, Enterprise Edition (Java EE) 8
Учебник по Java EE

Назад Вперёд Содержание

Работа с цифровыми сертификатами

Цифровые сертификаты для сервера GlassFish уже созданы и находятся в каталоге domain-dir`/config/`. Эти цифровые сертификаты являются самоподписанными и предназначены для использования в среде разработки. Они не предназначены для использования в производственной среде. В производственной среде создайте сертификаты и подпишите их в Центре сертификации (ЦС).

Чтобы использовать Secure Sockets Layer (SSL), приложение или веб-сервер должны иметь связанный сертификат для каждого внешнего интерфейса или IP-адреса, который принимает безопасные соединения. Теория, лежащая в основе этого дизайна, заключается в том, что сервер должен обеспечивать разумную уверенность в том, что его владелец является тем, за кого он себя выдаёт, особенно до получения какой-либо конфиденциальной информации. Может быть полезно рассматривать сертификат как «цифровое водительское удостоверение» для интернет-адреса. В сертификате указывается, с какой компанией связан сайт, а также некоторые основные контактные данные владельца или администратора сайта.

Цифровой сертификат криптографически подписан его владельцем, и его трудно подделать кому-либо ещё. Для сайтов, участвующих в электронной коммерции или в любой другой бизнес-транзакции, в которой важна аутентификация личности, сертификат можно приобрести в известном центре сертификации, таком как VeriSign или Thawte. Если ваш серверный сертификат самоподписан, вы должны установить его в файл хранилища ключей сервера GlassFish (keystore.jks). Если ваш клиентский сертификат самоподписан, вы должны установить его в файл хранилища доверенных сертификатов сервера GlassFish (cacerts.jks).

Иногда проверка подлинности не является проблемой. Например, администратор может просто захотеть убедиться, что данные, передаваемые и получаемые сервером, являются частными и не могут быть отслежены кем-либо, подслушивающим соединение. В таких случаях вы можете сэкономить время и деньги, связанные с получением сертификата CA, и использовать самоподписанный сертификат.

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

Цифровые сертификаты используются с HTTPS для аутентификации веб-клиентов. Служба HTTPS большинства веб-серверов не будет работать, если не установлен цифровой сертификат. Используйте процедуру, описанную в разделе Создание сертификата сервера, чтобы настроить цифровой сертификат, который может использоваться вашим приложением или веб-сервером для включения SSL.

Одним из инструментов, который можно использовать для настройки цифрового сертификата, является keytool — утилита управления ключами и сертификатами, которая поставляется вместе с JDK. Этот инструмент позволяет пользователям управлять своими парами открытого/закрытого ключей и связанными сертификатами для использования при самостоятельной аутентификации, посредством чего пользователь аутентифицирует себя для других пользователей или служб или служб целостности данных и аутентификации, используя цифровые подписи. Этот инструмент также позволяет пользователям кэшировать открытые ключи своих партнёров в виде сертификатов.

Для лучшего понимания keytool и асимметричной криптографии см. Дополнительная информация о разделах повышенной безопасности для ссылки на документацию keytool.

Создание серверного сертификата

Серверный сертификат уже создан для GlassFish Server и находится в каталоге domain-dir`/config/`. Серверный сертификат находится в keystore.jks. Файл cacerts.jks содержит все доверенные сертификаты, включая сертификаты клиентов.

При необходимости вы можете использовать keytool для генерации сертификатов. Утилита keytool хранит ключи и сертификаты в файле, называемом хранилищем ключей, хранилищем сертификатов, используемых для идентификации клиента или сервера. Как правило, хранилище ключей — это файл, который содержит идентификационные данные одного клиента или одного сервера. Хранилище ключей защищает закрытые ключи с помощью пароля.

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

Основные шаги для создания серверного сертификата следующие.

  1. Создайте хранилище ключей.

  2. Экспортируйте сертификат из хранилища ключей.

  3. Подпишите сертификат.

  4. Импортируйте сертификат в хранилище доверенных сертификатов: хранилище сертификатов, используемое для проверки сертификатов. Хранилище доверенных сертификатов обычно содержит несколько сертификатов.

В следующем разделе представлена ​​конкретная информация об использовании утилиты keytool для выполнения этих действий.

Использование keytool для создания серверного сертификата

Запустите keytool, чтобы сгенерировать новую пару ключей в файле хранилища ключей разработки по умолчанию, keystore.jks. В этом примере используется псевдоним server-alias, чтобы сгенерировать новую пару открытого/закрытого ключа и включить открытый ключ в самоподписанный сертификат внутри keystore.jks. Пара ключей генерируется с использованием алгоритма типа RSA с паролем по умолчанию changeit. Дополнительные сведения и другие примеры создания файлов хранилища ключей и управления ими см. в документации keytool.

Примечание:

RSA — это технология шифрования с открытым ключом, разработанная RSA Data Security, Inc.

Из каталога, в котором вы хотите создать пару ключей, запустите keytool, как показано в следующих шагах.

  1. Создайте серверный сертификат.

    Введите команду keytool в одну строку:

    java-home/bin/keytool -genkey -alias server-alias -keyalg RSA
    -keypass changeit -storepass changeit -keystore keystore.jks

    Когда вы кликаете Enter, keytool предлагает вам ввести имя сервера, организационную единицу, организацию, местность, штат и код страны.

    Вы должны ввести имя сервера в ответ на первое приглашение keytool, в котором оно запрашивает имя и фамилию. В целях тестирования это может быть localhost.

  2. Экспортируйте созданный сертификат сервера в keystore.jks в файл server.cer.

    Введите команду keytool в одну строку:

    java-home/bin/keytool -export -alias server-alias -storepass changeit
    -file server.cer -keystore keystore.jks
  3. Если вы хотите, чтобы сертификат был подписан центром сертификации, прочитайте пример в документации keytool.

  4. Чтобы добавить серверный сертификат в файл хранилища доверенных сертификатов cacerts.jks, запустите keytool из каталога, в котором вы создали хранилище ключей и сертификат сервера.

    Используйте следующие параметры:

    java-home/bin/keytool -import -v -trustcacerts -alias server-alias
    -file server.cer -keystore cacerts.jks -keypass changeit
    -storepass changeit

    Появится информация о сертификате, такая как показано ниже:

    Owner: CN=localhost, OU=My Company, O=Software, L=Santa Clara, ST=CA, C=US
    Issuer: CN=localhost, OU=My Company, O=Software, L=Santa Clara, ST=CA, C=US
    Serial number: 3e932169
    Valid from: Mon Nov 26 18:15:47 EST 2012 until: Sun Feb 24 18:15:47 EST 2013
    Certificate fingerprints:
             MD5: 52:9F:49:68:ED:78:6F:39:87:F3:98:B3:6A:6B:0F:90
             SHA1: EE:2E:2A:A6:9E:03:9A:3A:1C:17:4A:28:5E:97:20:78:3F:
             SHA256: 80:05:EC:7E:50:50:5D:AA:A3:53:F1:11:9B:19:EB:0D:20:67:C1:12:
    AF:42:EC:CD:66:8C:BD:99:AD:D9:76:95
             Signature algorithm name: SHA256withRSA         Version: 3
             ...
    Trust this certificate? [no]:
  5. Введите yes, затем нажмите клавишу Enter или Return.

    Появится следующая информация:

    Certificate was added to keystore
    [Storing cacerts.jks]

Добавление пользователей в область безопасности сertificate

В области certificate идентификатор пользователя устанавливается в контексте безопасности сервера GlassFish и заполняется данными пользователя, полученными из криптографически проверенных клиентских сертификатов. Пошаговые инструкции по созданию сертификата этого типа см. в разделе Работа с цифровыми сертификатами.

Использование другого серверного сертификата с сервером GlassFish

Следуйте инструкциям в Создание серверного сертификата, чтобы создать собственный серверный сертификат, подписать его центром сертификации и импортировать сертификат в keystore.jks.

Убедитесь, что при создании сертификата вы соблюдаете следующие правила.

  • Когда вы создаёте серверный сертификат, keytool предлагает вам ввести ваше имя и фамилию. В ответ на это приглашение вы должны ввести имя своего сервера. В целях тестирования это может быть localhost.

  • Если вы хотите заменить существующий keystore.jks, вы должны либо изменить пароль вашего хранилища ключей на пароль по умолчанию (changeit), либо изменить пароль по умолчанию на пароль вашего хранилища ключей.

Указание другого серверного сертификата

Чтобы указать, что GlassFish Server должен использовать новое хранилище ключей для решений по аутентификации и авторизации, необходимо установить параметры JVM для GlassFish Server, чтобы они распознавали новое хранилище ключей. Чтобы использовать хранилище ключей, отличное от предоставленного в целях разработки, выполните следующие действия.

  1. Запустите сервер GlassFish, если вы этого ещё не сделали. Информацию о запуске сервера GlassFish можно найти в Запуск и остановка сервера GlassFish.

  2. Откройте консоль администрирования сервера GlassFish в веб-браузере по ссылке http://localhost:4848.

  3. Разверните «Конфигурации», затем разверните «server-config» и нажмите «Настройки JVM».

  4. Перейдите на вкладку «Параметры JVM».

  5. Измените следующие параметры JVM, чтобы они указывали на местоположение и имя нового хранилища ключей. Текущие настройки показаны ниже:

    -Djavax.net.ssl.keyStore=${com.sun.aas.instanceRoot}/config/keystore.jks
    -Djavax.net.ssl.trustStore=${com.sun.aas.instanceRoot}/config/cacerts.jks
  6. Если вы изменили пароль хранилища ключей по сравнению со значением по умолчанию, вам также необходимо добавить параметр пароля:

    -Djavax.net.ssl.keyStorePassword=your-new-password
  7. Нажмите Сохранить и перезапустите сервер GlassFish.


Назад Вперёд Содержание
Логотип Oracle  Copyright © 2017, Oracle и/или её дочерних компаний. Все права защищены. Версия перевода 1.0.5 (Java EE Tutorial — русскоязычная версия)