Статус: Новичок
Группы: Участники
Зарегистрирован: 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)
| Причина: Не указана
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 18.07.2025(UTC) Сообщений: 2 
|
Проблема решена, обновлением до последней версии Java CSP.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,034  Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 730 раз в 688 постах
|
Добрый день.
Похоже на случай, когда отсутствует сертификат для построения цепочки. Убедитесь, что в list_chain - вся цепочка сертификатов и корневой установлен в cacerts. |
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close