Во время разработки клиента веб-сервиса Java я столкнулся с проблемой. Аутентификация для веб-сервиса использует сертификат клиента, имя пользователя и пароль. Клиентский сертификат, полученный от компании за веб-сервисом, имеет .cer
формат. Когда я проверяю файл с помощью текстового редактора, он имеет следующее содержимое:
-----BEGIN CERTIFICATE-----
[Some base64 encoded data]
-----END CERTIFICATE-----
Я могу импортировать этот файл в качестве сертификата в Internet Explorer (без необходимости ввода пароля!) И использовать его для аутентификации в веб-сервисе.
Мне удалось импортировать этот сертификат в хранилище ключей, сначала обрезав первую и последнюю строку, преобразовав в unix новые строки и выполнив base64-декодирование. Полученный файл можно импортировать в хранилище ключей (используя keytool
команду). Когда я перечисляю записи в хранилище ключей, эта запись имеет тип trustedCertEntry
. Из-за этого типа записи (?) Я не могу использовать этот сертификат для аутентификации в веб-сервисе. Я начинаю думать, что предоставленный сертификат является публичным сертификатом, который используется для аутентификации ...
Обходной путь, который я нашел, состоит в том, чтобы импортировать сертификат в IE и экспортировать его как .pfx
файл. Этот файл может быть загружен как хранилище ключей и может использоваться для аутентификации с помощью веб-службы. Однако я не могу ожидать, что мои клиенты будут выполнять эти шаги каждый раз, когда они получают новый сертификат. Поэтому я хотел бы загрузить .cer
файл непосредственно в Java. Есть предположения?
Дополнительная информация: компания, стоящая за веб-сервисом, сказала мне, что сертификат следует запрашивать (используя IE и веб-сайт) с ПК и пользователя, который позже импортирует сертификат.
источник
Импортирование
.cer
файла сертификата, загруженного из браузера (откройте url и копайте подробности) в хранилище ключей cacerts,java_home\jre\lib\security
работало для меня, в отличие от попыток создать и использовать мое собственное хранилище ключей.java_home\jre\lib\security
cmd
и CTRL+ SHIFT+ENTERyourAliasName
иpath\to\certificate.cer
соответственно)Таким образом, вам не нужно указывать какие-либо дополнительные параметры JVM, и сертификат должен быть распознан JRE.
источник
java_home\jdk_x.xx\jre\lib\security
Для абсолютного пути используйте обратную косую черту, например,"C:\myCert.crt"
кавычки не обязательны, если путь не содержит пробелов.Вот код, который я использовал для программного импорта файлов .cer в новый KeyStore.
источник
Вам не нужно вносить какие-либо изменения в сертификат. Вы уверены, что используете правильную команду импорта?
Следующие работы для меня:
где mycert.cer содержит:
источник
Инструмент с открытым исходным кодом GUI доступен на keystore-explorer.org
Помогут следующие скрины (они с официального сайта)
Экран по умолчанию, который вы получите, выполнив команду:
И пойти
Examine
иExamine a URL
вариант , а затем дать веб - адрес , который вы хотите импортировать.Окно результатов будет, как показано ниже, если вы дадите ссылку на сайт Google.
Это один из вариантов использования, а остальное зависит от пользователя (все кредиты идут на keystore-explorer.org ).
источник
Сертификат, который у вас уже есть, - это, вероятно, сертификат сервера или сертификат, используемый для подписи сертификата сервера. Он понадобится вам, чтобы ваш клиент веб-службы мог аутентифицировать сервер.
Но если дополнительно вам необходимо выполнить аутентификацию клиента с помощью SSL, то вам необходимо получить собственный сертификат для аутентификации клиента веб-службы. Для этого вам необходимо создать запрос на сертификат; Процесс включает в себя создание собственного закрытого ключа и соответствующего открытого ключа, а также присоединение этого открытого ключа вместе с частью вашей информации (адрес электронной почты, имя, доменное имя и т. д.) к файлу, который называется запросом сертификата. Затем вы отправляете этот запрос на сертификат в компанию, которая уже попросила его, и они создадут ваш сертификат, подписав ваш открытый ключ своим закрытым ключом, и отправят вам обратно файл X509 с вашим сертификатом, который вы можете добавьте его в хранилище ключей, и вы будете готовы подключиться к веб-службе с использованием SSL, требующего аутентификации клиента.
Чтобы сгенерировать запрос сертификата, используйте «keytool -certreq -alias -file -keypass -keystore». Отправьте полученный файл в компанию, которая собирается его подписать.
Когда вы вернете свой сертификат, запустите "keytool -importcert -alias -keypass -keystore".
Вам может понадобиться использовать -storepass в обоих случаях, если хранилище ключей защищено (что является хорошей идеей).
источник
Вот скрипт, который я использовал для пакетного импорта набора файлов crt из текущего каталога в хранилище ключей java. Просто сохраните его в той же папке, что и ваш сертификат, и запустите его так:
import_all_certs.sh
источник
Вот как это работает для меня:
источник