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

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline vldpyatkov  
#1 Оставлено : 24 апреля 2015 г. 18:27:57(UTC)
vldpyatkov

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

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

Сказал(а) «Спасибо»: 4 раз
Немогу понять как добавить имеющийся публичный ключ в HDImageStore.
На самом деле я его вот тут получил http://www.cryptopro.ru/certsrv/certrqma.asp и контейнер у меня в КриптоПро CSP есть (оттуда я публичный ключ достал).
Мне нужно это чтобы отладить всю связку браузер -> подпись документа -> проверка подписи в приложении.
Как это сделать можно?
Offline Евгений Афанасьев  
#2 Оставлено : 24 апреля 2015 г. 18:53:15(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 714 раз в 674 постах
Здравствуйте.
Вы имеете в виду добавить сертификат в контейнер? С помощью панели JCP, закладка "Хранилища ключей и сертификатов". Контейнеры CSP в JCP отображаться не будут, кроме некоторых случаев *nix и Mac OS.
Или добавить программно? Тогда с помощью setCertificateEntry(). Следует обратиться к документации (в дистрибутиве JCP, в папке Doc, руководство программиста или администратора).
Offline vldpyatkov  
#3 Оставлено : 25 апреля 2015 г. 0:47:19(UTC)
vldpyatkov

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

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

Сказал(а) «Спасибо»: 4 раз
Добрый вечер,

А немогли бы вы пояснить что такое контейнер?
В jks хранилище я могу много ключей сложить, а здесь у мня только один ключ положить получается.
Могу пояснить моё замешательство так (перед этим создал два контейнера через CryptoPro JCP):
Код:

public class Main {

    private static char[] STORE_PASSWORD= null;
    private static String STORE_FILE="C:\\Users\\User\\Desktop\\MasterDataDocs\\CryptoPro\\JCP\\MyCerJCP";

    public static void main(String[] args) throws KeyStoreException, IOException, CertificateException, NoSuchAlgorithmException, UnrecoverableKeyException {
        System.out.print("Hello Crypto!");

        KeyStore keyStore = KeyStore.getInstance("HDImageStore");
        keyStore.load(new FileInputStream(STORE_FILE), STORE_PASSWORD);

        PrivateKey privateKey = (PrivateKey) keyStore.getKey("Alias", null);
        System.out.println(privateKey.getEncoded());

    }

}

Один из них совершенно точно лежить по указанному пути в файловой системе и имеет алиас Alias (пароль пустой).

Но вот такой результат:
Код:

Hello Crypto!Apr 25, 2015 12:45:42 AM ru.CryptoPro.JCSP.JCSP <init>
INFO: Loading JCSP 4.0 38150
Apr 25, 2015 12:45:42 AM ru.CryptoPro.JCSP.JCSP <init>
INFO: JCSP loaded.
Apr 25, 2015 12:45:43 AM ru.CryptoPro.JCP.tools.Starter check
INFO: Loading JCP 2.0 38150
Apr 25, 2015 12:45:43 AM ru.CryptoPro.JCP.tools.Starter check
INFO: JCP loaded.
Exception in thread "main" java.io.IOException: Неверный формат хранилища.
	at ru.CryptoPro.JCP.KeyStore.TrustStore.engineLoad(Unknown Source)
	at ru.CryptoPro.JCP.KeyStore.JCPKeyStore.engineLoad(Unknown Source)
	at java.security.KeyStore.load(KeyStore.java:1214)
	at Main.main(Main.java:20)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:606)
	at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)
Offline Евгений Афанасьев  
#4 Оставлено : 25 апреля 2015 г. 23:05:42(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 714 раз в 674 постах
Автор: afev Перейти к цитате
Следует обратиться к документации (в дистрибутиве JCP, в папке Doc, руководство программиста или администратора).

Обязательно сначала посмотрите документацию к JCP, в частности, "Руководство программиста". Работа с ключами в JCP осуществляется иначе.
Кратко в приведенном примере - правильно:
Код:

KeyStore keyStore = KeyStore.getInstance("HDImageStore");
keyStore.load(null, null);
PrivateKey privateKey = (PrivateKey) keyStore.getKey("Alias", STORE_PASSWORD);



Offline vldpyatkov  
#5 Оставлено : 26 апреля 2015 г. 19:12:51(UTC)
vldpyatkov

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

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

Сказал(а) «Спасибо»: 4 раз
Спасибо.
Нашел документацию стала намного понятнее.
Offline vldpyatkov  
#6 Оставлено : 28 апреля 2015 г. 19:42:34(UTC)
vldpyatkov

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

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

Сказал(а) «Спасибо»: 4 раз
А вроде изучил документациб и разобрался с работой подписей, однако теперь задача в том чтобы сделать подпись такую как это умеет делать плагин для браузера:
Код:

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

    var CAPICOM_CERTIFICATE_FIND_SHA1_HASH = 0;
	var oCertificates = oStore.Certificates.Find(CAPICOM_CERTIFICATE_FIND_SHA1_HASH, thumbprint);
	
	//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;
    oSigner.TSAAddress = "http://cryptopro.ru/tsp/";

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

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

    oStore.Close();

    return sSignedMessage;
}


Вот так делает мой плагин, и это работает.

Однако как проверить подпись на сервере непонятно.
Есть примеры CAdES, но из них неочень понятно.
Возможно есть какая-нибудь документация и по этой части?
Offline Евгений Афанасьев  
#7 Оставлено : 28 апреля 2015 г. 20:36:36(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 714 раз в 674 постах
В папке javadoc есть CAdES-javadoc.jar с документацией. В описании класса CAdESSignature есть примеры. Примеры есть и в пакете CAdES в samples-sources.jar. См. также README.cades.user.txt в папке Doc.
Offline vldpyatkov  
#8 Оставлено : 29 апреля 2015 г. 14:30:51(UTC)
vldpyatkov

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

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

Сказал(а) «Спасибо»: 4 раз
Очень странная ошибка.
После вызова:
Код:

CAdESSignature cadesSignature = new CAdESSignature(isDetachedSign)

Валится ошибка: Exception in thread "main" java.lang.NoClassDefFoundError: org/bouncycastle/cms/CMSException, хоят все библиотеки bonse castle (из папки dependencies) есть в classpath, в том числе bcmail-jdk16.

Отредактировано пользователем 29 апреля 2015 г. 14:33:43(UTC)  | Причина: Не указана

Offline vldpyatkov  
#9 Оставлено : 29 апреля 2015 г. 14:49:39(UTC)
vldpyatkov

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

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

Сказал(а) «Спасибо»: 4 раз
Всё нашел:
http://www.cryptopro.ru/...sts&t=6085#post37994
Спасибо
Offline vldpyatkov  
#10 Оставлено : 29 апреля 2015 г. 20:07:22(UTC)
vldpyatkov

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

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

Сказал(а) «Спасибо»: 4 раз
Теперь проблема с недоверенным сертификатом:
Цитата:

FINE: SunCertPathBuilder.depthFirstSearchForward(): backtracking
Apr 29, 2015 8:04:16 PM ru.CryptoPro.CAdES.exception.CAdESException <init>
SEVERE: Error building certification path for SURNAME=Тестов, GIVENNAME=Тест Тестович, T=Тестировщик TSP, STREET="ул. Сущёвский вал, д. 18", CN=Demo TSA Operator, OU=Отдел тестирования, O="ООО \"КРИПТО-ПРО\"", L=Москва, ST=77 г. Москва, C=RU, EMAILADDRESS=support@cryptopro.ru, OID.1.2.643.3.131.1.1=#120C303037373132333435363738, OID.1.2.643.100.1=#120D31303037373132333435363738, OID.1.2.643.100.3=#120B3132333435363738393031: ru.CryptoPro.reprov.certpath.JCPCertPathBuilderException: unable to find valid certification path to requested target


Когда я убираю этого подписчика:
Код:

// Создаем подписанта CAdES-X Long Type 1.
        cadesSignature.addSigner(container.resolveProvider(),
                getDigestOid(privateKey),
                getPublicKeyOid(privateKey),
                privateKey,
                chain,
                CAdESType.CAdES_X_Long_Type_1,
                container.getTsaAddress(), false);

проверка проходит успешно.

Откуда вообще такой берётся и как мне его добавить?

Отредактировано пользователем 29 апреля 2015 г. 20:10:56(UTC)  | Причина: Не указана

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