Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,507   Сказал «Спасибо»: 554 раз Поблагодарили: 2251 раз в 1756 постах
|
(detached==True. Почему? До этого утверждали, что присоединенную нужно отправлять. Плагин на той странице формирует присоединенную.
Покажите технические требования этого сервера к cms. Файлы сравню позже |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 08.07.2020(UTC) Сообщений: 26  Откуда: Пермь
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,507   Сказал «Спасибо»: 554 раз Поблагодарили: 2251 раз в 1756 постах
|
Да, под Windows всё проверяется, через MS CryptoAPI, в том числе и через КриптоАРМ.  Snimok ehkrana ot 2020-08-27 00-55-17.png (17kb) загружен 4 раз(а).Но, в файле от java-приложения - некорректная структура ASN.1 вот что выдаёт ASN1.dump "5 errors" (слева от java, справа от плагина)  Snimok ehkrana ot 2020-08-27 00-54-35.png (23kb) загружен 10 раз(а).Далее, если сравнивать ASN.1 Плагин: ObjectID алгоритма: 1.2.643.7.1.1.1.1 ГОСТ Р 34.10-2012 256 бит Алгоритм ГОСТ Р 34.10-2012 для ключей длины 256 бит, используемый при экспорте/импорте ключей Цитата: 7305 $30 SEQUENCE: ==>12 7307 $06 OBJID: 1.2.643.7.1.1.1.1 7317 $05 NULL: 7319 $04 OCTSTR: 0B043DA930E523D441C8E12F3842BD58923595E10D73D9C6E3224CEAC37321F04365AA89D25CFB823203A359D309373CCA5BFE66EF58802CBB65B35EF24DD436
Java-приложение: ObjectID алгоритма: 1.2.643.7.1.1.6.1 ГОСТ Р 34.10-2012 DH 256 бит Алгоритм Диффи-Хеллмана на базе эллиптической кривой для ключей длины 256 бит Цитата: 7245 $30 SEQUENCE: ==>10 7247 $06 OBJID: 1.2.643.7.1.1.6.1 7257 $04 OCTSTR: D93A27B359A75D08C52E6624424CFE8E1D987C220CA5690332AF6383047E042D4D29B35EFB67E18622570D7E06CAA125A09D9685675B8DA2E332C42EE6C60D44 7323 $00 unknown[0]: 7325 $00 unknown[0]: 7327 $00 unknown[0]:
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,507   Сказал «Спасибо»: 554 раз Поблагодарили: 2251 раз в 1756 постах
|
+ Еще вариант: неправильно формируется ASN.1 в коде\записывается в файл, в конце файла вижу 6 байт 0  Snimok ehkrana ot 2020-08-27 01-14-59.png (20kb) загружен 6 раз(а).предлагаю выложить код, которым формируется и записывается в файл. На принимающей стороне, вероятно, проверяется полностью структура ASN.1 (т.е. до самой проверки корректности подписанного хеша не доходит). |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 08.07.2020(UTC) Сообщений: 26  Откуда: Пермь
|
Код:
public static String signed(String data, boolean detached) throws IOException, KeyStoreException, NoSuchAlgorithmException, CertificateException, UnrecoverableKeyException, CAdESException, InvalidKeyException, SignatureException {
final byte src[] = data.getBytes(StandardCharsets.UTF_16LE);
KeyStore keyStore = KeyStore.getInstance( cer_story );
keyStore.load( null, null );
PrivateKey privateKey = (PrivateKey) keyStore.getKey( cer_alias, cer_pass );
X509Certificate cert = (X509Certificate) keyStore.getCertificate( cer_alias );
List<X509Certificate> chain = Arrays.asList( cert );
CAdESSignature cadesSignature = new CAdESSignature(detached);
// Создаем подписанта CAdES-BES.
cadesSignature.addSigner(
"JCP", "1.2.643.7.1.1.2.2", "1.2.643.7.1.1.6.1",
privateKey, chain, CAdESType.CAdES_BES, null, false,
null, null, null, true
);
return extractBase64Sign(cadesSignature, src);
}
private static String extractBase64Sign(CAdESSignature cadesSignature, final byte[] src) throws CAdESException, IOException {
// Будущая подпись в виде массива.
ByteArrayOutputStream signatureStream = new ByteArrayOutputStream();
// Подготовка контекста.
cadesSignature.open(signatureStream);
// Хеширование.
cadesSignature.update(src);
// Создание подписи с выводом в signatureStream.
cadesSignature.close();
signatureStream.close();
// Получаем подпись в виде массива.
byte[] cadesCms = signatureStream.toByteArray();
return Base64.getEncoder().encodeToString(cadesCms);
}
Отредактировано пользователем 27 августа 2020 г. 0:24:24(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,507   Сказал «Спасибо»: 554 раз Поблагодарили: 2251 раз в 1756 постах
|
Цитата: "JCP", "1.2.643.7.1.1.2.2", "1.2.643.7.1.1.6.1", Есть обоснование, почему именно такие идентификаторы нужны? |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 08.07.2020(UTC) Сообщений: 26  Откуда: Пермь
|
Автор: Андрей *  Цитата: "JCP", "1.2.643.7.1.1.2.2", "1.2.643.7.1.1.6.1", Есть обоснование, почему именно такие идентификаторы нужны? Если меняю 1.2.643.7.1.1.6.1 на 1.2.643.7.1.1.1.1 то падает исключение на то что ожидается 1.2.643.7.1.1.6.1. Или вообще не указывать? null проставить?
|
|
|
|
Статус: Сотрудник
Группы: Модератор, Участники Зарегистрирован: 03.12.2018(UTC) Сообщений: 1,215  Сказал(а) «Спасибо»: 101 раз Поблагодарили: 285 раз в 265 постах
|
по поводу оидов посмотрите нижеприведенный код. использую другой конструктор. возможно еще что на той стороне ожидается вся цепочка подписанта в подписи. т.к. плагин ложит всю цепочку в подпись Код:
...
Certificate[] chain = keyStore.getCertificateChain(ALIAS);
X509Certificate[] xChain = new X509Certificate[chain.length];
System.arraycopy(chain, 0, xChain, 0, chain.length);
Collection<X509CertificateHolder> certHolders = new ArrayList<X509CertificateHolder>(chain.length);
for (Certificate cert : chain) {
certHolders.add(new X509CertificateHolder(cert.getEncoded()));
}
CollectionStore store = new CollectionStore(certHolders);
ByteArrayOutputStream signature = new ByteArrayOutputStream();
CAdESSignature cAdESSignature = new CAdESSignature(true); // true detached ; false attached
cAdESSignature.addSigner(
JCP.PROVIDER_NAME,
privateKey,
Arrays.asList(xChain),
CAdESType.CAdES_BES,
null,
false);
cAdESSignature.open(signature);
cAdESSignature.update(data);
cAdESSignature.setCertificateStore(store); //установка цепочки в подпись
cAdESSignature.close();
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 08.07.2020(UTC) Сообщений: 26  Откуда: Пермь
|
Перепробовал разные варианты. Не получается. Код клиентской части на js ниже. Надо консольное приложение на java которое бы формировало точно такую же подпись. Что ещё упустили? Код:
cadesplugin.async_spawn(function*(arg) {
var sData = arg[0];
var sCertHash = arg[1];
var contentEndoding = arg[2];
if(sCertHash == "")
return signData_reject("Передан пустой отпечаток сертификата");
if(sData == null || sData == "")
return signData_reject("Не задано содержание для подписания");
var certificate;
try{
certificate = yield GetCertificate_Async(sCertHash);
var info = yield GetCertInfo_Async(certificate);
}
catch(ex){
return signData_reject();
}
try{
var oSigner, oSignedData;
try {
oSigner = yield cadesplugin.CreateObjectAsync("CAdESCOM.CPSigner");
oSignedData = yield cadesplugin.CreateObjectAsync("CAdESCOM.CadesSignedData");
}
catch (err) {
return signData_reject("Невозможно создать объекты CAdESCOM: " + GetErrorMessage(err));
}
if (oSigner) {
yield oSigner.propset_Certificate(certificate);
}
else
{
return signData_reject("Невозможно создать объект CAdESCOM.CPSigner");
}
//Тут муть, пока коментим
var oSigningTimeAttr = yield cadesplugin.CreateObjectAsync("CADESCOM.CPAttribute");
yield oSigningTimeAttr.propset_Name(CAPICOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME);
var oTimeNow = new Date();
yield oSigningTimeAttr.propset_Value(oTimeNow);
var attr = yield oSigner.AuthenticatedAttributes2;
oTimeNow = null;
yield attr.Add(oSigningTimeAttr);
if(contentEndoding != undefined){
yield oSignedData.propset_ContentEncoding(contentEndoding);
}
yield oSignedData.propset_Content(sData);
yield oSigner.propset_Options(1); //CAPICOM_CERTIFICATE_INCLUDE_WHOLE_CHAIN
try {
Signature = yield oSignedData.SignCades(oSigner, CADESCOM_CADES_BES, true, CAPICOM_ENCODE_BASE64);
if (Signature == null || Signature == undefined || Signature == false) {
Signature = "";
}
return signData_resolve(Signature);
}
catch(err)
{
return signData_reject("Произошла ошибка: " + GetErrorMessage(err));
}
}
catch(err){
return signData_reject("Произошла ошибка: " + GetErrorMessage(err));
}
}, sDataArg, sCertHashArg, contentEndodingArg);
return result;
}
Отредактировано пользователем 7 сентября 2020 г. 13:39:10(UTC)
| Причина: Не указана
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 08.07.2020(UTC) Сообщений: 26  Откуда: Пермь
|
Какой конструктор и параметры cAdESSignature.addSigner нужно использовать чтобы результат получился как от работы js кода выше???
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close