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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline U3962  
#1 Оставлено : 31 марта 2017 г. 10:05:16(UTC)
U3962

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

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

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

Окружение:
jre1.8.0_45
jcp-2.0.39014

Используется адрес службы штампов: http://www.cryptopro.ru/tsp/
Для службы штампов в <jre>/lib/security/cacerts импортированы следующие сертификаты:
http://www.cryptopro.ru/...les/products/tsp/tsa.cer
https://www.cryptopro.ru/ra/cdp/cacer3.crt

Оба сертификата во вложении: CERTS_LOAD.zip (3kb) загружен 9 раз(а).

Импортировал так:
Код:
keytool -keystore C:/_localsoft/jre1.8.0_45/lib/security/cacerts -importcert -alias caser3 -file ./cacer3.cer
keytool -keystore C:/_localsoft/jre1.8.0_45/lib/security/cacerts -importcert -alias tsa -file ./tsa.cer


Создаю отсоединенную подпись CADES_T.
Полный листинг класса:
Код:

package CADES_T;
import ru.CryptoPro.JCP.JCP;
import ru.CryptoPro.CAdES.CAdESSignature;
import ru.CryptoPro.CAdES.CAdESType;
import ru.CryptoPro.CAdES.exception.*;
import java.io.*;
import java.net.Authenticator;
import java.net.PasswordAuthentication;
import java.security.*;
import java.security.cert.CRLException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.*;
import org.bouncycastle.cert.X509CertificateHolder;
import org.bouncycastle.util.CollectionStore;
import java.nio.file.Files;
import java.nio.file.Paths;

public class CADES_T {
    //run
	public static void main(String[] args) throws UnrecoverableKeyException, CAdESException, KeyStoreException, NoSuchAlgorithmException, CertificateException, IOException, CRLException {
		byte[] cadesCms=sign_cades_t("C:\\_localsoft\\FSSP_FILES\\answers\\res_13532125435.xml");
		FileOutputStream outs = new FileOutputStream("res_13532125435.xml.sig");
		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
        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)) {
	            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)) {
	            return JCP.GOST_DIGEST_2012_512_OID;
	        } // if
	        return JCP.GOST_DIGEST_OID;
	    }
	 //sign cades_t
	 private static  byte[] sign_cades_t (String file_to_sign) throws CAdESException, IOException, KeyStoreException, NoSuchAlgorithmException, CertificateException, UnrecoverableKeyException, CRLException
	 {
		 //addition class to proxy auth 
		 class ProxyAuthenticator extends Authenticator {
			    private String user, password;
			    public ProxyAuthenticator(String user, String password) {
			        this.user = user;
			        this.password = password;
			    }
			    protected PasswordAuthentication getPasswordAuthentication() {
			        return new PasswordAuthentication(user, password.toCharArray());
			    }	
		 }
		 
		//авторизация на прокси
		Authenticator.setDefault(new ProxyAuthenticator("Username", "Password"));
		System.setProperty("http.proxyHost", "proxy.xxx.local");
		System.setProperty("http.proxyPort", "xxxx");
		
		//enable online check
		System.setProperty("com.sun.security.enableCRLDP", "true"); // для sun jvm
		System.setProperty("com.ibm.security.enableCRLDP", "true"); // или ibm jvm123
		
        //path to container    
		String cer_story = "HDImageStore";
		String cer_alias = "gis-smev-2016-2017";
		String cer_pass_str = "password";
		char[] cer_pass = cer_pass_str.toCharArray();
		//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));
	  
		// Создаем подписанта CAdES-T.
		cadesSignature.addSigner( "JCP", getDigestOid(privateKey),getPublicKeyOid(privateKey),privateKey, chain, CAdESType.CAdES_T, "http://www.cryptopro.ru/tsp/", false );  
		
		// Будущая подпись в виде массива.
		ByteArrayOutputStream signatureStream = new ByteArrayOutputStream();
		// Подготовка контекста.
		cadesSignature.open( signatureStream );
		// Хеширование.
		cadesSignature.update( src );
		// Создание подписи с выводом в signatureStream.
		cadesSignature.close();
		signatureStream.close();
		// Получаем подпись в виде массива.
		return signatureStream.toByteArray();
	 }
	
}



При запуске возвращается ошибка:
Код:

Mar 31, 2017 11:50:30 AM ru.CryptoPro.JCP.tools.Starter check
INFO: Loading JCP 2.0 39014
Mar 31, 2017 11:50:30 AM ru.CryptoPro.JCP.tools.Starter check
INFO: JCP loaded.
Mar 31, 2017 11:50:30 AM ru.CryptoPro.CAdES.tools.CAdESUtility initJCPAlgorithms
INFO: Replacement of the BouncyCastle GOST algorithms.
Exception in thread "main" org.bouncycastle.cms.CMSAttributeTableGenerationException: Error building certification path for EMAILADDRESS=support@cryptopro.ru, C=RU, ST=77 г. Москва, L=Москва, STREET="ул. Сущёвский вал, д. 18", OID.1.2.643.100.1=#120D31303037373132333435363738, O="ООО \"КРИПТО-ПРО\"", OU=Тестовый УЦ, CN="Тестовая служба штампов времени ООО \"КРИПТО-ПРО\"", OID.1.2.643.3.131.1.1=#120C303037373132333435363738: ru.CryptoPro.reprov.certpath.JCPCertPathBuilderException: unable to find valid certification path to requested target
	at ru.CryptoPro.CAdES.a.a.b.getAttributes(Unknown Source)
	at org.bouncycastle.cms.SignerInfoGenerator.generate(Unknown Source)
	at org.bouncycastle.cms.CMSSignedDataStreamGenerator$CmsSignedDataOutputStream.close(Unknown Source)
	at ru.CryptoPro.CAdES.g.close(Unknown Source)
	at CADES_T.CADES_T.sign_cades_t(CADES_T.java:114)
	at CADES_T.CADES_T.main(CADES_T.java:22)
Caused by: Error building certification path for EMAILADDRESS=support@cryptopro.ru, C=RU, ST=77 г. Москва, L=Москва, STREET="ул. Сущёвский вал, д. 18", OID.1.2.643.100.1=#120D31303037373132333435363738, O="ООО \"КРИПТО-ПРО\"", OU=Тестовый УЦ, CN="Тестовая служба штампов времени ООО \"КРИПТО-ПРО\"", OID.1.2.643.3.131.1.1=#120C303037373132333435363738: ru.CryptoPro.reprov.certpath.JCPCertPathBuilderException: unable to find valid certification path to requested target; error codes: [33] 'PKIX failure: invalid parameters of certificate', 
	... 6 more
Caused by: Error building certification path for EMAILADDRESS=support@cryptopro.ru, C=RU, ST=77 г. Москва, L=Москва, STREET="ул. Сущёвский вал, д. 18", OID.1.2.643.100.1=#120D31303037373132333435363738, O="ООО \"КРИПТО-ПРО\"", OU=Тестовый УЦ, CN="Тестовая служба штампов времени ООО \"КРИПТО-ПРО\"", OID.1.2.643.3.131.1.1=#120C303037373132333435363738: ru.CryptoPro.reprov.certpath.JCPCertPathBuilderException: unable to find valid certification path to requested target; error codes: [33] 'PKIX failure: invalid parameters of certificate', 
	at ru.CryptoPro.CAdES.CAdESSignerPKCS7Impl.verify(Unknown Source)
	at ru.CryptoPro.CAdES.CAdESSignerBESImpl.verify(Unknown Source)
	at ru.CryptoPro.CAdES.CAdESSignerPKCS7Impl.verify(Unknown Source)
	at ru.CryptoPro.CAdES.timestamp.external.InternalTimeStampValidationProcessImpl.validate(Unknown Source)
	at ru.CryptoPro.AdES.timestamp.TSPTimeStampValidatorImpl.validate(Unknown Source)
	at ru.CryptoPro.AdES.timestamp.TSPTimeStampValidatorImpl.validate(Unknown Source)
	at ru.CryptoPro.CAdES.a.a.b.a(Unknown Source)
	... 6 more
Caused by: Error building certification path for EMAILADDRESS=support@cryptopro.ru, C=RU, ST=77 г. Москва, L=Москва, STREET="ул. Сущёвский вал, д. 18", OID.1.2.643.100.1=#120D31303037373132333435363738, O="ООО \"КРИПТО-ПРО\"", OU=Тестовый УЦ, CN="Тестовая служба штампов времени ООО \"КРИПТО-ПРО\"", OID.1.2.643.3.131.1.1=#120C303037373132333435363738: ru.CryptoPro.reprov.certpath.JCPCertPathBuilderException: unable to find valid certification path to requested target; error codes: [33] 'PKIX failure: invalid parameters of certificate', 
	at ru.CryptoPro.AdES.certificate.CertificateChainBuilderImpl.build(Unknown Source)
	at ru.CryptoPro.AdES.certificate.CertificateChainBuilderImpl.build(Unknown Source)
	at ru.CryptoPro.AdES.external.signature.AdESSigner.build(Unknown Source)
	... 13 more


1.Пробовал несколько раз перекачать и перерегистрировать сертификаты службы и его корневой - не помогло.
2.Пробовал переустановку JRE,JCP и далее пункт 1 - не помогло.
3.Также с соседней теме мне сообщили что: "Если сравнить содержимое сообщения с субъектом/издателем в сертификате службы, то они не совпадают". Но с чем это связано и как исправить пока не ясно.
4.Приведенный пример работал 27.03.2017 и подписи формировались корректно (результаты)

Подскажите, с чем связана ошибка "Error building certification path"?
Какие логи посмотреть?
Как я понимаю, не строится цепочка для сертификата TSA.cer?


31.03.2017
Внезапно алгоритм снова заработал...
С чем связано неизвестно...

Отредактировано пользователем 14 апреля 2017 г. 9:58:42(UTC)  | Причина: Не указана

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