Статус: Активный участник
Группы: Участники
Зарегистрирован: 24.04.2015(UTC) Сообщений: 36 Откуда: Москва Сказал(а) «Спасибо»: 4 раз
|
Немогу понять как добавить имеющийся публичный ключ в HDImageStore. На самом деле я его вот тут получил http://www.cryptopro.ru/certsrv/certrqma.asp и контейнер у меня в КриптоПро CSP есть (оттуда я публичный ключ достал). Мне нужно это чтобы отладить всю связку браузер -> подпись документа -> проверка подписи в приложении. Как это сделать можно?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,003 Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 714 раз в 674 постах
|
Здравствуйте. Вы имеете в виду добавить сертификат в контейнер? С помощью панели JCP, закладка "Хранилища ключей и сертификатов". Контейнеры CSP в JCP отображаться не будут, кроме некоторых случаев *nix и Mac OS. Или добавить программно? Тогда с помощью setCertificateEntry(). Следует обратиться к документации (в дистрибутиве JCP, в папке Doc, руководство программиста или администратора). |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 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)
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 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);
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 24.04.2015(UTC) Сообщений: 36 Откуда: Москва Сказал(а) «Спасибо»: 4 раз
|
Спасибо. Нашел документацию стала намного понятнее.
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 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, но из них неочень понятно. Возможно есть какая-нибудь документация и по этой части?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,003 Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 714 раз в 674 постах
|
В папке javadoc есть CAdES-javadoc.jar с документацией. В описании класса CAdESSignature есть примеры. Примеры есть и в пакете CAdES в samples-sources.jar. См. также README.cades.user.txt в папке Doc. |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 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)
| Причина: Не указана
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 24.04.2015(UTC) Сообщений: 36 Откуда: Москва Сказал(а) «Спасибо»: 4 раз
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 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)
| Причина: Не указана
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close