bg-tutorials

Как сгенерировать CSR на GlassFish

Это руководство показывает, как создать CSR (Certificate Signing Request) для GlassFish (ныне Eclipse GlassFish) с помощью утилиты Java keytool.

GlassFish выделяется одной полезной особенностью: свежая установка уже поставляется с хранилищем ключей (keystore.p12 в Eclipse GlassFish 7.1 и новее, или keystore.jks в старых сборках) и записью сертификата по умолчанию с псевдонимом s1as. Вы можете сгенерировать CSR напрямую из этого существующего ключа или заменить его новым ключом с тем же псевдонимом. В любом случае тот же псевдоним будет использован при импорте подписанного сертификата, так что ключ, CSR и выданный сертификат хранятся в одном месте.

Что вам понадобится

  • Работающая установка GlassFish (или Eclipse GlassFish). Хранилище ключей по умолчанию находится в директории config домена, например glassfish/domains/domain1/config/keystore.p12 в Eclipse GlassFish 7.1 и новее, или keystore.jks в старых сборках.
  • Установленная Java, чтобы команда keytool была доступна. GlassFish поставляется с JDK, поэтому keytool обычно уже доступен в PATH. Проверьте это командой keytool -help.
  • Доступ к оболочке или терминалу на сервере GlassFish. Приватный ключ должен оставаться на этом сервере.
  • Точное полное доменное имя (FQDN), которое вы хотите защитить, например www.yourdomain.com, плюс любые дополнительные имена хостов для поля SAN.
  • Юридические данные вашей организации (страна, штат/область, населённый пункт, название организации) для поля Distinguished Name в CSR.
  • Мастер-пароль GlassFish для домена. Значение по умолчанию — changeit; на рабочих серверах меняйте его командой asadmin change-master-password.

Два способа создать CSR

Если вы уже создали свой CSR, переходите сразу к разделу отправка CSR, а затем к установке SSL-сертификата на GlassFish.

Существует два распространённых способа работы с keytool в GlassFish. Выберите тот, который подходит вашей ситуации:

  • Вариант A: создать CSR из существующего ключа s1as (рекомендуется). Новый домен GlassFish уже имеет приватный ключ с псевдонимом s1as внутри хранилища ключей по умолчанию (keystore.p12 в 7.1+, keystore.jks в старых сборках). Самый быстрый и наименее рискованный путь — оставить этот ключ на месте и просто экспортировать из него CSR. Переходите к варианту A.
  • Вариант B: заменить ключ s1as по умолчанию новым ключом, затем создать CSR. Используйте этот вариант, если хотите точно знать размер ключа и DN или подозреваете, что ключ по умолчанию мог быть использован или скомпрометирован. Переходите к варианту B.

Какой бы вариант вы ни выбрали, псевдоним должен оставаться s1as (или, если вы его измените, вам также придётся обновить domain.xml соответствующим образом). Прослушиватель HTTPS в GlassFish ищет сертификат по псевдониму, поэтому несоответствие псевдонима означает, что GlassFish не сможет найти ключ, и TLS не запустится.

Вариант A: создание CSR из существующего ключа s1as

Шаг 1: Перейдите в директорию config GlassFish

Откройте терминал и перейдите в директорию, где хранится хранилище ключей вашего домена. В стандартной установке это папка config домена domain1:

cd /opt/glassfish7/glassfish/domains/domain1/config

Скорректируйте путь в соответствии с тем, куда вы установили GlassFish (старые сборки GlassFish 4 вкладывают установку в корневую папку glassfish4/; Eclipse GlassFish 6, 7 и 8 обычно устанавливаются в glassfish7/, glassfish8/ или аналогичную папку). Если вы создали собственный домен, замените domain1 на имя этого домена. Выполните ls *.p12 *.jks в этой директории, чтобы узнать точное имя файла хранилища ключей: в Eclipse GlassFish 7.1 и новее вы увидите keystore.p12; в старых сборках — keystore.jks. Подставляйте это имя файла везде, где в командах ниже указано keystore.jks.

Шаг 2: Убедитесь, что запись s1as существует

Выведите содержимое хранилища ключей и проверьте, что s1as присутствует и является PrivateKeyEntry:

keytool -list -v -keystore keystore.jks -alias s1as

Введите пароль хранилища ключей (по умолчанию changeit; на рабочем сервере он должен совпадать с мастер-паролем вашего домена). В выводе должна присутствовать строка Entry type: PrivateKeyEntry. Если вместо этого появится сообщение Alias <s1as> does not exist, переходите к варианту B и создайте новую запись.

Шаг 3: Экспортируйте CSR с SAN

Современные браузеры и клиенты TLS проверяют сертификаты по расширению Subject Alternative Name (SAN), а не только по Common Name. Запросите SAN прямо в CSR, чтобы CA включил их в выданный сертификат:

keytool -certreq 
  -alias s1as 
  -keystore keystore.jks 
  -file glassfish.csr 
  -ext san=dns:yourdomain.com,dns:www.yourdomain.com

Что означают флаги:

  • -alias s1as: существующий псевдоним сертификата GlassFish. Приватный ключ под этим псевдонимом подписывает запрос.
  • -keystore keystore.jks: хранилище ключей GlassFish по умолчанию. Eclipse GlassFish 7.1 и новее поставляются с хранилищем PKCS12 с именем keystore.p12; старые сборки используют хранилище JKS с именем keystore.jks. Используйте то имя файла, которое реально существует в этой директории. Сама команда одинакова в обоих случаях; keytool сам определяет формат.
  • -file glassfish.csr: имя выходного файла CSR. Выберите любое удобное имя.
  • -ext san=dns:…: расширение Subject Alternative Name. Перечислите каждое имя хоста, которое должен покрывать сертификат, включая как голый корневой домен (yourdomain.com), так и субдомен www. Добавляйте дополнительные записи через запятую, например dns:api.yourdomain.com.

keytool запросит пароль хранилища ключей и запишет CSR в файл glassfish.csr в текущей директории. Поле Subject (Distinguished Name) CSR берётся из того, что хранится в записи s1as; в свежей установке GlassFish это автоматически сгенерированный самоподписанный сертификат, поэтому DN не будет соответствовать вашей компании. Большинство CA проверяют только Common Name и список SAN, позволяя переопределить остальные поля DN в форме заказа, но если вам нужен CSR, в котором DN уже содержит юридические данные вашей компании, используйте вариант B.

Вариант B: замена ключа s1as по умолчанию новым

Используйте этот вариант, если хотите полностью контролировать размер ключа и DN, или если предпочитаете не использовать повторно заводской ключ. Порядок действий: удалить запись s1as по умолчанию, создать новый ключ с тем же псевдонимом, затем экспортировать CSR. Сохранение псевдонима s1as означает, что вам не придётся впоследствии трогать domain.xml.

Шаг 1: Сделайте резервную копию хранилища ключей

Прежде чем что-либо удалять, скопируйте текущее хранилище ключей, чтобы иметь возможность откатиться при необходимости. Находясь в директории config домена:

cp keystore.jks keystore.jks.bak

Шаг 2: Удалите запись s1as по умолчанию

keytool -delete -alias s1as -keystore keystore.jks

Введите пароль хранилища ключей, когда будет предложено.

Шаг 3: Создайте новый приватный ключ с тем же псевдонимом

Сгенерируйте новый RSA-ключ длиной 2048 бит с псевдонимом s1as и укажите DN прямо в команде, чтобы она выполнялась без интерактивных запросов:

keytool -genkeypair 
  -alias s1as 
  -keyalg RSA -keysize 2048 
  -keystore keystore.jks 
  -dname "CN=www.yourdomain.com, O=Your Company LLC, L=San Jose, ST=California, C=US" 
  -validity 825

Что означают флаги:

  • -alias s1as: повторное использование псевдонима GlassFish по умолчанию, так что domain.xml не требует изменений.
  • -keyalg RSA -keysize 2048: RSA-ключ длиной 2048 бит является текущим публичным минимумом. Для новых ключей, которые вы планируете использовать несколько лет, разумным обновлением будет 3072 бита. Большинство публичных CA также принимают ECDSA (-keyalg EC -groupname secp256r1) для более компактного и быстрого ключа.
  • -keystore keystore.jks: хранилище ключей GlassFish по умолчанию. Подставьте keystore.p12 в Eclipse GlassFish 7.1 и новее. keytool сохраняет существующий формат хранилища (JKS в старых установках, PKCS12 в 7.1+); оба варианта здесь подходят.
  • -dname «CN=…»: поля Distinguished Name, записываемые в CSR. Укажите точные, юридически корректные данные вашей компании:
  • CN: точное FQDN, которое вы защищаете, например www.yourdomain.com, или wildcard-имя вроде *.yourdomain.com. Не вводите имя человека, несмотря на формулировку запроса keytool в интерактивном режиме.
  • O: полное юридическое название вашей компании.
  • L: полное название населённого пункта (без сокращений).
  • ST: полное название штата или региона (не используйте двухбуквенный код).
  • C: двухбуквенный код страны по ISO, например US, GB, DE.
  • OU (Organizational Unit): это поле больше не выдаётся публичными CA. Не включайте его в DN.

keytool запросит пароль хранилища ключей и пароль ключа. В домене GlassFish пароль хранилища ключей, пароль ключа и мастер-пароль домена должны совпадать, иначе GlassFish не сможет разблокировать ключ при запуске, и HTTPS не заработает. Нажмите Enter при запросе пароля ключа, чтобы использовать тот же пароль, что и у хранилища ключей.

Шаг 4: Экспортируйте CSR с SAN

Та же команда, что и в варианте A, но применённая к вашему новому ключу:

keytool -certreq 
  -alias s1as 
  -keystore keystore.jks 
  -file glassfish.csr 
  -ext san=dns:yourdomain.com,dns:www.yourdomain.com

Введите пароль хранилища ключей. keytool запишет CSR в файл glassfish.csr в текущей директории.

Важно: сохраняйте псевдоним s1as

Самая распространённая ошибка с keytool в GlassFish — изменение псевдонима на каком-то этапе, будь то при создании ключа или при импорте подписанного сертификата. Возникают два типа сбоев:

  • Неверный псевдоним у ключа. Прослушиватель HTTPS в GlassFish настроен на псевдоним s1as в domain.xml. Если вы создадите ключ с другим псевдонимом, GlassFish не сможет его найти, и прослушиватель откатится к самоподписанному сертификату по умолчанию (или не запустится вовсе). Если вам действительно нужен другой псевдоним, придётся обновить каждую ссылку на s1as в domain.xml соответствующим образом.
  • Неверный псевдоним при импорте. Когда CA возвращает подписанный сертификат, вы должны импортировать его обратно в тот же псевдоним, который содержит приватный ключ. Импорт с новым псевдонимом сохранит сертификат как отдельную доверенную запись без привязанного приватного ключа, и TLS работать не будет.

Запомните эти три значения, прежде чем закрыть терминал:

  • Псевдоним (по умолчанию s1as; сохраняйте его).
  • Путь к файлу хранилища ключей, например glassfish/domains/domain1/config/keystore.p12 (или keystore.jks в старых сборках).
  • Пароль хранилища ключей (который должен совпадать с мастер-паролем домена).

Проверьте CSR перед отправкой

Обнаружьте опечатки в DN или пропущенные SAN, прежде чем CA их проверит. Выведите содержимое CSR с помощью keytool:

keytool -printcertreq -file glassfish.csr

Либо, если установлен OpenSSL, используйте его:

openssl req -noout -text -in glassfish.csr

Убедитесь в трёх вещах в выводе: поле Subject отображает ваш точный DN, Subject Alternative Name перечисляет все нужные имена хостов, а размер Public-Key соответствует тому, что вы запросили (RSA 2048 бит или другое выбранное значение). Вы также можете вставить CSR в наш декодер CSR для аналогичной проверки прямо в браузере.

Отправьте CSR своему удостоверяющему центру

Откройте файл glassfish.csr в любом текстовом редакторе. Это обычный текстовый файл, начинающийся с ——BEGIN CERTIFICATE REQUEST—— и заканчивающийся строкой ——END CERTIFICATE REQUEST——. Скопируйте весь блок целиком, включая эти строки заголовка и окончания, и вставьте его в поле CSR при оформлении заказа у вашего CA. В Windows используйте Ctrl + A, затем Ctrl + C, чтобы захватить весь текст; в macOS используйте Cmd + A, затем Cmd + C.

После того как CA проверит ваш запрос и выдаст сертификат, продолжайте с разделом как установить SSL-сертификат на GlassFish. Вы импортируете цепочку CA как доверенную, затем импортируете подписанный сертификат обратно в псевдоним s1as в том же файле хранилища ключей (keystore.p12 в 7.1+, keystore.jks в старых сборках), и наконец настроите прослушиватель HTTPS на использование этого псевдонима.

Сэкономьте 10% на SSL-сертификатах при заказе сегодня!

Быстрая выдача, надежное шифрование, 99,99% доверия к браузеру, специализированная поддержка и 25-дневная гарантия возврата денег. Код купона: SAVE10

Детальное изображение дракона в полете
Написано

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