Keytool не является внутренней или внешней командой исполняемой программой или пакетным файлом
Что такое Keytool ?
Секретные ключи используются в симметричном шифровании. Во многих случаях симметричные ключи согласовываются при настройке безопасного соединения. Поэтому вы будете чаще хранить открытые и закрытые ключи, KeyStore чем секретные ключи.
Все это многообразие используется приложениями Java для:
Keystore умеет работать в ситуации, когда в процессе работы необходима аутентификация сервера и клиента, где все реализовано с помощью SSL соединения, подразумевающее использование приватных ключей и сертификатов и так же keystore применяется при односторонней аутентификации, но только на стороне сервера. Java KeyStore представлен классом java.security.KeyStore. Поскольку KeyStore общедоступен, пользователи JDK могут создавать дополнительные приложения безопасности, которые его используют.
Типы поддерживаемых форматов в keystore
Приложения могут выбирать различные типы реализаций хранилища ключей от разных поставщиков, используя фабричный метод getInstance, предоставленный в классе KeyStore . Тип хранилища ключей определяет хранилище и формат данных информации хранилища ключей, а также алгоритмы, используемые для защиты личных ключей в хранилище ключей и целостности самого хранилища ключей. Реализации Keystore разных типов несовместимы. keytool работает с любой файловой реализацией хранилища ключей. (Он обрабатывает расположение хранилища ключей, которое ему передается в командной строке, как имя файла и преобразует его в FileInputStream, из которого он загружает информацию о хранилище ключей.) Инструменты jarsigner и policytool, с другой стороны, могут читать хранилище ключей из любого места, которое можно указать с помощью URL.
Если вы не укажете явно тип хранилища ключей, инструменты выберут реализацию хранилища ключей просто на основании значения свойства keystore.type, указанного в файле свойств безопасности. Файл свойств безопасности называется java.security и находится в каталоге свойств безопасности JDK, java.home/lib/security. Каждый инструмент получает значение keystore.type, а затем проверяет все установленные на данный момент провайдеры, пока не найдет того, который реализует хранилища ключей этого типа. Затем он использует реализацию хранилища ключей от этого провайдера.
Где хранится Keystore и что такое алиас
Где скачать утилиту keytool
Утилита Keytool входит в состав Java SDK (или JRE), в большинстве компьютеров в основном установлена JRE версия. В Windows данную утилиту можно найти по пути:
Тут все зависит от разрядности Java. На скриншоте отмечен файл Keytool.exe.
Как запустить утилиту Keytool в Windows
Сейчас я вам расскажу, как вы можете запускать утилиту Keytool в операционных системах Windows. Откройте командную строку в режиме администратора. Далее выполните вот такую команду, чтобы перейти в расположение утилиты:
Далее вы просто пишите keytool.exe и нажимаете Enter, в результате чего вы увидите справку по утилите.
Так же утилиту keytool.exe вы можете запускать и в оболочке PowerShell. Откройте ее от имени администратора или другого пользователя с аналогичными правами. Для этого в оболочке введите:
После чего введите .keytool.exe
Команды и примеры использования утилиты Keytool
- Получение справки по утилите Keytool. Первое, что я хочу, чтобы вы научились, это использование справки, чтобы представлять, как строится конструкция команд и их возможности. Вводим просто Keytool, у вас появятся основные ключи, которые покажут, что вы можете делать через утилиту
Далее, чтобы получить дополнительные ключи по командам из первого списка, вам необходимо добавить ключ -help. Например, я хочу понять как строится команда по генерации пары ключей, для этого я пишу:
provider name
-providerclass
provider classpath
-v verbose output
-protected password through protected mechanism
- Создание самоподписного сертификата и файла хранилища сертификатов. Наверняка, это самый популярный сценарий, для чего используется утилита Keytool. Чтобы сгенерировать пару ключей в новом Keystore или уже существующем, вам необходимо выполнить:
Во время генерации вам необходимо заполнить следующую информацию:
В результате чего у вас будет сгенерирован ваш сертификат, и если файла keystore.jks не было, то он будет создан.
- Создание стандартного хранилища сертификатов отдельной командой:
- Создание хранилища формата PKCS12
- Создание пары ключей, напоминаю, что за это отвечает ключ genkeypair.
- Для того. чтобы посмотреть содержимое вашего хранилища сертификатов, вам необходимо выполнить команду:
Тут мы запросили список записей в файле keystore.jks, на выходе получили вот такой вывод. Как видно в моем примере их две.
- Можно посмотреть определенный алиас, через такую конструкцию:
- Генерация CSR запроса, о том, что это такое читайте по ссылке слева.Тут все просто:
- Экспорт сертификатов из хранилища, осуществляется вот так (Будет экспортирован открытый ключ с расширением cer):
- Импорт сертификатов через keytool. Ранее я экспортировал сертификат, и у меня остался файл pyatilistnik.cer, его я и помещу в свое хранилище keystore.jks. Для этого:
- Импорт промежуточного сертификата CA в существующее хранилище Java ключей
- Импорт корневого сертификата CA в существующее хранилище Java ключей
- Импорт подписанного первичного сертификата SSL в существующее хранилище Java ключей, ключ -trustcacerts добавит сертификат в доверенные
При импорте нового доверенного сертификата псевдоним не должен существовать в хранилище ключей. Перед добавлением сертификата в хранилище ключей keytool пытается проверить это, пытаясь построить цепочку доверия от этого сертификата до самозаверяющегося сертификата (принадлежащего корневому ЦС), используя доверенные сертификаты, которые уже доступны в хранилище ключей. Если была указана опция -trustcacerts, для цепочки доверия рассматриваются дополнительные сертификаты, а именно сертификаты в файле с именем cacerts.
Если keytool не может проверить доверие от импортируемого сертификата до самозаверяющего сертификата (либо из хранилища ключей, либо из файла «cacerts»), информация о сертификате распечатывается, и пользователю предлагается проверить его, например, путем сравнения отображенных отпечатков сертификатов с отпечатками, полученными из какого-либо другого (доверенного) источника информации, которым может быть сам владелец сертификата. Будьте очень осторожны, чтобы убедиться, что сертификат действителен, прежде чем импортировать его как «доверенный» сертификат!
Файл cacerts должен содержать только сертификаты доверенных центров сертификации. Вы несете ответственность за проверку сертификатов доверенного корневого CA, включенных в файл cacerts, и принятие собственных решений о доверии. Чтобы удалить ненадежный сертификат CA из файла cacerts, используйте опцию delete команды keytool. Вы можете найти файл Cacerts в каталоге установки JRE. Если посмотреть список того, что уже есть по умолчанию в данном файле, то вы увидите 94 записи, но может быть и больше.
- Как изменить тип хранилища сертификатов с PFX на JKS
- Как преобразовать LKS хранилище в PFX
Я пытаюсь найти список доверенных органов в моей среде выполнения Java, используя инструкции в этой статье. Когда я набрал команду ниже:
я получил следующую ошибку:
Я проверил, что каталог, содержащий мой исполняемый файл keytool, находится в пути. (На моей машине Windows 7 он находится в C:Program Files (x86)Javajre6in ) Несмотря на это, командная строка не распознает .
Я предполагаю, что есть две отдельные команды, упомянутые в doc:
C:CFusionMX
untimejrelib>keytool -list -storepass changeit -noprompt -keystore
EDIT:
кстати, могу ли я использовать следующий процесс вместо сложных шагов, упомянутых в ответе?
-
когда я открыл WSDL в своем браузере, Я увидел значок замка, когда я нажал на него, открылось окно "сертификат"
затем я нажал на "Установить сертификат"
окно Мастера импорта сертификатов открылось, я нажал на кнопку Далее я увидел два варианта
- a) автоматически выбрать хранилище сертификатов в зависимости от типа сертификата (этот параметр был выбран автоматически)
- b) Поместите все сертификаты в следующее магазин
я решил выбрать вариант (b) , но я смущен, какое хранилище сертификатов я должен выбрать здесь.
по умолчанию truststore является файлом cacerts JRE. Этот файл обычно находится в следующем места:
Конфигурация Сервера:
cf_root / runtime/jre/lib/безопасность / cacerts
Multiserver / J2EE на конфигурации JRun 4:
установка Sun JDK:
обратитесь к документации для других серверов приложений J2EE и JVMs
keytool является частью Java SDK и может быть найден в следующих местах:
Конфигурация Сервера:
cf_root / runtime/bin / keytool
Multiserver / J2EE на конфигурации JRun 4:
установка Sun JDK:
обратитесь к документации для других серверов приложений J2EE и JVMs
поэтому, если вы перейдете в каталог, где keytool исполняемый файл находится ваша командная строка будет выглядеть примерно так:
вам нужно будет предоставить информацию о паттинге в зависимости от того, где вы запускаете команду keytool откуда и где находится файл сертификата.
кроме того, убедитесь, что вы обновляете правильный файл cacerts, который использует ColdFusion. Если на этом сервере установлено несколько JRE. Вы можете проверить, что JRE ColdFusion использует от администратора под "системной информацией". Ищите домашнюю линию Java.
добавить JDK в / bin до PATH переменные среды. Вы можете сделать это в разделе Системные настройки > переменные среды или через CLI:
закройте и откройте окно CLI
запустите cmd как Запуск от имени администратора это работает для меня
выполнить следующую команду:
set PATH="C:Program Files (x86)Javajre7"
(в зависимости от JRE существует в случае 64bit).
потому что ваш путь Java не установлен, так что вы можете просто сделать это в командной строке и выполните keytool команда import.
Когда я попытался запустить эту команду "keytool -genkey -v -keystore example.keystore -alias example -keyalg RSA -keysize 2048 -validity 10000" В нем сказано: "keytool не является внутренней или внешней командой, действующей программа или пакетный файл "Я проверил экологическую переменную, и они верны, Любая помощь может быть оценена, спасибо заранее
Перейдите в папку bin в папке установки Java (C:Program Files (x86)Javajre1.8.0_60in) или аналогичной, и нажмите правой кнопкой мыши> Командная строка, теперь вы выполняете команду, где keytool фактически является, Все еще получаете ошибку?
Я пытаюсь найти список доверенных органов в моей среде выполнения Java, используя инструкции в этой статье. Когда я набрал команду ниже:
я получил следующую ошибку:
'' не распознается как внутренней или внешней командой, исполняемой программой или пакетным файлом.
Я проверил, что каталог, содержащий мой исполняемый файл keytool, находится в пути. (На моей машине Windows 7 он находится в C:Program Files (x86)Javajre6bin ) Несмотря на это, командная строка не распознает .
Я предполагаю, что есть две отдельные команды, упомянутые в doc:
C:CFusionMXruntimejrelib>keytool -list -storepass changeit -noprompt -keystore
EDIT:
кстати, могу ли я использовать следующий процесс вместо сложных шагов, упомянутых в ответе?
-
когда я открыл WSDL в своем браузере, Я увидел значок замка, когда я нажал на него, открылось окно "сертификат"
затем я нажал на "Установить сертификат"
окно Мастера импорта сертификатов открылось, я нажал на кнопку Далее я увидел два варианта
- a) автоматически выбрать хранилище сертификатов в зависимости от типа сертификата (этот параметр был выбран автоматически)
- b) Поместите все сертификаты в следующее магазин
я решил выбрать вариант (b) , но я смущен, какое хранилище сертификатов я должен выбрать здесь.
вы получаете эту ошибку, потому что keytool исполняемый файл под , а не lib каталог в вашем примере. И вам нужно будет добавить местоположение вашего keystore также в командной строке. Есть очень хорошая ссылка на все это здесь - справка Jrun / импорт сертификатов / хранилища сертификатов / ColdFusion
Конфигурация Сервера:
cf_root / runtime/jre/lib/безопасность / cacerts
Multiserver / J2EE на конфигурации JRun 4:
jrun_root/jre/lib/безопасность / cacerts
установка Sun JDK:
jdk_root/jre/lib/безопасность / cacerts
обратитесь к документации для других серверов приложений J2EE и JVMs
Конфигурация Сервера:
cf_root / runtime/bin / keytool
Multiserver / J2EE на конфигурации JRun 4:
jrun_root/jre/bin / keytool
установка Sun JDK:
jdk_root/bin / keytool
обратитесь к документации для других серверов приложений J2EE и JVMs
поэтому, если вы перейдете в каталог, где keytool исполняемый файл находится ваша командная строка будет выглядеть примерно так:
вам нужно будет предоставить информацию о паттинге в зависимости от того, где вы запускаете команду keytool откуда и где находится файл сертификата.
кроме того, убедитесь, что вы обновляете правильный файл cacerts, который использует ColdFusion. Если на этом сервере установлено несколько JRE. Вы можете проверить, что JRE ColdFusion использует от администратора под "системной информацией". Ищите домашнюю линию Java.
добавить JDK в / bin до PATH переменные среды. Вы можете сделать это в разделе Системные настройки > переменные среды или через CLI:
закройте и откройте окно CLI
запустите cmd как Запуск от имени администратора это работает для меня
выполнить следующую команду:
set PATH="C:\Program Files (x86)\Java\jre7"
(в зависимости от JRE существует в случае 64bit).
потому что ваш путь Java не установлен, так что вы можете просто сделать это в командной строке и выполните keytool команда import.
Что такое Keytool ?
Keytool - это утилита командной строки, для управления ключами или сертификатами, а так же хранилищами ключей. Она позволяет пользователям управлять своими собственными парами открытых и закрытых ключей и связанными сертификатами для использования при аутентификации, где от пользователя, это требует конечный сервис или службах целостности данных и аутентификации с использованием цифровых подписей. Keytool также позволяет пользователям администрировать секретные ключи, используемые при симметричном шифровании/дешифровании (например, DES). Пользователь имеет возможность самостоятельно генерировать эти пары ключей, после чего он их сохраняет в хранилище ключей (keystore).
Keystore - это защищенный файл или правильнее сказать база данных, которая выступает в роли специального, защищенного хранилища открытых ключей, сертификатов, секретных ключей.
Закрытый и открытый ключи используются в асимметричном шифровании. Открытый ключ может иметь связанный сертификат. Сертификат - это цифровой документ, удостоверяющий личность человека, организации или устройства, претендующего на владение открытым ключом. Сертификат обычно имеет цифровую подпись проверяющей стороны в качестве доказательства (Удостоверяющие центры).
Секретные ключи используются в симметричном шифровании. Во многих случаях симметричные ключи согласовываются при настройке безопасного соединения. Поэтому вы будете чаще хранить открытые и закрытые ключи, KeyStore чем секретные ключи.
Все это многообразие используется приложениями Java для:
Keystore умеет работать в ситуации, когда в процессе работы необходима аутентификация сервера и клиента, где все реализовано с помощью SSL соединения, подразумевающее использование приватных ключей и сертификатов и так же keystore применяется при односторонней аутентификации, но только на стороне сервера. Java KeyStore представлен классом java.security.KeyStore. Поскольку KeyStore общедоступен, пользователи JDK могут создавать дополнительные приложения безопасности, которые его используют.
Типы поддерживаемых форматов в keystore
- pkcs12 - это один из типов хранилища, заточенный чисто под хранение и перенос закрытых ключей пользователя, сертификатов.
- jceks - сторонняя разработка хранилища, отличная более стойким шифрованием на основе triple DES. Позволяет обновлять существующие jks-хранилища до jceks
- jks - это самый обычный, стандартный тип хранилища, в виде простого файла имеющего расширение jks ("java key storage"), устанавливается по умолчанию и, поэтому, применяется наиболее часто.
Реализации Keystore основаны на провайдере. Более конкретно, интерфейсы приложений, предоставляемые KeyStore, реализованы в терминах "Интерфейс поставщика услуг" (Service Provider Interface - SPI). То есть существует соответствующий абстрактный класс KeystoreSpi, также в пакете java.security, который определяет методы интерфейса поставщика услуг, которые должны реализовывать " провайдеры-поставщики". (Термин «поставщик» относится к пакету или набору пакетов, которые предоставляют конкретную реализацию подмножества служб, к которым может обращаться API безопасности Java.)
Приложения могут выбирать различные типы реализаций хранилища ключей от разных поставщиков, используя фабричный метод getInstance, предоставленный в классе KeyStore . Тип хранилища ключей определяет хранилище и формат данных информации хранилища ключей, а также алгоритмы, используемые для защиты личных ключей в хранилище ключей и целостности самого хранилища ключей. Реализации Keystore разных типов несовместимы. keytool работает с любой файловой реализацией хранилища ключей. (Он обрабатывает расположение хранилища ключей, которое ему передается в командной строке, как имя файла и преобразует его в FileInputStream, из которого он загружает информацию о хранилище ключей.) Инструменты jarsigner и policytool, с другой стороны, могут читать хранилище ключей из любого места, которое можно указать с помощью URL.
Если вы не укажете явно тип хранилища ключей, инструменты выберут реализацию хранилища ключей просто на основании значения свойства keystore.type, указанного в файле свойств безопасности. Файл свойств безопасности называется java.security и находится в каталоге свойств безопасности JDK, java.home/lib/security. Каждый инструмент получает значение keystore.type, а затем проверяет все установленные на данный момент провайдеры, пока не найдет того, который реализует хранилища ключей этого типа. Затем он использует реализацию хранилища ключей от этого провайдера.
Где хранится Keystore и что такое алиас
Где скачать утилиту keytool
Утилита Keytool входит в состав Java SDK (или JRE), в большинстве компьютеров в основном установлена JRE версия. В Windows данную утилиту можно найти по пути:
Тут все зависит от разрядности Java. На скриншоте отмечен файл Keytool.exe.
Как запустить утилиту Keytool в Windows
Сейчас я вам расскажу, как вы можете запускать утилиту Keytool в операционных системах Windows. Откройте командную строку в режиме администратора. Далее выполните вот такую команду, чтобы перейти в расположение утилиты:
cd C:\Program Files (x86)\Java\jre1.8.0_201\bin\ или cd C:\Program Files\Java\jre1.8.0_201\bin\ (Хочу отметить, что у вас будет своя версия отличная моей jre1.8.0_201)Далее вы просто пишите keytool.exe и нажимаете Enter, в результате чего вы увидите справку по утилите.
Так же утилиту keytool.exe вы можете запускать и в оболочке PowerShell. Откройте ее от имени администратора или другого пользователя с аналогичными правами. Для этого в оболочке введите:
После чего введите .\keytool.exe
Команды и примеры использования утилиты Keytool
- Получение справки по утилите Keytool. Первое, что я хочу, чтобы вы научились, это использование справки, чтобы представлять, как строится конструкция команд и их возможности. Вводим просто Keytool, у вас появятся основные ключи, которые покажут, что вы можете делать через утилиту
Key and Certificate Management Tool
-certreq - генерация CSR запроса
-changealias - изменить запись алиаса
-delete - удалить запись
-exportcert - экспортировать сертификат
-genkeypair - генерация пары ключей
-genseckey - генерация секретного ключа
-gencert - генерация сертификата из csr запроса
-importcert - импорт сертификата или цепочки
-importpass - импорт паролей
-importkeystore - импорт одной или нескольких записей из другого Keystore
-keypasswd - изменить пароль у записи
-list - список всех записей в хранилище сертификатов
-printcert - вывод содержимого сертификата
-printcertreq - вывод содержимого CSR запроса
-printcrl - вывод содержимого CRL запроса
-storepasswd - изменить пароль на Keystore
Далее, чтобы получить дополнительные ключи по командам из первого списка, вам необходимо добавить ключ -help. Например, я хочу понять как строится команда по генерации пары ключей, для этого я пишу:
keytool.exe -genkeypair -help и получаю вывод дополнительных ключей:-alias <alias> alias name of the entry to process
-keyalg <keyalg> key algorithm name
-keysize <keysize> key bit size
-sigalg <sigalg> signature algorithm name
-destalias <destalias> destination alias
-dname <dname> distinguished name
-startdate <startdate> certificate validity start date/time
-ext <value> X.509 extension
-validity <valDays> validity number of days
-keypass <arg> key password
-keystore <keystore> keystore name
-storepass <arg> keystore password
-storetype <storetype> keystore type
-providername <providername> provider name
-providerclass <providerclass> provider class name
-providerarg <arg> provider argument
-providerpath <pathlist> provider classpath
-v verbose output
-protected password through protected mechanism
Причины ошибки «Не является внутренней или внешней командой» при выполнении команд в командной строке Windows 10 и Windows 11
Для того, чтобы понять суть ошибки, давайте рассмотрим, что происходит при выполнении команды в командной строке, в качестве примера будем использовать такой код:
- В случае, если «команда» является собственной встроенной командой консоли (в качестве примера — cls), она выполняется с заданными параметрами.
- Если «команда» — это какой-то файл .exe, .cmd, .bat или иной, например, pip, python или adb, выполняется попытка его запуска из расположения, где запущена командная строка (выделено на изображении ниже) или из расположений, добавленных в системную переменную PATH (о которой поговорим подробнее далее). При удачном запуске и правильно переданных параметрах команда выполняется.
Отсюда следуют наиболее распространённые причины появления ошибки при выполнении команды:
- Самая распространённая причина — отсутствие исполняемого файла в папке, где запущена командная строка и в папках, содержащихся в PATH.
- Ошибки при написании команды: при ошибке в имени файла, он не будет найден, что и приведёт к указанной ошибке.
- Файл отсутствует где-либо, например, вы пробуете использовать telnet, в то время, когда соответствующий компонент Windows не установлен.
- Редко — запускаемый через командную строку файл действительно не является исполняемой программой: изначально сам по себе или из-за повреждений.
Теперь о том, что делать в рассматриваемой ситуации.
Для исправления ошибки «Не является внутренней или внешней командой, исполняемой программой или пакетным файлом» в зависимости от ситуации можно использовать следующие подходы.
Переход к папке с исполняемым файлом в командной строке
Если выполнение команды требуется не на регулярной основе, достаточно перейти в командной строке в папку, содержащую нужный файл, делается это следующим образом:
- Например, мы знаем, что python.exe для последней версии Python на момент написания этой статьи располагается в папкеpip.exe — там же во вложенной папке Scripts (если окажется не ясным, как попасть в эту папку, процесс показан в видео ниже), adb.exe — где-то в папке с platform-tools и так далее. Скопируйте этот путь, сделать это можно из адресной строки проводника.
- Если командная строка запущена на том же диске, где находится нужный исполняемый файл, введите команду вида:
- Если командная строка запущена на диске C:, а исполняемый файл находится на другом диске, то перед 2-м шагом используйте команду вида (здесь D меняем на нужную букву диска) D: с последующим нажатием Enter.
- Введите нужную команду, которая ранее сообщала об ошибке — теперь она должна выполниться успешно.
Добавление папки с программой в системную переменную среды PATH
В случае, когда использование команд требуется регулярно, например, для git, разумным будет добавить папку с этим исполняемым файлом в PATH, чтобы затем в любой момент времени выполнять команды, независимо от того, в какой папке открыта командная строка:
Примечание: если ошибка возникает при использовании команд python, обратите внимание, что при первоначальной установке вам предложат добавить необходимые пути в PATH (отметка Add Python to PATH), то же самое часто бывает и при установке других программ:
Установка недостающих компонентов
Иногда проблема возникает из-за того, что нужный файл попросту отсутствует на компьютере:
- Вы пробуете использовать команды telnet, но не зашли в Панель управления —Программы и компоненты — Включение или отключение компонентов Windows и не включили «Клиент Telnet».
- Запускаете команды pyinstaller, но предварительно не установили его командой pip install pyinstaller
- Пробуете использовать команды adb.exe, но не установили необходимые компоненты Android SDK Platform Tools.
Аналогичная ситуация может быть и для многих других, не входящих в стандартную поставку Windows 10 и Windows 11 компонентов, например, java.
Если ошибка возникает при запуске системных инструментов Windows
Видео инструкция
Надеюсь, статья и видео помогли разобраться с проблемой и помогли в её решении. Остаются вопросы? — задавайте их в комментариях, я постараюсь ответить.
Читайте также: