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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline U3962  
#1 Оставлено : 24 марта 2025 г. 13:46:27(UTC)
U3962

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

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

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

Есть машина Windows server 2012 r2
Установлено JDK 24

Код:
C:\Program Files\Far Manager>java -version
java version "24" 2025-03-18
Java(TM) SE Runtime Environment (build 24+36-3646)
Java HotSpot(TM) 64-Bit Server VM (build 24+36-3646, mixed mode, sharing)


Код:
C:\Program Files\Far Manager>javac -version
javac 24



Скачали jcp-2.0.41940-A
Распаковали, запустили
Код:
ControlPane.bat C:\t_farm\jdk-24

Прописали лицензию и путь к HDImageStore
В файле C:\t_farm\jdk-24\conf\security\java.security добавили строчки:
Код:
security.provider.14=JCP
security.provider.15=RevCheck
security.provider.16=Crypto


Прописали все нужные сертификаты:
Код:
C:\t_farm\jdk-24\bin\keytool -keystore C:/t_farm/jdk-24/lib/security/cacerts -importcert -alias gis-smev-2024-2025-2012_test -file C:/Users/U3962/Documents/42943.cer
C:\t_farm\jdk-24\bin\keytool -keystore C:/t_farm/jdk-24/lib/security/cacerts -importcert -alias cbcer-2024-2025-2012_test -file C:/Users/U3962/Documents/CB.cer
C:\t_farm\jdk-24\bin\keytool -keystore C:/t_farm/jdk-24/lib/security/cacerts -importcert -alias cifra-2024-2025-2012_test -file C:/Users/U3962/Documents/CIFRA.cer
C:\t_farm\jdk-24\bin\keytool -keystore C:/t_farm/jdk-24/lib/security/cacerts -importcert -alias taxcom-2024-2025-2012_test -file C:/Users/U3962/Documents/taxcom.cer
C:\t_farm\jdk-24\bin\keytool -keystore C:/t_farm/jdk-24/lib/security/cacerts -importcert -alias tsa-2024-2025-2012_test -file C:/Users/U3962/Documents/tsa.cer


Пробуем запустить программку которая делает CADES_T подписи.
Выходит ошибка (если ту же программку запустить на jre1.8.0_121 и jcp-2.0.39014 - то работает нормально):


Код:
HDImageStore = gis-smev-2024-2025-2012
Mar 24, 2025 3:33:31 PM ru.CryptoPro.ssl.Provider b
INFO: JCP license isServer:  true
Mar 24, 2025 3:33:32 PM ru.CryptoPro.JCP.tools.Starter <init>
INFO: Loading JCP 0.0.0.0.0
Mar 24, 2025 3:33:32 PM ru.CryptoPro.JCP.tools.Starter <init>
INFO: JCP has been loaded.
Mar 24, 2025 3:33:35 PM ru.CryptoPro.JCP.tools.SelfTesterBase c
SEVERE: [main] :: [ru.CryptoPro.JCP.tools.SelfTester_JCP] :: test 29 crashed twi
ce!
Mar 24, 2025 3:33:35 PM ru.CryptoPro.JCP.tools.SelfTesterBase checkClassInternal

SEVERE: [main] :: [ru.CryptoPro.JCP.tools.SelfTester_JCP] :: Corrupted: ru.Crypt
oPro.JCP.KeyStore.JCPKeyStore
ru.CryptoPro.JCP.tools.SelfTesterException
        at ru.CryptoPro.JCP.tools.TestVerifyClassJar.run(Unknown Source)
        at ru.CryptoPro.JCP.tools.SelfTesterBase.b(Unknown Source)
        at ru.CryptoPro.JCP.tools.SelfTesterBase.a(Unknown Source)
        at ru.CryptoPro.JCP.tools.SelfTesterBase.checkClassInternal(Unknown Sour
ce)
        at ru.CryptoPro.JCP.tools.SelfTester_JCP.checkClass(Unknown Source)
        at ru.CryptoPro.JCP.tools.Starter.a(Unknown Source)
        at ru.CryptoPro.JCP.tools.Starter.check(Unknown Source)
        at ru.CryptoPro.JCP.KeyStore.JCPKeyStore.engineLoad(Unknown Source)
        at java.base/java.security.KeyStore.load(KeyStore.java:1497)
        at CADES_T.CADES_T.sign_cades_t(CADES_T.java:210)
        at CADES_T.CADES_T.main(CADES_T.java:100)
Caused by: java.security.PrivilegedActionException: java.io.IOException
        at java.base/java.security.AccessController.wrapException(AccessControll
er.java:394)
        at java.base/java.security.AccessController.doPrivileged(AccessControlle
r.java:256)
        ... 11 more
Caused by: java.io.IOException
        at ru.CryptoPro.JCP.tools.JarChecker.checkURLSign(Unknown Source)
        at ru.CryptoPro.JCP.tools.cl_34.run(Unknown Source)
        at java.base/java.security.AccessController.doPrivileged(AccessControlle
r.java:251)
        ... 11 more
Caused by: java.io.IOException: Digest of Jar file content is absent or invalid.
Manifest file is corrupted
        at ru.CryptoPro.JCP.tools.JarChecker.b(Unknown Source)
        at ru.CryptoPro.JCP.tools.JarChecker.c(Unknown Source)
        at ru.CryptoPro.JCP.tools.JarChecker.checkJARSign(Unknown Source)
        ... 14 more

Exception in thread "main" ru.CryptoPro.JCP.tools.SelfTesterException: [main] ::
 [ru.CryptoPro.JCP.tools.SelfTester_JCP] :: null
        at ru.CryptoPro.JCP.tools.SelfTesterBase.checkClassInternal(Unknown Sour
ce)
        at ru.CryptoPro.JCP.tools.SelfTester_JCP.checkClass(Unknown Source)
        at ru.CryptoPro.JCP.tools.Starter.a(Unknown Source)
        at ru.CryptoPro.JCP.tools.Starter.check(Unknown Source)
        at ru.CryptoPro.JCP.KeyStore.JCPKeyStore.engineLoad(Unknown Source)
        at java.base/java.security.KeyStore.load(KeyStore.java:1497)
        at CADES_T.CADES_T.sign_cades_t(CADES_T.java:210)
        at CADES_T.CADES_T.main(CADES_T.java:100)
Caused by: ru.CryptoPro.JCP.tools.SelfTesterException
        at ru.CryptoPro.JCP.tools.TestVerifyClassJar.run(Unknown Source)
        at ru.CryptoPro.JCP.tools.SelfTesterBase.b(Unknown Source)
        at ru.CryptoPro.JCP.tools.SelfTesterBase.a(Unknown Source)
        ... 8 more
Caused by: java.security.PrivilegedActionException: java.io.IOException
        at java.base/java.security.AccessController.wrapException(AccessControll
er.java:394)
        at java.base/java.security.AccessController.doPrivileged(AccessControlle
r.java:256)
        ... 11 more
Caused by: java.io.IOException
        at ru.CryptoPro.JCP.tools.JarChecker.checkURLSign(Unknown Source)
        at ru.CryptoPro.JCP.tools.cl_34.run(Unknown Source)
        at java.base/java.security.AccessController.doPrivileged(AccessControlle
r.java:251)
        ... 11 more
Caused by: java.io.IOException: Digest of Jar file content is absent or invalid.
Manifest file is corrupted
        at ru.CryptoPro.JCP.tools.JarChecker.b(Unknown Source)
        at ru.CryptoPro.JCP.tools.JarChecker.c(Unknown Source)
        at ru.CryptoPro.JCP.tools.JarChecker.checkJARSign(Unknown Source)
        ... 14 more


Подскажите, что не так?


сама программа:
Код:
package CADES_T;
import ru.CryptoPro.JCP.*;
import ru.CryptoPro.JCP.Util.JCPInit;
import ru.CryptoPro.CAdES.CAdESSignature;
import ru.CryptoPro.CAdES.CAdESType;
import ru.CryptoPro.CAdES.exception.*;
import java.io.*;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.UnrecoverableKeyException;
import java.security.cert.CRLException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.*;
import org.bouncycastle.cert.X509CertificateHolder;
import java.nio.file.Files;
import java.nio.file.Paths;

public class CADES_T {
	public static void main(String[] args) throws UnrecoverableKeyException, CAdESException, KeyStoreException, NoSuchAlgorithmException, CertificateException, IOException, CRLException {
		
		String in_fnsme;
		String ou_fnsme ;
		
		String s_store ;
		String s_cer ;
		String s_pass ;
		String s_tsp ;
		try
		{
			in_fnsme =args[0];
			ou_fnsme =args[1];
			
			s_store =args[2];
			s_cer = args[3];
			s_pass =args[4];
			s_tsp =args[5];
		}
		catch (Exception e) 
		{
			System.out.println(e.getMessage());
			in_fnsme ="res_13681924154_orig.xml";
			ou_fnsme ="res_13532125435_orig.xml.sig";
			
			s_store = "HDImageStore";
			s_cer = "gis-smev-2024-2025-2012";
			s_pass = "xxxxxxxx";
			s_tsp ="http://tax4.tensor.ru/tsp/";
		}

		byte[] cadesCms=sign_cades_t(in_fnsme,s_store,s_cer,s_pass,s_tsp);
		FileOutputStream outs = new FileOutputStream(ou_fnsme);

		outs.write(cadesCms);
		outs.close();	
	
	}
	//getPublicKeyOid
	private static  String getPublicKeyOid(PrivateKey privateKey) {
        String privateKeyAlgorithm = privateKey.getAlgorithm();
        if (privateKeyAlgorithm.equalsIgnoreCase(JCP.GOST_EL_2012_256_NAME) ||
            privateKeyAlgorithm.equalsIgnoreCase(JCP.GOST_DH_2012_256_NAME)) {
            return JCP.GOST_PARAMS_SIG_2012_256_KEY_OID;
        } // if
        else if (privateKeyAlgorithm.equalsIgnoreCase(JCP.GOST_EL_2012_512_NAME) ||
            privateKeyAlgorithm.equalsIgnoreCase(JCP.GOST_DH_2012_512_NAME)) {
            return JCP.GOST_PARAMS_SIG_2012_512_KEY_OID;
        } // if
        System.out.println("!!!GOST_EL_KEY_OID!!!");

        return JCP.GOST_EL_KEY_OID;
    }
	//getDigestOid
	private static  String getDigestOid(PrivateKey privateKey) {
	        String privateKeyAlgorithm = privateKey.getAlgorithm();
	        if (privateKeyAlgorithm.equalsIgnoreCase(JCP.GOST_EL_2012_256_NAME) ||
	            privateKeyAlgorithm.equalsIgnoreCase(JCP.GOST_DH_2012_256_NAME)) {
	        	System.out.println("!!!2012_256!!!");
	            return JCP.GOST_DIGEST_2012_256_OID;
	        } // if
	        else if (privateKeyAlgorithm.equalsIgnoreCase(JCP.GOST_EL_2012_512_NAME) ||
	            privateKeyAlgorithm.equalsIgnoreCase(JCP.GOST_DH_2012_512_NAME)) {
	        	System.out.println("!!!2012_512!!!");
	            return JCP.GOST_DIGEST_2012_512_OID;
	        } // if
	        System.out.println("!!!GOST_DIGEST_OID!!!");
	     
	        return JCP.GOST_DIGEST_OID;
	    }
	 //sign cades_t
	 private static  byte[] sign_cades_t (String file_to_sign, String s_store, String s_cer, String s_pass, String s_tsp) throws CAdESException, IOException, KeyStoreException, NoSuchAlgorithmException, CertificateException, UnrecoverableKeyException, CRLException
	 {
		//enable online check
		System.setProperty("ru.CryptoPro.reprov.enableCRLDP", "true");
		System.setProperty("com.sun.security.enableCRLDP", "true"); // для sun jvm
		System.setProperty("com.ibm.security.enableCRLDP", "true"); // или ibm jvm
		
		System.setProperty("com.sun.security.enableAIAcaIssuers", "true");
		System.setProperty("ru.CryptoPro.reprov.enableAIAcaIssuers", "true");
		
		//System.setProperty("jcsp.disable.jarsigner.verify", "true");
		
		String cer_story = s_store;
		String cer_alias = s_cer;
		String cer_pass_str = s_pass;
		
		System.out.println("HDImageStore = "+cer_alias);
		char[] cer_pass = cer_pass_str.toCharArray();
		
		JCPInit.initProviders(false);
		
		//load key store
		KeyStore keyStore = KeyStore.getInstance( cer_story );
		keyStore.load( null, null );
		PrivateKey privateKey = (PrivateKey) keyStore.getKey( cer_alias, cer_pass );
		//prepare chain
		X509Certificate cert = (X509Certificate) keyStore.getCertificate( cer_alias );
		List<X509Certificate> chain = Arrays.asList( cert );
	        
		//new cades sign
		CAdESSignature cadesSignature = new CAdESSignature( true );
		
		//add certs in sign
		Collection<X509CertificateHolder> holderList = new ArrayList<X509CertificateHolder>();
		for (X509Certificate cert1 : chain) 
		{
		    holderList.add(new X509CertificateHolder(cert1.getEncoded()));
		} 
		cadesSignature.setCertificateStore(new CollectionStore(holderList));
		  
		//data to sign
		byte[] src = Files.readAllBytes(Paths.get(file_to_sign));
		
		cadesSignature.addSigner( "JCP", getDigestOid(privateKey),getPublicKeyOid(privateKey),privateKey, chain, CAdESType.CAdES_T, s_tsp, false );  

		// Будущая подпись в виде массива.
		ByteArrayOutputStream signatureStream = new ByteArrayOutputStream();
		// Подготовка контекста.
		cadesSignature.open( signatureStream );
		// Хеширование.
		cadesSignature.update( src );
		// Создание подписи с выводом в signatureStream.
		cadesSignature.close();
		signatureStream.close();
		// Получаем подпись в виде массива.
		return signatureStream.toByteArray();

	 }
	
}



Нашел тут же на форуме ответ - https://www.cryptopro.ru...aspx?g=posts&t=19626
Нужно пересобрать JAR архив, и в моем случае заменить параметр
Код:
extract required libraries into generated jar

на
Код:
package required libraries into generated jar


Также, добавлена строка
Код:
JCPInit.initProviders(false);


Без нее из IDE все работает, а при запуске JAR - не может инициировать HDImageStore

Отредактировано пользователем 24 марта 2025 г. 15:31:14(UTC)  | Причина: Не указана

Wanna join the discussion?! Login to your Форум КриптоПро forum account. Новые регистрации запрещены.

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