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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline alevigo1995  
#1 Оставлено : 18 июля 2025 г. 23:08:59(UTC)
alevigo1995

Статус: Новичок

Группы: Участники
Зарегистрирован: 18.07.2025(UTC)
Сообщений: 2
Российская Федерация

Доброго вечера. Появилась задача протестировать подписывание и проверку в системе AstraLinux. Использую тестовый сертификат. Сертификаты в цепочке не просрочены. В cacerts добавлял тестовый уц. Стандартные средства КриптоПро справляются как обычно. Библиотеки bouncycastle jdk15on-1.60 установлены, на версиях выше были ошибки. Теперь через интерфейсы Java не проходит на этапе цепочки сертификатов. Ошибка: "PKIX failure: invalid parameters of certificate". Прикладываю код и лог.
Код:
import javax.crypto.*;
import java.security.*;
import java.security.cert.*;
import java.security.cert.Certificate;
import ru.CryptoPro.JCP.JCP;
import ru.CryptoPro.JCSP.JCSP;
import java.io.*;
import ru.CryptoPro.CAdES.CAdESSignature;
import ru.CryptoPro.CAdES.CAdESType;
import java.util.ArrayList;
import java.util.List;
import java.util.Collection;
import java.util.Base64;
// Класс программы совпадающий с именем файла.
public class signFile{
  public void run(String[] args) throws Exception{
     // Подпись
     System.setProperty("com.sun.security.enableCRLDP","true");
     System.setProperty("ru.CryptoPro.defaultProv","JCSP");
      if( args.length==3 && args[0].equals("sign")){
      char[] password = "1234567".toCharArray();
      KeyStore ks = KeyStore.getInstance("HDIMAGE","JCSP");
      ks.load(null,password);
      // Получаем PrivateKey
      PrivateKey private_key = (PrivateKey)ks.getKey(args[2], null);
      // Получаем цепочку
      Certificate[] chain = ks.getCertificateChain(args[2]);
      // Создаём экземпляр класса для подписи
      Base64.Encoder encoder = Base64.getEncoder();
      // Кодируем
      String base64_digest = encoder.encodeToString(output_signature(args[1],private_key,chain));
      // Печатаем в stdout
      System.out.println(base64_digest);
      // Сверка подписи
      }else if(args.length==4 && args[0].equals("verify")){
      }
  }
  public static void main(String args[]) throws Exception{
          new signFile().run(args); 
  }
  public static byte[] output_signature(String file_name, PrivateKey private_key, Certificate[] chain) throws Exception{
    CAdESSignature signature = new CAdESSignature(false);
    List<X509Certificate> list_chain = new ArrayList<X509Certificate>();
    ByteArrayOutputStream byte_stream = new ByteArrayOutputStream();
    for (Certificate cert : chain) list_chain.add((X509Certificate)cert);
    signature.addSigner(JCSP.PROVIDER_NAME, null, null, private_key, list_chain, CAdESType.CAdES_BES, null, false);
    // Читаем и записываем
    signature.open(byte_stream);
    try(FileInputStream fi = new FileInputStream(file_name)){
      byte[] buffer = new byte[256];
      int real;
      while((real=fi.read(buffer))!=-1){
        for(int i = 0; i<real; i++){
                signature.update(buffer);
        }
      }
      signature.close();
      byte_stream.close();
    }catch(IOException ex){
            System.out.println(ex.getMessage());
      return new byte[1];
    }
    return byte_stream.toByteArray();
  }
}

log.txt (27kb) загружен 1 раз(а).

Отредактировано пользователем 20 июля 2025 г. 20:21:48(UTC)  | Причина: Не указана

Offline alevigo1995  
#2 Оставлено : 20 июля 2025 г. 20:21:05(UTC)
alevigo1995

Статус: Новичок

Группы: Участники
Зарегистрирован: 18.07.2025(UTC)
Сообщений: 2
Российская Федерация

Проблема решена, обновлением до последней версии Java CSP.
Offline Евгений Афанасьев  
#3 Оставлено : 21 июля 2025 г. 10:44:13(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 730 раз в 688 постах
Добрый день.

Похоже на случай, когда отсутствует сертификат для построения цепочки.
Убедитесь, что в list_chain - вся цепочка сертификатов и корневой установлен в cacerts.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.