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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline MikhailT  
#1 Оставлено : 17 ноября 2014 г. 11:01:40(UTC)
MikhailT

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

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

Сказал(а) «Спасибо»: 1 раз
Добрый день.

На клиенте создаю присоединенную подпись таким образом:
Код:
        
        var CADESCOM_CADES_BES = 1;

        var CAPICOM_CURRENT_USER_STORE = 2;
        var CAPICOM_MY_STORE = "My";
        var CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED = 2;
        var CAPICOM_CERTIFICATE_FIND_SUBJECT_NAME = 1;
        var CADESCOM_BASE64_TO_BINARY = 1;

		function SignCreate(certSubjectName, dataToSign) {
            var oStore = CreateObject("CAPICOM.Store");
            oStore.Open(CAPICOM_CURRENT_USER_STORE, CAPICOM_MY_STORE,
                    CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED);

            var oCertificates = oStore.Certificates.Find(
                    CAPICOM_CERTIFICATE_FIND_SUBJECT_NAME, certSubjectName);
            if (oCertificates.Count == 0) {
                alert("Certificate not found: " + certSubjectName);
                return;
            }
            var oCertificate = oCertificates.Item(1);
            var oSigner = CreateObject("CAdESCOM.CPSigner");
            oSigner.Certificate = oCertificate;

            var oSignedData = CreateObject("CAdESCOM.CadesSignedData");
            oSignedData.Content = dataToSign;

            try {
                var sSignedMessage = oSignedData.SignCades(oSigner, CADESCOM_CADES_BES, false);
            } catch (err) {
                alert("Failed to create signature. Error: " + GetErrorMessage(err));
                return;
            }

            oStore.Close();

            return sSignedMessage;
        }


верификация на клиенте успешна:
Код:
        function Verify(sSignedMessage, dataToVerify) {
            var oSignedData = CreateObject("CAdESCOM.CadesSignedData");
            try {
                oSignedData.Content = dataToVerify;
                oSignedData.VerifyCades(sSignedMessage, CADESCOM_CADES_BES, false);
            } catch (err) {
                alert("Failed to verify signature. Error: " + GetErrorMessage(err));
                return false;
            }

            return true;
        }


Теперь хочу проверить подпись на стороне сервере:
Код:
    
	public static void loadConfiguration(String storeType, String storeFile,
		char[] storePassword, String alias, Collection<X509Certificate>
		chain) throws KeyStoreException, NoSuchAlgorithmException, CertificateException, 
		IOException, UnrecoverableKeyException {
		
		KeyStore keyStore = KeyStore.getInstance(storeType);
		keyStore.load(storeFile == null ? null : new FileInputStream(storeFile), 
			storePassword);
		
		// Получаем цепочку сертификатов.
		List<Certificate> lChain = 
			Arrays.asList(keyStore.getCertificate(alias));
	
		// Конвертируем цепочку в X509Certificate.
		Collection<X509Certificate> xChain = 
			Arrays.asList((lChain).toArray(new X509Certificate[lChain.size()]));
		
		chain.addAll(xChain);
	}
	
private void cadesVerify(String cms) throws CAdESException, CertificateException, NoSuchAlgorithmException, KeyStoreException, IOException, UnrecoverableKeyException {
        Collection<X509Certificate> chain = new ArrayList<X509Certificate>();
        Configuration.loadConfiguration("CertStore", "jcpcert.store", "1".toCharArray(), "testcert.cer", chain);

        byte[] decodedCMS = org.bouncycastle.util.encoders.Base64.decode(cms);

        CAdESSignature cadesSignature = new CAdESSignature(decodedCMS, null, null);
        cadesSignature.verify(chain);
    }


в логе:
Код:
17.11.2014 10:50:59 ru.CryptoPro.CAdES.CAdESSigner a
INFO: *** Signer signature type: CAdES-BES ***
17.11.2014 10:50:59 ru.CryptoPro.CAdES.CAdESSigner a
INFO: Current signature cryptographic provider: JCP
17.11.2014 10:50:59 ru.CryptoPro.CAdES.b.d.b a
INFO: Built chain contains next certificates: 
17.11.2014 10:50:59 ru.CryptoPro.CAdES.b.d.b a
INFO: [1] certificate
	serial number: 12000087bdb6ee3bddf405b8b70000000087bd
	subject: C=RU, L=1, O=1, OU=1, CN=testcert, EMAILADDRESS=1
	issuer: CN=CRYPTO-PRO Test Center 2, O=CRYPTO-PRO LLC, L=Moscow, C=RU, EMAILADDRESS=support@cryptopro.ru
17.11.2014 10:50:59 ru.CryptoPro.CAdES.b.d.b a
INFO: [T] Chain trusted certificate 
	serial number: 2b6e3351fd6eb2ad48200203cb5ba141
	subject: CN=CRYPTO-PRO Test Center 2, O=CRYPTO-PRO LLC, L=Moscow, C=RU, EMAILADDRESS=support@cryptopro.ru
17.11.2014 10:50:59 ru.CryptoPro.CAdES.b.d.a a
INFO: Verify certificate chain for target certificate
	serial number: 12000087bdb6ee3bddf405b8b70000000087bd
	subject: C=RU, L=1, O=1, OU=1, CN=testcert, EMAILADDRESS=1
	issuer: CN=CRYPTO-PRO Test Center 2, O=CRYPTO-PRO LLC, L=Moscow, C=RU, EMAILADDRESS=support@cryptopro.ru
	signature provider: JCP
	PKIX validator: CPPKIX of RevCheck
	revocation enabled: false
	online: false
17.11.2014 10:50:59 ru.CryptoPro.CAdES.b.d.a a
INFO: Certificate chain built correctly.
17.11.2014 10:50:59 ru.CryptoPro.CAdES.b.d.a a
INFO: Verify certificate chain for target certificate
	serial number: 12000087bdb6ee3bddf405b8b70000000087bd
	subject: C=RU, L=1, O=1, OU=1, CN=testcert, EMAILADDRESS=1
	issuer: CN=CRYPTO-PRO Test Center 2, O=CRYPTO-PRO LLC, L=Moscow, C=RU, EMAILADDRESS=support@cryptopro.ru
	signature provider: JCP
	PKIX validator: CPPKIX of RevCheck
	revocation enabled: true
	online: true
17.11.2014 10:50:59 ru.CryptoPro.CAdES.exception.CAdESException <init>
SEVERE: Parameters 'ru.CryptoPro.reprov.enableCRLDP', 'com.sun.security.enableCRLDP' and 'com.ibm.security.enableCRLDP' must be set 'true'
17.11.2014 10:50:59 ru.CryptoPro.CAdES.CAdESSigner a
INFO: Signer certificate chain is invalid.
17.11.2014 10:50:59 ru.CryptoPro.CAdES.exception.CAdESException <init>
SEVERE: Wrong certificate chain
Wrong certificate chain, errors: 'Wrong certificate chain' (1)
	at ru.CryptoPro.CAdES.CAdESSigner.a(Unknown Source)
	at ru.CryptoPro.CAdES.CAdESSignature.a(Unknown Source)
	at ru.CryptoPro.CAdES.CAdESSignature.verify(Unknown Source)
	at ru.tsc.HelloW.cadesVerify(HelloW.java:83)
	at ru.tsc.HelloW.doPost(HelloW.java:66)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:931)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:662)



Окружение:
jdk16.0.26
КриптоПро Рутокен CSP
jcp_plus_jtls_1.0.54

Подскажите, что я делаю не так?
Offline Евгений Афанасьев  
#2 Оставлено : 17 ноября 2014 г. 12:30:15(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 732 раз в 690 постах
Здравствуйте.

Цитата:

Parameters 'ru.CryptoPro.reprov.enableCRLDP', 'com.sun.security.enableCRLDP' and 'com.ibm.security.enableCRLDP' must be set 'true'


Попробуйте для начала поставить в коде
Код:

static {
        // Включаем возможность онлайновой проверки.
        System.setProperty("com.sun.security.enableCRLDP", "true");
        System.setProperty("com.ibm.security.enableCRLDP", "true");
    }
thanks 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
MikhailT оставлено 18.11.2014(UTC)
Offline MikhailT  
#3 Оставлено : 18 ноября 2014 г. 7:15:05(UTC)
MikhailT

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

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

Сказал(а) «Спасибо»: 1 раз
Благодарю, все было перед носом :)
Offline MikhailT  
#4 Оставлено : 18 ноября 2014 г. 7:52:04(UTC)
MikhailT

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

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

Сказал(а) «Спасибо»: 1 раз
Подскажите пожалуйста еще одну вещь:

сгенерил подпись (переделал на отделенную, но с присоединенной то же самое):



Подпись верифицируется все ок, но что странно, если, к примеру, заменить последнюю букву 's' на 'a'/'z'/какую угодно подпись все равно верифицируется на сервере, на клиенте выдает ошибку.
КриптоАрм тоже ругается. Почему такое может быть?
Offline Евгений Афанасьев  
#5 Оставлено : 18 ноября 2014 г. 9:43:11(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 732 раз в 690 постах
А ошибки какого характера - что структура не верна или подпись некорректна? В CAdES.jar подпись декодируется с помощью bouncycastle'а, возможно, эти изменения для него некритичны.
Offline MikhailT  
#6 Оставлено : 18 ноября 2014 г. 9:50:40(UTC)
MikhailT

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

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

Сказал(а) «Спасибо»: 1 раз
Подпись некорректна.
хотя сейчас нашел случай, когда браузер плагин тоже верифицирует измененную руками подпись.

Т.е. получается что, если после изменений подписи "руками" не пострадала структура, то в некоторых случаях подпись верифицируется корректно?
Offline Евгений Афанасьев  
#7 Оставлено : 18 ноября 2014 г. 10:20:44(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 732 раз в 690 постах
Автор: MikhailT Перейти к цитате
Т.е. получается что, если после изменений подписи "руками" не пострадала структура, то в некоторых случаях подпись верифицируется корректно?

Скорее всего, так. Не пострадали те участки, по которым вычисляется или где содержится подпись.

Отредактировано пользователем 18 ноября 2014 г. 10:21:19(UTC)  | Причина: Не указана

Offline MikhailT  
#8 Оставлено : 18 ноября 2014 г. 13:05:07(UTC)
MikhailT

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

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

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