Как импортировать сертификат. cer в хранилище ключей java?
во время разработки клиента Java webservice я столкнулся с проблемой. Аутентификация для веб-службы использует сертификат клиента, имя пользователя и пароль. Сертификат клиента, который я получил от компании, стоящей за веб-сервисом, находится в . Когда я проверяю файл с помощью текстового редактора, он имеет следующее содержимое:
-----BEGIN CERTIFICATE-----
[Some base64 encoded data]
-----END CERTIFICATE-----
Я могу импортировать этот файл в качестве сертификата в Internet Explorer (без необходимости вводить пароль!) и использовать его для аутентификация с помощью веб-сервиса.
я смог импортировать этот сертификат в хранилище ключей, сначала очистив первую и последнюю строку, преобразовав в новые строки unix и запустив base64-decode. Полученный файл можно импортировать в хранилище ключей (используя ). Когда я перечисляю записи в хранилище ключей, эта запись имеет тип trustedCertEntry. Из-за этого типа записи (?) Я не могу использовать этот сертификат для аутентификации в веб-сервисе. Я начинаю думать, что предоставленный сертификат является общедоступным сертификатом, который используется для проверки подлинности...
обходной путь, который я нашел, состоит в том, чтобы импортировать сертификат в IE и экспортировать его как . Этот файл может быть загружен как хранилище ключей и может использоваться для аутентификации с помощью веб-сервиса. Однако я не могу ожидать, что мои клиенты будут выполнять эти шаги каждый раз, когда они получают новый сертификат. Поэтому я хотел бы загрузить .cer файл непосредственно в Java. Есть мысли?
дополнительные информация: компания, стоящая за веб-сервисом, сказала мне, что сертификат должен быть запрошен (с помощью IE и веб-сайта) с ПК и пользователя, который позже импортирует сертификат.
8 ответов:
- Если вы хотите пройти аутентификацию, вам нужен закрытый ключ. Другого выхода нет.
- сертификат-это открытый ключ с дополнительными свойствами (например, название компании, Страна,...) подписывается каким-либо центром сертификации, который гарантирует, что вложенные свойства являются истинными.
- .Файлы CER являются сертификатами и не имеют закрытого ключа. Закрытый ключ имеется .Файл хранилища ключей файла нормально. Если вы действительно аутентифицируетесь, потому что у вас уже было импортированный закрытый ключ.
вы обычно можете импортировать .Сертификаты CER без каких-либо проблем с
keytool -importcert -file certificate.cer -keystore keystore.jks -alias "Alias"
импорт
.cerфайл сертификата, загруженный из браузера (откройте url и копайте для деталей) в cacerts keystore injava_home\jre\lib\securityработал на меня, в отличие от попыток генерировать и использовать мое собственное хранилище ключей.
- иди к своему
java_home\jre\lib\security- ( Windows) откройте там командную строку администратора с помощью
cmdи CTRL+SHIFT+введите- выполнить keytool, чтобы импортировать сертификат:
- (вместо
yourAliasNameиpath\to\certificate.cerсоответственно)..\..\bin\keytool -import -trustcacerts -keystore cacerts -storepass changeit -noprompt -alias yourAliasName -file path\to\certificate.cerтаким образом, вам не нужно указывать какие-либо дополнительные параметры JVM, и сертификат должен быть распознан JRE.
вот код, который я использую для программного импорта .CER файлы в новое хранилище ключей.
import java.io.BufferedInputStream; import java.io.IOException; import java.io.InputStream; //VERY IMPORTANT. SOME OF THESE EXIST IN MORE THAN ONE PACKAGE! import java.security.GeneralSecurityException; import java.security.KeyStore; import java.security.cert.Certificate; import java.security.cert.CertificateFactory; //Put everything after here in your function. KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType()); trustStore.load(null);//Make an empty store InputStream fis = /* insert your file path here */; BufferedInputStream bis = new BufferedInputStream(fis); CertificateFactory cf = CertificateFactory.getInstance("X.509"); while (bis.available() > 0) { Certificate cert = cf.generateCertificate(bis); trustStore.setCertificateEntry("fiddler"+bis.available(), cert); }
вы не должны вносить никаких изменений в сертификат. Вы уверены, что используете правильную команду импорта?
следующие работы для меня:
keytool -import -alias joe -file mycert.cer -keystore mycerts -storepass changeitгде файл mycert.КВЖД содержит:
-----BEGIN CERTIFICATE----- MIIFUTCCBDmgAwIBAgIHK4FgDiVqczANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE BhMCVVMxEDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAY ... RLJKd+SjxhLMD2pznKxC/Ztkkcoxaw9u0zVPOPrUtsE/X68Vmv6AEHJ+lWnUaWlf zLpfMEvelFPYH4NT9mV5wuQ1Pgurf/ydBhPizc0uOCvd6UddJS5rPfVWnuFkgQOk WmD+yvuojwsL38LPbtrC8SZgPKT3grnLwKu18nm3UN2isuciKPF2spNEFnmCUWDc MMicbud3twMSO6Zbm3lx6CToNFzP -----END CERTIFICATE-----
сертификат, который у вас уже есть, вероятно, является сертификатом сервера или сертификатом, используемым для подписи сертификата сервера. Он вам понадобится, чтобы ваш клиент веб-службы мог аутентифицировать сервер.
но если дополнительно вам нужно выполнить аутентификацию клиента с помощью SSL, то вам нужно получить свой собственный сертификат, чтобы аутентифицировать ваш клиент веб-службы. Для этого вам нужно создать запрос на сертификат; процесс включает в себя создание собственного закрытого ключа, и соответствующий открытый ключ, и прикрепление этого открытого ключа вместе с некоторой вашей информацией (электронная почта, имя, доменное имя и т. д.) к файлу, который называется запросом сертификата. Затем вы отправляете этот запрос сертификата в компанию, которая уже попросила вас об этом, и они создадут ваш сертификат, подписав ваш открытый ключ своим закрытым ключом, и они отправят вам обратно файл X509 с вашим сертификатом, который теперь вы можете добавить в свое хранилище ключей, и вы будете готовы подключиться к веб-сайту служба с использованием SSL, требующая проверки подлинности клиента.
чтобы сгенерировать запрос сертификата, используйте " keytool-certreq-alias-file-keypass-keystore ". Отправьте полученный файл в компанию, которая собирается его подписать.
когда вы вернете свой сертификат, запустите " keytool-importcert-alias-keypass-keystore ".
возможно, Вам потребуется использовать-storepass в обоих случаях, если хранилище ключей защищено (что является хорошей идеей).
инструмент GUI с открытым исходным кодом доступен по адресу keystore-explorer.org
KeyStore Explorer
KeyStore Explorer-это замена графического интерфейса с открытым исходным кодом для Java командной строки утилиты keytool и jarsigner. Хранилище Эксплорер представляет их функциональность, и больше, через интуитивное графическое пользовательский интерфейс.
следующие экраны помогут (они от официального сайт)
экран по умолчанию, который вы получаете, выполнив команду:
shantha@shantha:~$./Downloads/kse-521/kse.shи перейти к
ExamineиExamine a URLопция, а затем дать веб-URL, который вы хотите импортировать.окно результатов будет, как показано ниже, если вы даете ссылку на сайт google.
Это один из вариантов использования, а остальное зависит от пользователя(все кредиты идут в keystore-explorer.org)
вот скрипт, который я использовал для пакетного импорта кучи файлов crt в текущем каталоге в хранилище ключей java. Просто сохраните это в ту же папку, что и ваш сертификат, и запустите его следующим образом:
./import_all_certs.shimport_all_certs.sh
KEYSTORE="$(/usr/libexec/java_home)/jre/lib/security/cacerts"; function running_as_root() { if [ "$EUID" -ne 0 ] then echo "NO" exit fi echo "YES" } function import_certs_to_java_keystore { for crt in *.crt; do echo prepping $crt keytool -import -file $crt -storepass changeit -noprompt --alias alias__${crt} -keystore $KEYSTORE echo done } if [ "$(running_as_root)" == "YES" ] then import_certs_to_java_keystore else echo "This script needs to be run as root!" fi
вот как это работало для меня:
- Сохранить как .тхт данные сертификата, в следующем формате в текстовом редакторе
-----НАЧНИТЕ СЕРТИФИКАТ----- [сериализация данных корпорацией Майкрософт] ----- КОНЕЧНЫЙ СЕРТИФИКАТ - - - - -
- откройте браузер chrome (этот шаг может работать и с другими браузерами) Настройки > Показать дополнительные настройки > протокол HTTPS и SSL > управление сертификатами Импортируйте .txt в шаге 1
- выберите и экспортировать сертификат в кодировке base-64. Сохраните его как .cer
- Теперь вы можете использовать keytool или Portecle для импорта его в хранилище ключей java


Comments