Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

7 Страницы«<4567>
Опции
К последнему сообщению К первому непрочитанному
Online Евгений Афанасьев  
#51 Оставлено : 3 апреля 2019 г. 9:59:08(UTC)
Евгений Афанасьев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 3,910
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
Доступ в сеть для проверки на отзыв имеется? Попробуйте отключить проверку цепочки сертификатов в настройках JTLS в панели управления JCP под управлением администратора. Если нет возможности в панели, то так (под управлением администратора):
<JRE>/bin/java ru.CryptoPro.JCP.Util.SetPrefs -system -node ru/CryptoPro/ssl -key Enable_revocation_default -value false
Offline lartok  
#52 Оставлено : 3 апреля 2019 г. 10:10:27(UTC)
lartok

Статус: Активный участник

Группы: Участники
Зарегистрирован: 27.04.2016(UTC)
Сообщений: 108

Сказал(а) «Спасибо»: 9 раз
Поблагодарили: 1 раз в 1 постах
Автор: Евгений Афанасьев Перейти к цитате
Доступ в сеть для проверки на отзыв имеется? Попробуйте отключить проверку цепочки сертификатов в настройках JTLS в панели управления JCP под управлением администратора. Если нет возможности в панели, то так (под управлением администратора):
<JRE>/bin/java ru.CryptoPro.JCP.Util.SetPrefs -system -node ru/CryptoPro/ssl -key Enable_revocation_default -value false


Автор: lartok Перейти к цитате
Еще до этого добавил:
Код:
Preferences p = Preferences.userRoot().node("ru/CryptoPro/ssl");
p.put("Enable_revocation_default", "false");



Также проделывал
Код:
<JRE>/bin/java ru.CryptoPro.JCP.Util.SetPrefs -system -node ru/CryptoPro/ssl -key Enable_revocation_default -value false


Еще раз сделаю.
Offline lartok  
#53 Оставлено : 3 апреля 2019 г. 10:24:41(UTC)
lartok

Статус: Активный участник

Группы: Участники
Зарегистрирован: 27.04.2016(UTC)
Сообщений: 108

Сказал(а) «Спасибо»: 9 раз
Поблагодарили: 1 раз в 1 постах
WARNING: Thread-13, handling exception: javax.net.ssl.SSLHandshakeException: ru.CryptoPro.ssl.pc_4.cl_5: Extended key usage does not permit use for TLS server authentication

Другая ошибка
Online Евгений Афанасьев  
#54 Оставлено : 3 апреля 2019 г. 10:34:51(UTC)
Евгений Афанасьев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 3,910
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
Вероятно, потому что в сертификате сервера нет использования "Проверка подлинности сервера":
Цитата:

Проверка подлинности сервера (1.3.6.1.5.5.7.3.1)

Есть только:
Цитата:

Проверка подлинности клиента (1.3.6.1.5.5.7.3.2)
Защищенная электронная почта (1.3.6.1.5.5.7.3.4)
Пользователь Центра Регистрации, HTTP, TLS клиент (1.2.643.2.2.34.6)
Неизвестное использование ключа (1.2.643.6.45.1.1.1)

Эту проверку не отключить, разве что свои менеджеры (KeyManager и TrustManager) передавать в SSLContext.

Online Евгений Афанасьев  
#55 Оставлено : 3 апреля 2019 г. 10:35:53(UTC)
Евгений Афанасьев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 3,910
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
Автор: lartok Перейти к цитате

Автор: lartok Перейти к цитате
Еще до этого добавил:
Код:
Preferences p = Preferences.userRoot().node("ru/CryptoPro/ssl");
p.put("Enable_revocation_default", "false");



userRoot() -> systemRoot()

Offline lartok  
#56 Оставлено : 3 апреля 2019 г. 10:39:42(UTC)
lartok

Статус: Активный участник

Группы: Участники
Зарегистрирован: 27.04.2016(UTC)
Сообщений: 108

Сказал(а) «Спасибо»: 9 раз
Поблагодарили: 1 раз в 1 постах
Автор: Евгений Афанасьев Перейти к цитате

Эту проверку не отключить, разве что свои менеджеры (KeyManager и TrustManager) передавать в SSLContext.

Конечно первым делом позвоню, как альтернатива - где посмотреть как это сделать?
Offline lartok  
#57 Отправлено: : 3 апреля 2019 г. 10:50:32(UTC)
lartok

Статус: Активный участник

Группы: Участники
Зарегистрирован: 27.04.2016(UTC)
Сообщений: 108

Сказал(а) «Спасибо»: 9 раз
Поблагодарили: 1 раз в 1 постах
Автор: Евгений Афанасьев Перейти к цитате
Вероятно, потому что в сертификате сервера нет использования "Проверка подлинности сервера":
Цитата:

Проверка подлинности сервера (1.3.6.1.5.5.7.3.1)

Есть только:
Цитата:

Проверка подлинности клиента (1.3.6.1.5.5.7.3.2)
Защищенная электронная почта (1.3.6.1.5.5.7.3.4)
Пользователь Центра Регистрации, HTTP, TLS клиент (1.2.643.2.2.34.6)
Неизвестное использование ключа (1.2.643.6.45.1.1.1)

Эту проверку не отключить, разве что свои менеджеры (KeyManager и TrustManager) передавать в SSLContext.



Код:
	    
	    System.setProperty("com.sun.security.enableCRLDP", "false");
	    System.setProperty("com.ibm.security.enableCRLDP", "false");
	    try{
	    	KeyStore trustStore = KeyStore.getInstance("HDImageStore"); 

	    	trustStore.load(new FileInputStream(trustStorePath),
	      "12345".toCharArray()); // пароль к хранилищу - 11111111

	    	TrustManagerFactory tmf = TrustManagerFactory.getInstance("GostX509");
	    	tmf.init(trustStore);

	    	KeyStore keyStore = KeyStore.getInstance("HDImageStore");
	    	keyStore.load(null, null);

	    	KeyManagerFactory kmf = KeyManagerFactory.getInstance("GostX509");
	    	kmf.init(keyStore, keyStorePassword.toCharArray()); // пароль к ключу для отбора по типу и паролю

	    	SSLContext sslCtx = SSLContext.getInstance("GostTLS");
	    	sslCtx.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);

	    	SSLSocketFactory sslSocketFactory = sslCtx.getSocketFactory();

	    	URL url = new URL(urlstr); // адрес подключения
	    	HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();

	    	connection.setSSLSocketFactory(sslSocketFactory); // используется метод объекта, а не статический
	    	connection.connect();
	    	printContent(connection); // чтение данных
	    	connection.disconnect();
	    } catch (NoSuchAlgorithmException e) {
			// TODO Auto-generated catch block
			log.info(e.getMessage());
		} catch (CertificateException e) {
			// TODO Auto-generated catch block
			log.info(e.getMessage());
		} catch (KeyStoreException e) {
			// TODO Auto-generated catch block
			log.info(e.getMessage());
		} catch (UnrecoverableKeyException e) {
			// TODO Auto-generated catch block
			log.info(e.getMessage());
		} catch (KeyManagementException e) {
			// TODO Auto-generated catch block
			log.info(e.getMessage());
		} catch (IOException e) {
			// TODO Auto-generated catch block
			log.info(e.getMessage());			
		}	


Так тоже пробовал
Online Евгений Афанасьев  
#58 Оставлено : 3 апреля 2019 г. 11:57:11(UTC)
Евгений Афанасьев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 3,910
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
Условно, так:
Код:

class MyX509ExtendedKeyManager extends X509ExtendedKeyManager {

  private final KeyStore keyStore;

  // Обычно формируется кэш из пар "алиас=сертификат+ключ", перечисленных и подобранных по паролю
  public MyX509ExtendedKeyManager(KeyStore keyStore, char[] password) {
    System.out.println("MyX509ExtendedKeyManager()");
    this.keyStore = keyStore;
  }

  // получение списка алиасов для выбора ключа и сертификата
  @Override
  public String[] getClientAliases(String s, Principal[] principals) {
    System.out.println("getClientAliases()");
    return new String[] {"clientTLS"};
  }

  // получение алиаса для выбора ключа и сертификата
  @Override
  public String chooseClientAlias(String[] strings, Principal[] principals, Socket socket) {
    System.out.println("chooseClientAlias()");
    return "clientTLS";
  }

  @Override
  public String[] getServerAliases(String s, Principal[] principals) {
    System.out.println("getServerAliases()");
    return new String[0];
  }

  @Override
  public String chooseServerAlias(String s, Principal[] principals, Socket socket) {
    System.out.println("chooseServerAlias()");
    return null;
  }

  // чтение сертификатов, обычно это кэш со списком пар "алиас=сертификат+ключ"
  @Override
  public X509Certificate[] getCertificateChain(String s) {
    System.out.println("getCertificateChain()");
    try {
      Certificate[] certs1 = keyStore.getCertificateChain(s);
      X509Certificate[] certs2 = new X509Certificate[certs1.length];
      System.arraycopy(certs1, 0, certs2, 0, certs1.length);
      return certs2;
    } catch (Exception e) {
      throw new RuntimeException(e);
    }
  }

  // чтение ключа, обычно это кэш со списком пар "алиас=сертификат+ключ"
  @Override
  public PrivateKey getPrivateKey(String s) {
    System.out.println("getPrivateKey()");
    try {
      return (PrivateKey) keyStore.getKey(s, "1".toCharArray());
    } catch (Exception e) {
      throw new RuntimeException(e);
    }
  }

};

class MyX509ExtendedTrustManager extends X509ExtendedTrustManager {

  // Загрузка доверенных сертификатов
  public MyX509ExtendedTrustManager(KeyStore trustStore, char[] password) {
    System.out.println("MyX509ExtendedTrustManager()");
  }

  @Override
  public void checkClientTrusted(X509Certificate[] x509Certificates, String s, Socket socket) throws CertificateException {
    System.out.println("checkClientTrusted()");
  }

  // проверка серверного сертификата
  @Override
  public void checkServerTrusted(X509Certificate[] x509Certificates, String s, Socket socket) throws CertificateException {
    System.out.println("checkServerTrusted()");
  }

  @Override
  public void checkClientTrusted(X509Certificate[] x509Certificates, String s, SSLEngine sslEngine) throws CertificateException {
    System.out.println("checkClientTrusted()");
  }

  // проверка серверного сертификата
  @Override
  public void checkServerTrusted(X509Certificate[] x509Certificates, String s, SSLEngine sslEngine) throws CertificateException {
    System.out.println("checkServerTrusted()");
  }

  @Override
  public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
    System.out.println("checkClientTrusted()");
  }

  // проверка серверного сертификата
  @Override
  public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
  System.out.println("checkServerTrusted()");
  }

  @Override
  public X509Certificate[] getAcceptedIssuers() {
    System.out.println("getAcceptedIssuers()");
    return new X509Certificate[0];
  }

};

  KeyStore keyStore = KeyStore.getInstance("HDImageStore");
  keyStore.load(null, null);

  KeyStore trustStore = KeyStore.getInstance("CertStore");
  trustStore.load(new FileInputStream("truststore.store"), "1".toCharArray());

  SSLContext sslCtx = SSLContext.getInstance("GostTLS");
  sslCtx.init(new KeyManager[] {
                new MyX509ExtendedKeyManager(keyStore, "1".toCharArray())},
                new TrustManager[] {new MyX509ExtendedTrustManager(trustStore, null)},
                null
  );

  SSLSocketFactory sslSocketFactory = sslCtx.getSocketFactory();
  ...

Отредактировано пользователем 3 апреля 2019 г. 12:31:02(UTC)  | Причина: Не указана

Online Евгений Афанасьев  
#59 Оставлено : 3 апреля 2019 г. 11:58:47(UTC)
Евгений Афанасьев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 3,910
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
System.setProperty("com.sun.security.enableCRLDP", "false"); означает, что CRL будут переданы иначе и их не нужно грузит из сети по CRLDP в сертификатах.
Offline lartok  
#60 Оставлено : 3 апреля 2019 г. 14:01:22(UTC)
lartok

Статус: Активный участник

Группы: Участники
Зарегистрирован: 27.04.2016(UTC)
Сообщений: 108

Сказал(а) «Спасибо»: 9 раз
Поблагодарили: 1 раз в 1 постах
Автор: Евгений Афанасьев Перейти к цитате
System.setProperty("com.sun.security.enableCRLDP", "false"); означает, что CRL будут переданы иначе и их не нужно грузит из сети по CRLDP в сертификатах.


У нас (клиент) нельзя подгружать он-лайн CRL - нам надо указать путь до CRL? правильно ли я понимаю?

Пробовал System.setProperty("com.sun.security.enableCRLDP", "True"); - Ошибка не поменялась.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
7 Страницы«<4567>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.