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

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline elizaveta96  
#1 Оставлено : 18 ноября 2019 г. 8:00:47(UTC)
elizaveta96

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

Группы: Участники
Зарегистрирован: 18.11.2019(UTC)
Сообщений: 6

Сказал(а) «Спасибо»: 1 раз
Коллеги, доброе утро!
Передо мной встала задача проверки открепленной подписи xmldsig документа xml.
Сам документ и подпись приходят отдельно в сообщении формата json.
Пробовала тысячу способов проверить подпись, но результат проверки всегда false.
Есть ли вообще способ проверить открепленную подпись xmldsig?
Offline Евгений Афанасьев  
#2 Оставлено : 18 ноября 2019 г. 9:29:49(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 691 раз в 652 постах
Здравствуйте.
Приложите ваш пример проверки, попробуем проверить.
Offline elizaveta96  
#3 Оставлено : 18 ноября 2019 г. 14:58:47(UTC)
elizaveta96

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

Группы: Участники
Зарегистрирован: 18.11.2019(UTC)
Сообщений: 6

Сказал(а) «Спасибо»: 1 раз
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
Document doc = dbf.newDocumentBuilder().parse(new InputSource(new StringReader(sign)));

String providerName = "ru.CryptoPro.JCPxml.dsig.internal.dom.XMLDSigRI";
XMLSignatureFactory fac = XMLSignatureFactory.getInstance("DOM",
(Provider) Class.forName(providerName).newInstance());
DOMValidateContext valContext = new DOMValidateContext(new X509CertificateSelector(), doc);
//valContext.setProperty("org.jcp.xml.dsig.internal.dom.SignatureProvider", provider);

// unmarshal the XMLSignature
XMLSignature signature = fac.unmarshalXMLSignature(valContext);

// Validate the XMLSignature (generated above)
boolean coreValidity = signature.validate(valContext);
System.out.println(coreValidity);

в качестве sign передается вот такой элемент

<Signature xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /><SignatureMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102012-gostr34112012-256"/><Reference URI=""><DigestMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34112012-256"/><DigestValue>TCqGf3AyQn0kuMcOYZ6oqNOMblI3KPbTqItMuLXh7YE=</DigestValue></Reference></SignedInfo><SignatureValue>uf7NzZF7zmBnkYF5X3am2iSeBaXU19fIh27WY4OeyKUhM9BpDwdKeOd08MfL7bA44aumBgVocOH1AeIWbZv2Kg==</SignatureValue><KeyInfo><X509Data><X509Certificate>MIIBpTCCAVKgAwIBAgIEfQohNDAKBggqhQMHAQEDAjA0MQswCQYDVQQGEwJSVTESMBAGA1UECgwJTUlSU19QZXJtMREwDwYDVQQDDAhQZXJtX3BpdjAeFw0xOTEwMjIxMTIxNDhaFw0yMDEwMjIxMTIxNDhaMDQxCzAJBgNVBAYTAlJVMRIwEAYDVQQKDAlNSVJTX1Blcm0xETAPBgNVBAMMCFBlcm1fcGl2MGYwHwYIKoUDBwEBAQEwEwYHKoUDAgIkAAYIKoUDBwEBAgIDQwAEQAGovbexj6OUWJ0Ki+ccx0uc9j3hOfG7SyuTZu8qqAhv1Hkoo8LbEetevlPFhI86TQFTHDJ/o7CPUohJR6Z6bHujRTBDMA4GA1UdDwEB/wQEAwID6DAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwEgYDVR0TAQH/BAgwBgEB/wIBBTAKBggqhQMHAQEDAgNBAM2pRo7Fxhp3V0DiNUdrouisMIww889yemQIZYZl96XJhZW0qpZrMKLnR97VOwokIn2KxeJpNM1bpvTq/L3EASk=</X509Certificate></X509Data></KeyInfo></Signature>

я думаю, моя ошибка связана с тем, что не связана подпись и документ
но я не знаю как их связать, так как в подписи нет ссылки на документ
Offline Евгений Афанасьев  
#4 Оставлено : 18 ноября 2019 г. 15:20:26(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 691 раз в 652 постах
В подписи должно быть указание на подписанные данные: http-ссылка на документ, идентификатор узла. Если был подписан документ, то вставьте в него подпись, чтобы по идентификатору можно было найти данные.
Offline elizaveta96  
#5 Оставлено : 18 ноября 2019 г. 15:44:33(UTC)
elizaveta96

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

Группы: Участники
Зарегистрирован: 18.11.2019(UTC)
Сообщений: 6

Сказал(а) «Спасибо»: 1 раз
Вот в том то и дело, что подпись никаких ссылок на документ не содержит.
Тогда получается нужно вставить подпись в документ и тогда проверять?
Offline Евгений Афанасьев  
#6 Оставлено : 18 ноября 2019 г. 15:45:57(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 691 раз в 652 постах
Не обратил внимание на URI="".
Да, вставьте в документ.
Offline elizaveta96  
#7 Оставлено : 18 ноября 2019 г. 16:01:39(UTC)
elizaveta96

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

Группы: Участники
Зарегистрирован: 18.11.2019(UTC)
Сообщений: 6

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

вот код
public Document check(Element data, Element sign) throws Exception {

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);

Document tmpDocContent = dbf.newDocumentBuilder().newDocument();
Element cutContent = (Element) tmpDocContent.importNode(data, true);
Document tmpDocSignature = dbf.newDocumentBuilder().newDocument();
Element cutSignature = (Element) tmpDocSignature.importNode(sign, true);
tmpDocSignature.appendChild(cutSignature);


Document tmpDocument = dbf.newDocumentBuilder().newDocument();
Element tmpDocumentRootElement = (Element) tmpDocument.appendChild(tmpDocument.createElement("root_validator"));
Element signatureElement = (Element) tmpDocumentRootElement.appendChild(tmpDocument.importNode(cutSignature, true));
tmpDocumentRootElement.appendChild(tmpDocument.importNode(cutContent, true));
tmpDocument.normalizeDocument();
String providerName = "ru.CryptoPro.JCPxml.dsig.internal.dom.XMLDSigRI";
XMLSignatureFactory fac = XMLSignatureFactory.getInstance("DOM",
(Provider) Class.forName(providerName).newInstance());
DOMValidateContext valContext = new DOMValidateContext(new X509CertificateSelector(), signatureElement);
//valContext.setProperty("org.jcp.xml.dsig.internal.dom.SignatureProvider", provider);

// unmarshal the XMLSignature
XMLSignature signature = fac.unmarshalXMLSignature(valContext);

// Validate the XMLSignature (generated above)
boolean coreValidity = signature.validate(valContext);
System.out.println(coreValidity);

// Check core validation status
return tmpDocument;

}

вот получившийся документ

я создала узел root_validator, вставила в него подпись, а потом документ

<?xml version="1.0" encoding="UTF-8" standalone="no"?><root_validator><Signature xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/><SignatureMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102012-gostr34112012-256"/><Reference URI=""><DigestMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34112012-256"/><DigestValue>TCqGf3AyQn0kuMcOYZ6oqNOMblI3KPbTqItMuLXh7YE=</DigestValue></Reference></SignedInfo><SignatureValue>uf7NzZF7zmBnkYF5X3am2iSeBaXU19fIh27WY4OeyKUhM9BpDwdKeOd08MfL7bA44aumBgVocOH1AeIWbZv2Kg==</SignatureValue><KeyInfo><X509Data><X509Certificate>MIIBpTCCAVKgAwIBAgIEfQohNDAKBggqhQMHAQEDAjA0MQswCQYDVQQGEwJSVTESMBAGA1UECgwJTUlSU19QZXJtMREwDwYDVQQDDAhQZXJtX3BpdjAeFw0xOTEwMjIxMTIxNDhaFw0yMDEwMjIxMTIxNDhaMDQxCzAJBgNVBAYTAlJVMRIwEAYDVQQKDAlNSVJTX1Blcm0xETAPBgNVBAMMCFBlcm1fcGl2MGYwHwYIKoUDBwEBAQEwEwYHKoUDAgIkAAYIKoUDBwEBAgIDQwAEQAGovbexj6OUWJ0Ki+ccx0uc9j3hOfG7SyuTZu8qqAhv1Hkoo8LbEetevlPFhI86TQFTHDJ/o7CPUohJR6Z6bHujRTBDMA4GA1UdDwEB/wQEAwID6DAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwEgYDVR0TAQH/BAgwBgEB/wIBBTAKBggqhQMHAQEDAgNBAM2pRo7Fxhp3V0DiNUdrouisMIww889yemQIZYZl96XJhZW0qpZrMKLnR97VOwokIn2KxeJpNM1bpvTq/L3EASk=</X509Certificate></X509Data></KeyInfo></Signature><MSG BUDGET_ID="200000002363" CREATE_TIME="2019-11-13T11:34:27.000" DESCRIPTION="Выгрузка в БУ документа Заявка БУ/АУ на выплату средств № 2734 от 17.09.2019 (ID=200008311615)" PROCESS_PRIORITY="1" PROCESS_TIME="" QUEUE_NAME="TRANSPORT" RECEIVER_ID="250" RECEIVE_TIME="" REQUEST_DATA_CRC="2117852644" REQUEST_DATA_LEN="4987" RESET_QUEUE="0" RPL_OBJ_NAME="" SENDER_ID="200" SEND_TIME="" SEQ_NUMBER="135" format="1">
<BODY><![CDATA[<?xml version="1.0" encoding="windows-1251" ?>
<RPL CLIENT_ID="250" MASTER_ID="200" action="manual_unload">
<HEADER DOCUMENT_ID="200123892850" ORG_CODE_FK="20208" ORG_KPP="590201001"
ORG_TAXCODE="5902293107" RecordTimeStamp="2019-11-13_11-34-27" class="195" status="10"/>
<DOCUMENT ACCEPTED_OBL_DATA="" ACCEPTED_OBL_DOC_ID="" ACCEPTED_OBL_ID=""
ADVANCE_PAYMENT="0" AMOUNT="1568.22" ANOTHER_PAY_ID="" ANOTHER_PAY_KPP=""
ANOTHER_PAY_NAME="" ANOTHER_PAY_TAXCODE=""
AUTHOR_CAPTION="Плательщик - юридическое лицо, индивидуальный предприниматель, нотариус, занимающийся частной практикой, адвокат, учредивший адвокатский кабинет, глава крестьянского (фермерского) хозяйства, осуществляющие перевод денежных средств в уплату платежей в бюджетную систему Российской Федерации (за исключением налогов, сборов, страховых взносов и иных платежей, администрируемых налоговыми органами)"
AUTHOR_ID="8" BANKOPER_DESCRIPTION="Платежное поручение" BANKOPER_ID="1"
BUDGET_CAPTION="Бюджет Пермского края" BUDGET_CODE="56020359"
BUDGET_ID="200000002363" BUH_FIO="" BUH_ID="" BUH_POST="" CARD_NUMBER=""
CARRY_DATE="2019-09-18" CHARGE_NUMBER="0" CHECK_RESULT="" CHEQUE_DATE=""
CHEQUE_DOC_DATE="" CHEQUE_DOC_NAME="" CHEQUE_DOC_NUM="" CHEQUE_DOC_ORG=""
CHEQUE_ENDURANCE_DATE="" CHEQUE_NUM="" CHEQUE_SER="" CHIEF_FIO=""
CHIEF_ID="" CHIEF_POST="" CLIENT_CODE="20208" CONFIRM_DATE="2019-09-17"
CONTRACT_IDENTIFIER="" CREATE_DATE="2019-08-12T10:09:12.000"
CR_ANAL_KIND="2" CR_DIRECTION="1" DEBIT_DATE="" DELIVERYFACT_DATA=""
DELIVERYFACT_ID=""
DESCRIPTION="КОСГУ 134, КВФО 2, уд. из з/пл за 05.19 возмещ. расходов за услуги связи (интернет)"
DESCRIPTION_LINES="КОСГУ 134, КВФО 2, уд. из з/пл за 05.19 возмещ. расходов за услуги связи (интернет)"
DISPSTATUS_ID="10" DOCUMENTCLASS_ID="195" DOCUMENT_ID="200123892850"
DOC_DATE="2019-09-17" DOC_NUMBER="2734" ESIA_ID=""
EXTSTATUS_CAPTION="Не выгружен" EXTSTATUS_ID="0" FK_ANAL_KIND=""
FK_BUDGET_CODE="" FK_CODE="57200001" FK_FLAG="0" FOREIGN_KEY=""
FSR_HEAD_ID="2" FSR_ID="4" FTYPE="3" FTYPE_HEAD="3"
GRANTINVESTMENT_CODE="000000000" GRANTINVESTMENT_HEAD_CODE="000000000"
GRANTINVESTMENT_HEAD_ID="400000006789" GRANTINVESTMENT_ID="400000006789"
GRND_DOC_DATE="0" GRND_DOC_NUMBER="0" GROUND_CAPTION="НЕ УКАЗАНО"
GROUND_CODE="0" GROUND_ID="200000000001" GROUND_NAME="" GROUND_PGTYPE=""
GUID_FK="" HEAD_CR_ANAL_KIND="1" HEAD_CR_DIRECTION="2" ID="200008311615"
INDUSTRYCODE_CODE="01303567301000000"
INDUSTRYCODE_HEAD_CODE="00000000000000000"
INDUSTRYCODE_HEAD_ID="400000005302" INDUSTRYCODE_ID="400000215986"
KESR_CODE="211" KESR_HEAD_CODE="134" KFSR_CODE="0104" KFSR_HEAD_CODE="0000"
KSDA_CODE="000" KSDA_HEAD_CODE="000" KVR_CODE="111" KVR_HEAD_CODE="000"
LIMITING_DATE="2019-09-27" LINE_NUMBER="" MCSERVICEID="" NON_PAID_FLAG="0"
NOTE="" OPERKIND_CAPTION="" OPERKIND_ID="" OPERTYPE_CAPTION="НЕ УКАЗАНА"
OPERTYPE_ID="0" ORG_ID="200000000382" ORG_KPP="590201001"
ORG_NAME="Аппарат Правительства Пермского края" ORG_ROLE_IN_DOC="2"
ORG_TAXCODE="5902290709" PARDISPSTATUS_ID="" PAYDOC_CODE="" PAYDOC_IDENT=""
PAYKIND="" PAYMENT_MONTH="" PAYMENT_YEAR="" PAYTYPE_CAPTION=""
PAYTYPE_CODE="" PAYTYPE_ID="" PAYTYPE_NAME="" PAY_ACCOUNT="208750208"
PAY_ACC_ID="200000016682" PAY_BIC="045773001"
PAY_B_NAME="ОТДЕЛЕНИЕ ПЕРМЬ г. Пермь" PAY_CORACCOUNT="" PAY_FILIAL_CODE=""
PAY_FILIAL_NAME="" PAY_FOR_LIVE="0" PAY_ID="200000010540"
PAY_KPP="590201001"
PAY_NAME="государственное краевое бюджетное учреждение &quot;Управление по эксплуатации административных зданий&quot;"
PAY_OKATO="57701000" PAY_TAXCODE="5902293107"
PAY_UFK_ACCOUNT="40601810657733000001" PAY_UFK_ACC_ID="200000022025"
PAY_UFK_NAME="Министерство финансов Пермского края" PI_ANAL_KIND="1"
PI_BUDGET_CODE="00000000000000000134" PL_FAIP_OBJ_CODE="" PL_FAIP_OBJ_ID=""
PRIM_AMOUNT="0" PRIM_DOC_DATE="" PRIM_DOC_NUMBER="" PRIM_GUID="" PRIM_ID=""
PRIM_PAY_KPP="" PRIM_PAY_TAXCODE="" QUEUE_KIND="5" REC_ACCOUNT="208750208"
REC_ACC_ID="200000016682" REC_BIC="045773001"
REC_B_NAME="ОТДЕЛЕНИЕ ПЕРМЬ г. Пермь" REC_CORACCOUNT="" REC_FILIAL_CODE=""
REC_FILIAL_NAME="" REC_ID="200000010540" REC_KPP="590201001"
REC_NAME="ГКБУ &quot;УЭАЗ&quot;" REC_OKATO="" REC_TAXCODE="5902293107"
REC_UFK_ACCOUNT="40601810657733000001" REC_UFK_ACC_ID="200000022025"
REC_UFK_NAME="Министерство финансов Пермского края" REG_DATE="2019-09-17"
REMARK="" RESPPERSON_FIO="" RESPPERSON_ID="" RESPPERSON_POST="" SIGN_DATE=""
SIGN_VOLUME="1" STAGEBUDGET_DATA="" STAGE_NUMBER="" SYMBCASH_ID=""
SYSUSER_ID="200000050806" TAXPERIOD="0" TFO_CODE="" TITLE_ID=""
ULTIMATE_PAY_DATE="2019-04-18" UNIFIEDACCOUNT="" VALIDITY_DATE="2019-09-17"
VAT="0" VAT_PERCENT="0" VERSION="20" WAITING_FLAG="0" WAYTOGETCASH="0" WO_SPENDING="0">
<SYMBCASHDOC/>
<SYMBCASHLINE/>
<GROUND_DOC/>
<ATTACH/>
</DOCUMENT>
</RPL>]]></BODY>
</MSG></root_validator>

но результат не поменялся, и результат проверки все равно false
Offline Евгений Афанасьев  
#8 Оставлено : 18 ноября 2019 г. 16:10:38(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 691 раз в 652 постах
Попробуйте подпись enveloped сделать.
Offline elizaveta96  
#9 Оставлено : 18 ноября 2019 г. 16:12:38(UTC)
elizaveta96

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

Группы: Участники
Зарегистрирован: 18.11.2019(UTC)
Сообщений: 6

Сказал(а) «Спасибо»: 1 раз
не я создаю подпись, я её проверяю
а других вариантов нет?
Offline Евгений Афанасьев  
#10 Оставлено : 18 ноября 2019 г. 16:36:03(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 691 раз в 652 постах
Получается, когда вы добавляете подпись в документ, то она становится его частью, а так как она не enveloped, то не будет вырезана при проверке подписи, то есть нарушит хеш. В URI должна была быть ссылка: http (документ в сети), file (на диске) или хотя бы ID узела (тогда можно было бы поместить подпись вне этого узла), или подпись enveloped, чтобы она не была учтена при проверке.
thanks 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
elizaveta96 оставлено 18.11.2019(UTC)
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
2 Страницы12>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.