Статус: Новичок
Группы: Участники
Зарегистрирован: 18.11.2019(UTC) Сообщений: 6
Сказал(а) «Спасибо»: 1 раз
|
Коллеги, доброе утро! Передо мной встала задача проверки открепленной подписи xmldsig документа xml. Сам документ и подпись приходят отдельно в сообщении формата json. Пробовала тысячу способов проверить подпись, но результат проверки всегда false. Есть ли вообще способ проверить открепленную подпись xmldsig?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,925 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 691 раз в 652 постах
|
Здравствуйте. Приложите ваш пример проверки, попробуем проверить. |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 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>
я думаю, моя ошибка связана с тем, что не связана подпись и документ но я не знаю как их связать, так как в подписи нет ссылки на документ
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,925 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 691 раз в 652 постах
|
В подписи должно быть указание на подписанные данные: http-ссылка на документ, идентификатор узла. Если был подписан документ, то вставьте в него подпись, чтобы по идентификатору можно было найти данные. |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 18.11.2019(UTC) Сообщений: 6
Сказал(а) «Спасибо»: 1 раз
|
Вот в том то и дело, что подпись никаких ссылок на документ не содержит. Тогда получается нужно вставить подпись в документ и тогда проверять?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,925 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 691 раз в 652 постах
|
Не обратил внимание на URI="". Да, вставьте в документ. |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 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="государственное краевое бюджетное учреждение "Управление по эксплуатации административных зданий"" 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="ГКБУ "УЭАЗ"" 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
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,925 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 691 раз в 652 постах
|
Попробуйте подпись enveloped сделать. |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 18.11.2019(UTC) Сообщений: 6
Сказал(а) «Спасибо»: 1 раз
|
не я создаю подпись, я её проверяю а других вариантов нет?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,925 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 691 раз в 652 постах
|
Получается, когда вы добавляете подпись в документ, то она становится его частью, а так как она не enveloped, то не будет вырезана при проверке подписи, то есть нарушит хеш. В URI должна была быть ссылка: http (документ в сети), file (на диске) или хотя бы ID узела (тогда можно было бы поместить подпись вне этого узла), или подпись enveloped, чтобы она не была учтена при проверке. |
|
1 пользователь поблагодарил Евгений Афанасьев за этот пост.
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close