Ошибка сертификата ru.CryptoPro.ssl.pc_4.cl_5

Best Java code snippets using java. security. KeyStoreException (Showing top 20 results out of 2,439)

throw new KeyStoreException(“JENKINS-41987: no X509Certificate found; perhaps instance-identity module is missing or too old”);throw new KeyStoreException(“JENKINS-41987: no RSAPrivateKey found; perhaps instance-identity module is missing or too old”);keyStore = KeyStore. getInstance(“JKS”);throw new IllegalStateException(“Specification says this should not happen as we are not doing I/O”, e);throw new IllegalStateException(“Specification says this should not happen as we are not loading keys”, e);keyStore. setKeyEntry(“jenkins”, privateKey, password,java. InputStream istream = null;kstore = KeyStore. getInstance(“JKS”);istream = new FileInputStream(keystoreFile);throw new IOException(e. getMessage());throw new IOException(e. getMessage());throw new IOException(e. getMessage());

KeyStore clientKeyStore = null;clientKeyStore = KeyStore. getInstance(“BKS”);KeyManagerFactory keyManagerFactory = KeyManagerFactory. getInstance(KeyManagerFactory. getDefaultAlgorithm());final KeyStoreException result = new KeyStoreException(String. format(getLoggingLocale(), keyCannotBeProtected$str(), alias));result. setStackTrace(Arrays. copyOfRange(st, 1, st. length));private static final String keyStoreFailedToTranslate = “ELY02004: Key store failed to translate password for alias “%s””;public void engineSetCertificateEntry(String alias,StoreEntry entry = (StoreEntry)table. get(alias);if (entry != null && entry. getType() != CERTIFICATE)throw new KeyStoreException(“key store already has a key entry with alias ” + alias);table. put(alias, new StoreEntry(alias, cert));public void engineSetKeyEntry(String alias,Key key,if ((key instanceof PrivateKey) && (chain == null))throw new KeyStoreException(“no certificate chain for private key”);table. put(alias, new StoreEntry(alias, key, password, chain));catch (Exception e)throw new KeyStoreException(e. toString());keyStore = KeyStore. getInstance(KeyStore. getDefaultType());throw new KeyStoreException(“KeyStore creation error”, e);KeyStore trustStore = KeyStore. getInstance(KeyStore. getDefaultType());
Objects. requireNonNull(password, “Password may be blank, but must not be null. “);final KeyStore keyStore = KeyStore. getInstance(“PKCS12”);throw new KeyStoreException(e);final Enumeration aliases = keyStore. aliases();final KeyStore. PasswordProtection passwordProtection = new KeyStore. PasswordProtection(password. toCharArray());throw new KeyStoreException(e);throw new KeyStoreException(“Key store did not contain any private key entries. “);

final KeyStore keyStore = KeyStore. getInstance(“PKCS12”);

throw new KeyStoreException(“Failed to initialize the keystore”, e);keystore = KeyStore. getInstance(“JKS”);. withMessage(“Unable to build a keystore instance: ” + e. getMessage())public void engineDeleteEntry(String alias)Object entry = table. get(alias);if (entry == null)throw new KeyStoreException(“no such entry as ” + alias);private static KeyStore getKeyStoreInstance(keystore = KeyStore. getInstance(storeType == null ? KeyStore. getDefaultType() : CertManagerConstants. STORE_TYPE. JCEKSthrow new IllegalArgumentException(“Alias must be specified”);KeyStore store = getKeyStore();throw (CertificateException) new CertificateException(ke. getMessage()). initCause(ke);SSLSocketFactory sf = new SSLSocketFactory(easyStrategy, new AllowAllHostnameVerifier());SchemeRegistry registry = new SchemeRegistry();ClientConnectionManager ccm = new BasicClientConnectionManager(registry);inputStream = url. openStream();KeyStore keyStore = newKeyStore();throw new NoSuchAlgorithmException(“no such keystore type: “throw new KeyStoreException(getLocation() + “: file not found”);throw new KeyStoreException(getLocation() + “: ” + ex. getMessage(), ex);java. OutputStream keyStoreStream = null;keyStoreStream = new java. FileOutputStream(keyStoreFile);throw new CertificateException(“Unable to write KeyStore: “throw new CertificateException(“Unable to write KeyStore: “throw new CertificateException(“Unable to write KeyStore: “throw new CertificateException(“Unable to write KeyStore: “throw new CertificateException(“Unable to write KeyStore: “throw new CertificateException(“signature verification failed of ” + peerIdentities);throw new CertificateException(“subject/issuer verification failed of ” + peerIdentities);Enumeration aliases = trustStore. aliases();String alias = aliases. nextElement();X509Certificate tCert = (X509Certificate) trustStore. getCertificate(alias);throw new CertificateException(“signature verification failed of ” + peerIdentities);

Читайте также:  Русскоязычный Форум

Форум КриптоПро
 » 
Средства криптографической защиты информации
 » 
КриптоПро JCP, JavaTLS
 » 
Ошибка сертификата ru. CryptoPro. ssl. pc_4. cl_5: PKIX path building failed

Евгений Афанасьев
Оставлено
:
27 августа 2019 г. 16:35:30(UTC)

Если так запустить “C:Program FilesJavajdk1. 0_221jreinjava. exe” -Dtls_prohibit_disabled_validation=false -jar jcp_GKH. jarчто-нибудь изменится?

Я хотел бы знать, что именно клиент должен представлять серверу при аутентификации с помощью сертификатов (особенно для Java – если это вообще имеет значение)? Это JKSфайл или PKCS#12? Что должно быть в них; просто сертификат клиента или ключ? Если да, то какой ключ? Существует много недоразумений по поводу всех типов файлов, типов сертификатов и тому подобного.

Наконец-то удалось решить все вопросы, поэтому я отвечу на свой вопрос. Это настройки / файлы, которые я использовал для решения своих проблем;В хранилище ключей клиента является формат PKCS # 12 файл , содержащий

  • Публичный сертификат клиента (в данном случае подписанный самозаверяющим центром сертификации)
  • Клиентский частный ключ

Для генерации я использовал pkcs12команду OpenSSL , например;Совет: убедитесь, что вы получили последнюю версию OpenSSL, а не версию 0. 8h, потому что, похоже, она страдает от ошибки, которая не позволяет правильно генерировать файлы PKCS # 12. Этот файл PKCS # 12 будет использоваться клиентом Java для представления сертификата клиента серверу, когда сервер явно запросил у клиента аутентификацию. Статью в Википедии о TLS для обзора того, как на самом деле работает протокол для аутентификации сертификата клиента (здесь также объясняется, почему нам нужен закрытый ключ клиента). В доверенном хранилище клиента является прямым JKS формат файл , содержащий корень или промежуточного ЦСА сертификатов. Эти сертификаты CA будут определять, с какими конечными точками вам будет разрешено общаться, в этом случае ваш клиент сможет подключиться к тому серверу, на котором будет представлен сертификат, который был подписан одним из центров доверенных сертификатов. Для его генерации вы можете использовать стандартный Java keytool, например;Используя это доверенное хранилище, ваш клиент попытается выполнить полное рукопожатие SSL со всеми серверами, которые представляют сертификат, подписанный ЦС, идентифицированным myca. crt. Приведенные выше файлы предназначены исключительно для клиента. Если вы также хотите настроить сервер, ему нужны собственные файлы хранилища ключей и доверенных сертификатов. На этом веб-сайте можно найти отличное руководство по настройке полностью работающего примера для клиента и сервера Java (с использованием Tomcat). Проблемы / Замечания / Советы

  • Аутентификация сертификата клиента может быть применена только сервером.
  • ( Важно! ) Когда сервер запрашивает сертификат клиента (как часть рукопожатия TLS), он также предоставляет список доверенных CA как часть запроса сертификата. Когда сертификат клиента, который вы хотите представить для аутентификации, не подписан ни одним из этих ЦС, он вообще не будет представлен (на мой взгляд, это странное поведение, но я уверен, что для этого есть причина). Это было основной причиной моих проблем, поскольку другая сторона не настроила свой сервер должным образом для принятия моего самозаверяющего клиентского сертификата, и мы предположили, что проблема была в моем конце в том, что я не правильно предоставил клиентский сертификат в запросе.
Читайте также:  Ошибка выполнения ошибка код 1627 при выполнении функции signdata ошибка исполнения функции

Другие ответы показывают, как глобально настроить клиентские сертификаты. Однако если вы хотите программно определить ключ клиента для одного конкретного соединения, а не глобально определять его для каждого приложения, работающего на вашей JVM, то вы можете настроить свой собственный SSLContext следующим образом:

Их JKS-файл является просто контейнером для сертификатов и пар ключей. В сценарии аутентификации на стороне клиента различные части ключей будут расположены здесь:

  • Хранилище клиента будет содержать пару из личного и открытого ключа клиента . Это называется хранилище ключей .
  • Хранилище сервера будет содержать открытый ключ клиента . Это называется доверенное хранилище .

Разделение склада доверенных сертификатов и хранилища ключей не обязательно, но рекомендуется. Они могут быть одним и тем же физическим файлом. Чтобы установить расположение файловой системы двух хранилищ, используйте следующие системные свойства:и на сервере:Чтобы экспортировать сертификат клиента (открытый ключ) в файл, чтобы вы могли скопировать его на сервер, используйтеЧтобы импортировать открытый ключ клиента в хранилище ключей сервера, используйте (как упоминалось выше, администраторы сервера уже сделали это)

// Allow TLSv1 protocol only

// Trusted CA keystore

// Client keystore

//. loadTrustMaterial(tks, new TrustSelfSignedStrategy()) // use it to customize
// load client certificate

Для тех из вас, кто просто хочет настроить двустороннюю аутентификацию (серверные и клиентские сертификаты), комбинация этих двух ссылок поможет вам:Настройка двусторонней аутентификации:Вам не нужно использовать конфигурационный файл openssl, который они упоминают; просто используйте

  • $ openssl genrsa -des3 -out ca.key 4096
  • $ openssl req -new -x509 -days 365 -key ca.key -out ca.crt

создать свой собственный сертификат CA, а затем сгенерировать и подписать ключи сервера и клиента с помощью:

  • $ openssl genrsa -des3 -out server.key 4096
  • $ openssl req -new -key server.key -out server.csr
  • $ openssl x509 -req -days 365 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 100 -out server.crt
  • $ openssl genrsa -des3 -out client.key 4096
  • $ openssl req -new -key client.key -out client.csr
  • $ openssl x509 -req -days 365 -in client.csr -CA ca.crt -CAkey ca.key -set_serial 101 -out client.crt
Читайте также:  КриптоПро 5 и VipNet

Я подключился к банку по двустороннему протоколу SSL (сертификат клиента и сервера) с помощью Spring Boot. Итак, опишите здесь все мои шаги, надеюсь, это кому-нибудь поможет (самое простое рабочее решение, которое я нашел):

  • Генерация запроса сертификата:

    Создать закрытый ключ:Создать запрос на сертификат:

  • Создать закрытый ключ:
  • Создать запрос на сертификат:
  • Получите 2 сертификата: мой клиентский корневой сертификат clientId.crtи банковский корневой сертификат:bank.crt
  • Создать хранилище ключей Java (введите пароль ключа и установите пароль хранилища ключей):Не обращайте внимания на результат unable to write ‘random state’. Java PKCS12 keystore.p12создан.
  • Добавьте в хранилище ключей bank.crt(для простоты я использовал одно хранилище ключей): Проверьте сертификаты хранилища ключей по:
  • // use storePassword twice (with key password do not work)!!

    // Solve “Certificate doesn’t match any of the subject alternative names”

Процесс SSLContextинициализации занимает некоторое время, поэтому вы можете его кэшировать.

Я думаю, что исправлением здесь был тип хранилища ключей, pkcs12 (pfx) всегда имеет закрытый ключ, а тип JKS может существовать без закрытого ключа. Если вы не укажете в своем коде или не выберете сертификат через браузер, сервер не сможет узнать, что он представляет клиента на другом конце.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *