1. Обзор
В этом коротком уроке мы познакомимся с командой keytool
. Мы узнаем, как использовать keytool
для создания нового сертификата и проверки информации для этого сертификата.
2. Что такое keytool?
Java включает утилиту keytool
в свои выпуски. Мы используем его для управления ключами и сертификатами и хранения их в хранилище ключей. Команда keytool
позволяет нам создавать самозаверяющие сертификаты и отображать информацию о хранилище ключей.
В следующих разделах мы рассмотрим различные функции этой утилиты.
3. Создание самозаверяющего сертификата
Прежде всего, давайте создадим самозаверяющий сертификат, который можно будет использовать, например, для установления безопасной связи между проектами в нашей среде разработки.
Чтобы сгенерировать сертификат , мы собираемся открыть приглашение командной строки и использовать команду keytool с параметром
-genkeypair
:
keytool -genkeypair -alias <alias> -keypass <keypass> -validity <validity> -storepass <storepass>
Давайте узнаем больше о каждом из этих параметров:
псевдоним
— имя для нашего сертификатаkeypass
– пароль сертификата. Нам понадобится этот пароль, чтобы иметь доступ к закрытому ключу нашего сертификата.действительность
— время (в днях) действия нашего сертификатаstorepass
— пароль для хранилища ключей. Это будет пароль хранилища ключей, если хранилище не существует.
Например, давайте создадим сертификат с именем «cert1»
, который имеет закрытый ключ «pass123»
и действителен в течение одного года. Мы также укажем «stpass123»
в качестве пароля хранилища ключей:
keytool -genkeypair -alias cert1 -keypass pass123 -validity 365 -storepass stpass123
После выполнения команды она запросит некоторую информацию, которую нам нужно будет предоставить:
What is your first and last name?
[Unknown]: Name
What is the name of your organizational unit?
[Unknown]: Unit
What is the name of your organization?
[Unknown]: Company
What is the name of your City or Locality?
[Unknown]: City
What is the name of your State or Province?
[Unknown]: State
What is the two-letter country code for this unit?
[Unknown]: US
Is CN=Name, OU=Unit, O=Company, L=City, ST=State, C=US correct?
[no]: yes
Как уже упоминалось, если мы не создали хранилище ключей раньше, создание этого сертификата создаст его автоматически.
Мы также можем выполнить опцию -genkeypair
без параметров. Если мы не укажем их в командной строке и они обязательны, нам будет предложено ввести их.
Обратите внимание, что обычно не рекомендуется указывать пароли ( -keypass
или -storepass
) в командной строке в рабочих средах .
4. Список сертификатов в хранилище ключей
Далее мы узнаем, как просматривать сертификаты , хранящиеся в нашем хранилище ключей. Для этой цели мы будем использовать опцию -list
:
keytool -list -storepass <storepass>
Вывод для выполненной команды покажет сертификат, который мы создали:
Keystore type: JKS
Keystore provider: SUN
Your keystore contains 1 entry
cert1, 02-ago-2020, PrivateKeyEntry,
Certificate fingerprint (SHA1): 0B:3F:98:2E:A4:F7:33:6E:C4:2E:29:72:A7:17:E0:F5:22:45:08:2F
Если мы хотим получить информацию для конкретного сертификата , нам просто нужно включить опцию -alias
в нашу команду. Чтобы получить больше информации, чем предоставляется по умолчанию, мы также добавим параметр -v
(подробный):
keytool -list -v -alias <alias> -storepass <storepass>
Это предоставит нам всю информацию, связанную с запрошенным сертификатом:
Alias name: cert1
Creation date: 02-ago-2020
Entry type: PrivateKeyEntry
Certificate chain length: 1
Certificate[1]:
Owner: CN=Name, OU=Unit, O=Company, L=City, ST=State, C=US
Issuer: CN=Name, OU=Unit, O=Company, L=City, ST=State, C=US
Serial number: 11d34890
Valid from: Sun Aug 02 20:25:14 CEST 2020 until: Mon Aug 02 20:25:14 CEST 2021
Certificate fingerprints:
MD5: 16:F8:9B:DF:2C:2F:31:F0:85:9C:70:C3:56:66:59:46
SHA1: 0B:3F:98:2E:A4:F7:33:6E:C4:2E:29:72:A7:17:E0:F5:22:45:08:2F
SHA256: 8C:B0:39:9F:A4:43:E2:D1:57:4A:6A:97:E9:B1:51:38:82:0F:07:F6:9E:CE:A9:AB:2E:92:52:7A:7E:98:2D:CA
Signature algorithm name: SHA256withDSA
Subject Public Key Algorithm: 2048-bit DSA key
Version: 3
Extensions:
#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: A1 3E DD 9A FB C0 9F 5D B5 BE 2E EC E2 87 CD 45 .>.....].......E
0010: FE 0B D7 55 ...U
]
]
5. Другие функции
Помимо функций, которые мы уже видели, в этом инструменте доступно множество дополнительных функций .
Например, мы можем удалить созданный нами сертификат из хранилища ключей:
keytool -delete -alias <alias> -storepass <storepass>
Другой пример: мы даже сможем изменить псевдоним сертификата :
keytool -changealias -alias <alias> -destalias <new_alias> -keypass <keypass> -storepass <storepass>
Наконец, чтобы получить больше информации об инструменте, мы можем обратиться за помощью через командную строку:
keytool -help
6. Заключение
В этом кратком руководстве мы немного узнали об утилите keytool
. Мы также научились использовать некоторые основные функции, включенные в этот инструмент.