logo
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

3 Страницы<123>
Опции
К последнему сообщению К первому непрочитанному
Offline PashaTechnique  
#21 Оставлено : 14 августа 2019 г. 10:48:41(UTC)
PashaTechnique

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

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

Сказал(а) «Спасибо»: 1 раз
Автор: two_oceans Перейти к цитате
Ошибка про не найденный элемент. В коде вообще сообщения #18 творится что-то непонятное. Для начала нужно опредедиться, что есть элемент куда будет положен сертификат и есть элемент тела запроса. У них должны быть разные ID. В ID решетка не нужна (буквально выше перечисление символов допустимых в ID, среди них решетки нет), а вот в URI решетка нужна. Это нормально когда их значения отличаются на решетку. Еще раз деликом код создания документа и подписания напомните пожалуйста. Запрос на момент подписания и после подписания тоже не помешает. Вероятно дело в том, что на момент подписания еще нет элемента с ID OGRN_1025401011833.


Первичный метод:
Код:

public static void main( String[] args ) throws UnrecoverableKeyException, NoSuchProviderException, KeyStoreException, CertificateException, NoSuchAlgorithmException, IOException, Exception
    
    {
    	System.out.println("*****************");
    	System.out.println("*******ФСС*******");
    	System.out.println("*****************");
    	
    	MessageFactory messageFactory = MessageFactory.newInstance();
	SOAPMessage soapMessage = messageFactory.createMessage();
    	CreateXml.CreateXMLSkeleton(soapMessage);
    	soapMessage = SignXml.Signation();
    	StartEncrypt.Encryption(soapMessage);
    	VerifyDecrypt.VerifyAndDecrypt().writeTo(System.out);
}


Подготавливаем первичный вид XML сообщений.
Код:

        public static void CreateXMLSkeleton(SOAPMessage soapMessage)
            throws SOAPException, IOException {
		
        SOAPEnvelope soapEnv = soapMessage.getSOAPPart().getEnvelope();

        soapEnv.addNamespaceDeclaration("xsi","http://www.w3.org/2001/XMLSchema");
        soapEnv.addNamespaceDeclaration("xsd","http://www.w3.org/2001/XMLSchema-instance");
        soapEnv.addNamespaceDeclaration("wsse","http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd");
        soapEnv.addNamespaceDeclaration("wsu","http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd");
        soapEnv.addNamespaceDeclaration("end", "http://ru/ibs/fss/ln/ws/FileOperationsLn.wsdl");
        
        SOAPBody soapBody = soapEnv.getBody();
        
        Name name = soapEnv.createName("Id");
        soapBody.addAttribute(name, "OGRN_1025401011833");
        
        SOAPElement soapElement = soapBody.addChildElement("getNewLNNum", "end");
		SOAPElement element = soapElement.addChildElement("ogrn");
		element.addTextNode("1025401011833");
        
        soapMessage.saveChanges();
        SaveSOAPToXML("tempSkeleton.xml", soapMessage);
        System.out.println("Файл создан");
        System.out.println("*****************");
        
}


Выглядит так:
Код:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:end="http://ru/ibs/fss/ln/ws/FileOperationsLn.wsdl" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsi="http://www.w3.org/2001/XMLSchema"><SOAP-ENV:Header/><SOAP-ENV:Body Id="OGRN_1025401011833"><end:getNewLNNum><ogrn>1025401011833</ogrn></end:getNewLNNum></SOAP-ENV:Body></SOAP-ENV:Envelope>


Далее подписываем это сообщение:
Код:

public static SOAPMessage Signation() throws Exception {

        X509Certificate cert = KeyCertificate.GetCertificateFromStorage("zeus");
        PrivateKey privateKey = KeyCertificate.GetPrivateKey("password", "zeus");

        MessageFactory mf = MessageFactory.newInstance();
        SOAPMessage message = mf.createMessage();  // ЕСЛИ берем из файла
        SOAPPart soapPart = message.getSOAPPart();
        FileInputStream is = new FileInputStream("C:\\Storage\\Store\\"+"tempSkeleton.xml"); // ЕСЛИ берем из файла
        soapPart.setContent(new StreamSource(is)); // ЕСЛИ берем из файла
        message.getSOAPPart().getEnvelope().addNamespaceDeclaration("ds", "http://www.w3.org/2000/09/xmldsig#");
        Document doc = message.getSOAPPart().getEnvelope().getOwnerDocument();

        //Добавляем заголовки для помещения информации о подписи:
        WSSecHeader header = new WSSecHeader();

        header.setActor("http://eln.fss.ru/actor/mo/OGRN_1025401011833"); 
        header.setMustUnderstand(false);

        header.insertSecurityHeader(message.getSOAPPart().getEnvelope().getOwnerDocument());
        // Элемент подписи.
        Element token = header.getSecurityHeader();

        // Загрузка провайдера.
        Provider xmlDSigProvider = new ru.CryptoPro.JCPxml.dsig.internal.dom.XMLDSigRI();
        //logger.debug("xmlDSigProvider: {}", xmlDSigProvider);

        //Добавляем описание преобразований над документом и узлом SignedInfo
        final Transforms transforms = new Transforms(doc);
        transforms.addTransform(Transforms.TRANSFORM_ENVELOPED_SIGNATURE);
        transforms.addTransform(Transforms.TRANSFORM_C14N_EXCL_OMIT_COMMENTS);
        XMLSignatureFactory fac = XMLSignatureFactory.getInstance("DOM", xmlDSigProvider);


        //Преобразования над узлом ds:SignedInfo:
        List<Transform> transformList = new ArrayList<Transform>();
        Transform transformC14N = fac.newTransform(Transforms.TRANSFORM_C14N_EXCL_OMIT_COMMENTS, (XMLStructure) null);
        transformList.add(transformC14N);

        // Ссылка на подписываемые данные с алгоритмом хеширования ГОСТ 34.11.
        Reference ref = fac.newReference("#OGRN_1025401011833", fac.newDigestMethod ("urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34112012-256", null),
                transformList, null, null);

        //Задаём алгоритм подписи:
        SignedInfo si = fac.newSignedInfo( fac.newCanonicalizationMethod(CanonicalizationMethod.EXCLUSIVE,
                (C14NMethodParameterSpec) null), fac.newSignatureMethod("urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102012-gostr34112012-256", null), Collections.singletonList(ref));
        
        //Создаём узел ds:KeyInfo с информацией о сертификате:
        KeyInfoFactory kif = fac.getKeyInfoFactory();

        X509Data x509d = kif.newX509Data(Collections.singletonList(cert));
        KeyInfo ki = kif.newKeyInfo(Collections.singletonList(x509d));
        //Подписываем данные в элементе token:
        javax.xml.crypto.dsig.XMLSignature sig = fac.newXMLSignature(si, ki); //
        DOMSignContext signContext = new DOMSignContext(privateKey, token);  //
        sig.sign(signContext);  // EXC
        //Следующий этап — поместить узел ds:Signature и сертификат (X509Certificate) в узел wsse:Security,
        //причём сертификат нужно удалить из ds:KeyInfo и оставить там ссылку на wsse:BinarySecurityToken с сертификатом:
        // Узел подписи Signature.
        Element sigE = (Element) XPathAPI.selectSingleNode(signContext.getParent(), "//ds:Signature");
        // Блок данных KeyInfo.
        Node keyE = XPathAPI.selectSingleNode(sigE, "//ds:KeyInfo", sigE);
        // Элемент SenderCertificate, который должен содержать сертификат.
        Element cerVal = (Element) XPathAPI.selectSingleNode(token, "//*[@wsu:Id='SenderCertificate']");

        /*****-----*****/
        Node certi = XPathAPI.selectSingleNode(sigE, "//ds:X509Certificate", sigE);
        keyE.removeChild(XPathAPI.selectSingleNode(keyE, "//ds:X509Data", keyE));
        Node str = keyE.appendChild(doc.createElementNS("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", "wsse:SecurityTokenReference"));
        Element strRef = (Element)str.appendChild(doc.createElementNS("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", "wsse:Reference"));
        strRef.setAttribute("ValueType", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3");
        strRef.setAttribute("URI", "http://eln.fss.ru/actor/mo/1025401011833");
        header.getSecurityHeader().appendChild(sigE);

        keyE = XPathAPI.selectSingleNode(sigE, "//wsse:Security", sigE);
        Element strRef2 = (Element)keyE.appendChild(doc.createElementNS("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", "wse:BinarySecurityToken"));
        strRef2.setAttribute("EncodingType", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary");
        strRef2.setAttribute("ValueType", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3");
        strRef2.setAttribute("wsu:Id", "http://eln.fss.ru/actor/mo/1025401011833");
        strRef2.setTextContent(certi.getFirstChild().getNodeValue());
        
        System.out.println("Подписанное сообщение готово.");
        System.out.println("*****************");
        
        CreateXml.SaveSOAPToXML("tempSign.xml", message);
        
        return message;
        
}


После сообщение становиться таким:
Код:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:end="http://ru/ibs/fss/ln/ws/FileOperationsLn.wsdl" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsi="http://www.w3.org/2001/XMLSchema"><SOAP-ENV:Header><wsse:Security SOAP-ENV:actor="http://eln.fss.ru/actor/mo/OGRN_1025401011833" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"><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="#OGRN_1025401011833"><Transforms><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/></Transforms><DigestMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34112012-256"/><DigestValue>yevIWGLD7y1f8sgZvBB6hkAHt++aKki/107CV2vush4=</DigestValue></Reference></SignedInfo><SignatureValue>s1c1USX+aKN5UMOo4xrmMAACmNLz+xo4huo4WBfkV+/PBoXHU4UattTcPP55MkRXmKS/9IMOl7Oy
WdeaxOqlLg==</SignatureValue><KeyInfo><wsse:SecurityTokenReference><wsse:Reference URI="http://eln.fss.ru/actor/mo/1025401011833" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"/></wsse:SecurityTokenReference></KeyInfo></Signature><wse:BinarySecurityToken xmlns:wse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" wsu:Id="http://eln.fss.ru/actor/mo/1025401011833">MIIDkTCCA0CgAwIBAgITEgA4/fAC4SR8WI2UNQABADj98DAIBgYqhQMCAgMwfzEjMCEGCSqGSIb3
DQEJARYUc3VwcG9ydEBjcnlwdG9wcm8ucnUxCzAJBgNVBAYTAlJVMQ8wDQYDVQQHEwZNb3Njb3cx
FzAVBgNVBAoTDkNSWVBUTy1QUk8gTExDMSEwHwYDVQQDExhDUllQVE8tUFJPIFRlc3QgQ2VudGVy
IDIwHhcNMTkwNzIzMDczNzQwWhcNMTkxMDIzMDc0NzQwWjCBljEgMB4GCSqGSIb3DQEJARYRcmV0
MTIzcmV0QG1haWwucnUxGTAXBgNVBAMMEFNoYXNoa292IEV2Z2VuaWkxCzAJBgNVBAsMAklUMQ8w
DQYDVQQKDAZLT01JQUMxFTATBgNVBAcMDE5vdm9rdXpuZXRzazEVMBMGA1UECAwMTm92b2t1em5l
dHNrMQswCQYDVQQGEwJSVTBmMB8GCCqFAwcBAQEBMBMGByqFAwICJAAGCCqFAwcBAQICA0MABECg
MYebqlT5Z/0xUFI6B2BQ/OrVH+PAApw+4MA+m35zBphmU6/XsHFQ7PiuXgbdA7yAYHQEenWvoT3P
BSph5WW0o4IBdjCCAXIwDgYDVR0PAQH/BAQDAgTwMBMGA1UdJQQMMAoGCCsGAQUFBwMCMB0GA1Ud
DgQWBBROTjX9G1CBPUbTZykKaBU89Ztn2DAfBgNVHSMEGDAWgBROgz4Uae/sXXqVK18R/jcyFklV
KzBcBgNVHR8EVTBTMFGgT6BNhktodHRwOi8vdGVzdGNhLmNyeXB0b3Byby5ydS9DZXJ0RW5yb2xs
L0NSWVBUTy1QUk8lMjBUZXN0JTIwQ2VudGVyJTIwMigxKS5jcmwwgawGCCsGAQUFBwEBBIGfMIGc
MGQGCCsGAQUFBzAChlhodHRwOi8vdGVzdGNhLmNyeXB0b3Byby5ydS9DZXJ0RW5yb2xsL3Rlc3Qt
Y2EtMjAxNF9DUllQVE8tUFJPJTIwVGVzdCUyMENlbnRlciUyMDIoMSkuY3J0MDQGCCsGAQUFBzAB
hihodHRwOi8vdGVzdGNhLmNyeXB0b3Byby5ydS9vY3NwL29jc3Auc3JmMAgGBiqFAwICAwNBAKO3
xo+lLAp+6tbpTHiboyM4ZFJ4K+zZTRvV8nv61H3+hgrXAAWCSQi8TiBAMeKHeUmGz9JxJbn76zdL
cyrdDL0=</wse:BinarySecurityToken></wsse:Security></SOAP-ENV:Header><SOAP-ENV:Body Id="OGRN_1025401011833"><end:getNewLNNum><ogrn>1025401011833</ogrn></end:getNewLNNum></SOAP-ENV:Body></SOAP-ENV:Envelope>
Offline two_oceans  
#22 Оставлено : 14 августа 2019 г. 10:51:44(UTC)
two_oceans

Статус: Эксперт

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

Сказал(а) «Спасибо»: 30 раз
Поблагодарили: 118 раз в 113 постах
Автор: two_oceans Перейти к цитате
Еще раз деликом код создания документа и подписания напомните пожалуйста. Запрос на момент подписания и после подписания тоже не помешает. Вероятно дело в том, что на момент подписания еще нет элемента с ID OGRN_1025401011833.
Судя по всему в сообщении №1 этой темы код подписания почти правильный, предлагаю оттталкиваться от него, обратите внимание на соответствие URI и ID: без решетки подписываемые данные:
Код:
soapMessage.getSOAPBody().setAttributeNS("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd",
	                "wsu:Id", "body");
с решеткой ссылка на них
Код:
// Ссылка на подписываемые данные.
	        Reference ref = fac.newReference("#body",
	            fac.newDigestMethod("urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34112012-256", null),
	            transformList, null, null);
И там и там body, отличие на решетку.


Без решетки элемент с сертификатом
Код:
 binSecToken.setAttribute("wsu:Id", "OGRN_1025401011833");

С решеткой ссылка на элемент
Код:
strRef.setAttribute("URI", "#OGRN_1025401011833"); // <- тут добавить решетку в коде сообщения 1!!!
И там и там OGRN_1025401011833, отличие на решетку.

Отредактировано пользователем 14 августа 2019 г. 10:55:32(UTC)  | Причина: Не указана

Offline PashaTechnique  
#23 Оставлено : 14 августа 2019 г. 11:12:53(UTC)
PashaTechnique

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

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

Сказал(а) «Спасибо»: 1 раз
Смотрите сообщение #21 там актуальная версия кода.
Вообщем всем сделал как надо, ошибки в данный момент нету. Но из ответа при расшифровке тоже самое.

И так кусками сейчас накидаю что изменил:

Код:

// Собственно сделал этот атрибут через метод AttributeNS
...
SOAPBody soapBody = soapEnv.getBody();
        
        soapBody.setAttributeNS("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd",
                "wsu:Id", "OGRN_1025401011833");
        
        SOAPElement soapElement = soapBody.addChildElement("getNewLNNum", "end");
		SOAPElement element = soapElement.addChildElement("ogrn");
		element.addTextNode("1025401011833");
...
// Ссылка на подписываемые данные с алгоритмом хеширования ГОСТ 34.11.
        Reference ref = fac.newReference("#OGRN_1025401011833", fac.newDigestMethod ("urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34112012-256", null),
                transformList, null, null);
...
/*****-----*****/
        Node certi = XPathAPI.selectSingleNode(sigE, "//ds:X509Certificate", sigE);
        keyE.removeChild(XPathAPI.selectSingleNode(keyE, "//ds:X509Data", keyE));
        Node str = keyE.appendChild(doc.createElementNS("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", "wsse:SecurityTokenReference"));
        Element strRef = (Element)str.appendChild(doc.createElementNS("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", "wsse:Reference"));
        strRef.setAttribute("ValueType", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3");
        strRef.setAttribute("URI", "#OGRN_1025401011833");
        header.getSecurityHeader().appendChild(sigE);

        keyE = XPathAPI.selectSingleNode(sigE, "//wsse:Security", sigE);
        Element strRef2 = (Element)keyE.appendChild(doc.createElementNS("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", "wse:BinarySecurityToken"));
        strRef2.setAttribute("EncodingType", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary");
        strRef2.setAttribute("ValueType", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3");
        strRef2.setAttribute("wsu:Id", "OGRN_1025401011833");
        strRef2.setTextContent(certi.getFirstChild().getNodeValue());
...


Походу все таки не в ней дело было.
Offline two_oceans  
#24 Оставлено : 14 августа 2019 г. 11:59:45(UTC)
two_oceans

Статус: Эксперт

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

Сказал(а) «Спасибо»: 30 раз
Поблагодарили: 118 раз в 113 постах
Да нет, в ID дело... должно быть 2 разных ID для сертификата и боди. Сейчас они одинаковые - выберется первое вхождение ID в документе (это сертификат). Сейчас по идее при проверке выглядит как будто сертификат подписали этим же сертификатом. А так как вычисляли подпись от боди, то подпись не сойдется. Сервис также решит, что у боди нет подписи раз с этим ID подписан сертификат.
в куске
Код:
 Node certi = XPathAPI.selectSingleNode(sigE, "//ds:X509Certificate", sigE);
        keyE.removeChild(XPathAPI.selectSingleNode(keyE, "//ds:X509Data", keyE));
        Node str = keyE.appendChild(doc.createElementNS("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", "wsse:SecurityTokenReference"));
        Element strRef = (Element)str.appendChild(doc.createElementNS("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", "wsse:Reference"));
        strRef.setAttribute("ValueType", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3");
        strRef.setAttribute("URI", "#OGRN_1025401011833");
        header.getSecurityHeader().appendChild(sigE);

        keyE = XPathAPI.selectSingleNode(sigE, "//wsse:Security", sigE);
        Element strRef2 = (Element)keyE.appendChild(doc.createElementNS("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", "wse:BinarySecurityToken"));
        strRef2.setAttribute("EncodingType", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary");
        strRef2.setAttribute("ValueType", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3");
        strRef2.setAttribute("wsu:Id", "OGRN_1025401011833");
        strRef2.setTextContent(certi.getFirstChild().getNodeValue())
поменяете "OGRN_1025401011833" допустим на "CERT_1025401011833", а "#OGRN_1025401011833" соответственно на "#CERT_1025401011833".

Стоп, вот это мне непонятно, поясните какие параметры у XPathAPI.selectSingleNode:
Код:
        keyE = XPathAPI.selectSingleNode(sigE, "//wsse:Security", sigE);
sigE, как я понял, элемент подписи? в ведь нем нет wsse:Security

Отредактировано пользователем 14 августа 2019 г. 12:12:45(UTC)  | Причина: Не указана

Offline PashaTechnique  
#25 Оставлено : 14 августа 2019 г. 12:10:41(UTC)
PashaTechnique

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

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

Сказал(а) «Спасибо»: 1 раз
Автор: two_oceans Перейти к цитате
Да нет, в ID дело... должно быть 2 разных ID для сертификата и боди. Сейчас они одинаковые - выберется первое вхождение ID в документе (это сертификат). Сейчас по идее при проверке выглядит как будто сертификат подписали этим же сертификатом. А так как вычисляли подпись от боди, то подпись не сойдется. Сервис также решит, что у боди нет подписи раз с этим ID подписан сертификат.
в куске
Код:
 Node certi = XPathAPI.selectSingleNode(sigE, "//ds:X509Certificate", sigE);
        keyE.removeChild(XPathAPI.selectSingleNode(keyE, "//ds:X509Data", keyE));
        Node str = keyE.appendChild(doc.createElementNS("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", "wsse:SecurityTokenReference"));
        Element strRef = (Element)str.appendChild(doc.createElementNS("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", "wsse:Reference"));
        strRef.setAttribute("ValueType", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3");
        strRef.setAttribute("URI", "#OGRN_1025401011833");
        header.getSecurityHeader().appendChild(sigE);

        keyE = XPathAPI.selectSingleNode(sigE, "//wsse:Security", sigE);
        Element strRef2 = (Element)keyE.appendChild(doc.createElementNS("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", "wse:BinarySecurityToken"));
        strRef2.setAttribute("EncodingType", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary");
        strRef2.setAttribute("ValueType", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3");
        strRef2.setAttribute("wsu:Id", "OGRN_1025401011833");
        strRef2.setTextContent(certi.getFirstChild().getNodeValue())
поменяете "OGRN_1025401011833" допустим на "CERT_1025401011833", а "#OGRN_1025401011833" соответственно на "#CERT_1025401011833".


Сделал как вы сказали, ничего не изменилось. Think
Offline two_oceans  
#26 Оставлено : 14 августа 2019 г. 12:13:39(UTC)
two_oceans

Статус: Эксперт

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

Сказал(а) «Спасибо»: 30 раз
Поблагодарили: 118 раз в 113 постах
Подписанный результат, пожалуйста.
Offline PashaTechnique  
#27 Оставлено : 14 августа 2019 г. 12:14:25(UTC)
PashaTechnique

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

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

Сказал(а) «Спасибо»: 1 раз
Автор: two_oceans Перейти к цитате
Подписанный результат, пожалуйста.


Пожалуйста.

Код:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:end="http://ru/ibs/fss/ln/ws/FileOperationsLn.wsdl" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsi="http://www.w3.org/2001/XMLSchema"><SOAP-ENV:Header><wsse:Security SOAP-ENV:actor="http://eln.fss.ru/actor/mo/OGRN_1025401011833" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"><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="#OGRN_1025401011833"><Transforms><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/></Transforms><DigestMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34112012-256"/><DigestValue>0WiRs7nd68Hxe9FSmsVq1nzA4AHBHM4azEkIZ4u+Y3o=</DigestValue></Reference></SignedInfo><SignatureValue>Woi4/X8KdqFVX3i/OXOtPOaBsmLk+DEqlHYkP8lPNDuTMySrpwJQDOCTibfC+X3JQY/0GoaMWNv0
FPhw8EV8mg==</SignatureValue><KeyInfo><wsse:SecurityTokenReference><wsse:Reference URI="#CERT_1025401011833" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"/></wsse:SecurityTokenReference></KeyInfo></Signature><wse:BinarySecurityToken xmlns:wse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" wsu:Id="CERT_1025401011833">MIIDkTCCA0CgAwIBAgITEgA4/fAC4SR8WI2UNQABADj98DAIBgYqhQMCAgMwfzEjMCEGCSqGSIb3
DQEJARYUc3VwcG9ydEBjcnlwdG9wcm8ucnUxCzAJBgNVBAYTAlJVMQ8wDQYDVQQHEwZNb3Njb3cx
FzAVBgNVBAoTDkNSWVBUTy1QUk8gTExDMSEwHwYDVQQDExhDUllQVE8tUFJPIFRlc3QgQ2VudGVy
IDIwHhcNMTkwNzIzMDczNzQwWhcNMTkxMDIzMDc0NzQwWjCBljEgMB4GCSqGSIb3DQEJARYRcmV0
MTIzcmV0QG1haWwucnUxGTAXBgNVBAMMEFNoYXNoa292IEV2Z2VuaWkxCzAJBgNVBAsMAklUMQ8w
DQYDVQQKDAZLT01JQUMxFTATBgNVBAcMDE5vdm9rdXpuZXRzazEVMBMGA1UECAwMTm92b2t1em5l
dHNrMQswCQYDVQQGEwJSVTBmMB8GCCqFAwcBAQEBMBMGByqFAwICJAAGCCqFAwcBAQICA0MABECg
MYebqlT5Z/0xUFI6B2BQ/OrVH+PAApw+4MA+m35zBphmU6/XsHFQ7PiuXgbdA7yAYHQEenWvoT3P
BSph5WW0o4IBdjCCAXIwDgYDVR0PAQH/BAQDAgTwMBMGA1UdJQQMMAoGCCsGAQUFBwMCMB0GA1Ud
DgQWBBROTjX9G1CBPUbTZykKaBU89Ztn2DAfBgNVHSMEGDAWgBROgz4Uae/sXXqVK18R/jcyFklV
KzBcBgNVHR8EVTBTMFGgT6BNhktodHRwOi8vdGVzdGNhLmNyeXB0b3Byby5ydS9DZXJ0RW5yb2xs
L0NSWVBUTy1QUk8lMjBUZXN0JTIwQ2VudGVyJTIwMigxKS5jcmwwgawGCCsGAQUFBwEBBIGfMIGc
MGQGCCsGAQUFBzAChlhodHRwOi8vdGVzdGNhLmNyeXB0b3Byby5ydS9DZXJ0RW5yb2xsL3Rlc3Qt
Y2EtMjAxNF9DUllQVE8tUFJPJTIwVGVzdCUyMENlbnRlciUyMDIoMSkuY3J0MDQGCCsGAQUFBzAB
hihodHRwOi8vdGVzdGNhLmNyeXB0b3Byby5ydS9vY3NwL29jc3Auc3JmMAgGBiqFAwICAwNBAKO3
xo+lLAp+6tbpTHiboyM4ZFJ4K+zZTRvV8nv61H3+hgrXAAWCSQi8TiBAMeKHeUmGz9JxJbn76zdL
cyrdDL0=</wse:BinarySecurityToken></wsse:Security></SOAP-ENV:Header><SOAP-ENV:Body wsu:Id="OGRN_1025401011833"><end:getNewLNNum><ogrn>1025401011833</ogrn></end:getNewLNNum></SOAP-ENV:Body></SOAP-ENV:Envelope>
Offline two_oceans  
#28 Оставлено : 14 августа 2019 г. 12:22:22(UTC)
two_oceans

Статус: Эксперт

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

Сказал(а) «Спасибо»: 30 раз
Поблагодарили: 118 раз в 113 постах
В моей программе подпись прошла проверку, теперь ури и айди верные.
UPD: еще деталь, для моей программы не важная, но обычно BinarySecurityToken идет впереди Signature. Про actor почудилось.
UPD2: через https://www.justsign.me/verifyqca/Verify/ также проверка прошла, ругнулост на тестовый сертификат.
Цитата:
Подпись математически корректна. Цепочка сертификатов обработана, но обработка прервана на корневом сертификате, у которого отсутствует отношение доверия с поставщиком доверия.

Отредактировано пользователем 14 августа 2019 г. 12:31:45(UTC)  | Причина: Не указана

Offline PashaTechnique  
#29 Оставлено : 14 августа 2019 г. 12:31:06(UTC)
PashaTechnique

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

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

Сказал(а) «Спасибо»: 1 раз
Автор: two_oceans Перейти к цитате
В моей программе подпись прошла проверку, теперь ури и айди верные, бросилось в глаза только значение actor, раньше было другое. Может на него ФСС ругаться?
Код:
<wsse:Security SOAP-ENV:actor="http://eln.fss.ru/actor/mo/OGRN_1025401011833" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">

UPD: еще деталь, для моей программы не важная, но обычно BinarySecurityToken идет впереди Signature.


Убрал слово OGRN из записи оставил только цифры согласно рекомендациям.
Выдержки из документов ФСС.

Цитата:

Блок Security, принадлежащий пространству имен http://docs.oasis-open.o...security-secext-1.0.xsd, содержит в себе информацию, необходимую для проверки целостности сообщения и его отправителя. В случае, если сообщение подписывается несколькими отправителями, количество тегов Security будет совпадать с количеством подписантов. Одним из параметров блока является «actor», который должен быть заполнен по следующим правилам:
1. Для ЭП МО:
 «http://eln.fss.ru/actor/mo/[ОГРН_МЕДИЦИНСКОЙ_ОРГАНИЗАЦИИ]
 «http://eln.fss.ru/actor/mo/[ОГРН_МЕДИЦИНСКОЙ_ОРГАНИЗАЦИИ]/ ELN_[Номер ЛН] – при вызове метода prParseFilelnlpu;


Причем сам номер взят из этих же рекомендаций (1025401011833).

Но ошибка при расшифровке ответа, так и не изменилась "ORA-20001: Отсутствует подпись головной организации".

Offline two_oceans  
#30 Оставлено : 14 августа 2019 г. 12:39:44(UTC)
two_oceans

Статус: Эксперт

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

Сказал(а) «Спасибо»: 30 раз
Поблагодарили: 118 раз в 113 постах
Тем не менее подпись сейчас математически корректна. Похоже дальше надо или с сервисом ФСС разбираться что им не нравится (гадать можно долго) или что-то не так в сертификате (что от тестового УЦ или что нет огрн или надо как-то регистрировать сертификат в фсс для конкретного отправителя).
thanks 1 пользователь поблагодарил two_oceans за этот пост.
PashaTechnique оставлено 14.08.2019(UTC)
Offline PashaTechnique  
#31 Оставлено : 14 августа 2019 г. 12:43:49(UTC)
PashaTechnique

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

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

Сказал(а) «Спасибо»: 1 раз
Автор: two_oceans Перейти к цитате
Тем не менее подпись сейчас математически корректна. Похоже дальше надо или с сервисом ФСС разбираться что им не нравится (гадать можно долго) или что-то не так в сертификате (что от тестового УЦ или что нет огрн или надо как-то регистрировать сертификат в фсс для конкретного отправителя).


Блин, вы лучший! Спасибо за все вам. Закончу поделюсь всеми нюансами. Обязательно! Хватит людям страдать )
Offline two_oceans  
#32 Оставлено : 14 августа 2019 г. 14:52:19(UTC)
two_oceans

Статус: Эксперт

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

Сказал(а) «Спасибо»: 30 раз
Поблагодарили: 118 раз в 113 постах
Пожалуйста.
Заодно при проверке ответа фсс выяснилось, что у меня программа не ловит идентификатор алгоритма "http://www.w3.org/2001/10/xml-exc-c14n#WithComments", так что я тоже в выигрыше.

Короче, я в шоке: открыл спецификацию и фсс на полном серьезе считают "http://eln.fss.ru/actor/fss/ca/1027739443236" валидным ID для тега сертификата. Когда уже отечественные гис будут на стандарты хотя бы смотреть)))

https://www.sql.ru/forum...ektronnyy-bolnichnyy-eln вот тут тоже немного обсуждали, кстати Shuraken тут на форуме тоже был когда пилил работу с фсс, но выложить код было запрещено контрактом. Можно попробовать в его тему тут написать, ему придет оповещение, вдруг чего еще полезного подскажет.
Offline PashaTechnique  
#33 Оставлено : 15 августа 2019 г. 4:54:26(UTC)
PashaTechnique

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

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

Сказал(а) «Спасибо»: 1 раз
Автор: two_oceans Перейти к цитате

Заодно при проверке ответа фсс выяснилось, что у меня программа не ловит идентификатор алгоритма "http://www.w3.org/2001/10/xml-exc-c14n#WithComments", так что я тоже в выигрыше.


То есть он не сравнивает схему ?

Автор: two_oceans Перейти к цитате

Короче, я в шоке: открыл спецификацию и фсс на полном серьезе считают "http://eln.fss.ru/actor/fss/ca/1027739443236" валидным ID для тега сертификата. Когда уже отечественные гис будут на стандарты хотя бы смотреть)))


Я писал уже - путаница, там одно написано, тут другое говорят. Так в итоге то правильно как будет ?)

Автор: two_oceans Перейти к цитате

https://www.sql.ru/forum...ektronnyy-bolnichnyy-eln вот тут тоже немного обсуждали, кстати Shuraken тут на форуме тоже был когда пилил работу с фсс, но выложить код было запрещено контрактом. Можно попробовать в его тему тут написать, ему придет оповещение, вдруг чего еще полезного подскажет.


А где его тема тут ?)

Еще я буквально сегодня утром заметил, в кабинете фсс, выложили жирную надпись, в картинке можно посмотреть.
Это значит что нужно алгоритмы менять? на 2001? Какой же я везучий Dancing
Может по-этому сертификаты не совпадали, хоть и написано что продуктивная среда, но может тестовую тоже захватили, попробую пока)

fss.jpg (55kb) загружен 3 раз(а).

Отредактировано пользователем 15 августа 2019 г. 4:55:37(UTC)  | Причина: Не указана

Offline two_oceans  
#34 Оставлено : 15 августа 2019 г. 8:16:02(UTC)
two_oceans

Статус: Эксперт

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

Сказал(а) «Спасибо»: 30 раз
Поблагодарили: 118 раз в 113 постах
Автор: PashaTechnique Перейти к цитате
Автор: two_oceans Перейти к цитате
Заодно при проверке ответа фсс выяснилось, что у меня программа не ловит идентификатор алгоритма "http://www.w3.org/2001/10/xml-exc-c14n#WithComments", так что я тоже в выигрыше.
То есть он не сравнивает схему ?
Кто он? Алгоритм каноникализации CanonicalizationMethod Algorithm никак не связан со схемой подписи гост-2001 или гост-2012, если Вы об этом. Можно использовать любой из допустимых стандартом. Мне известно 6 вариантов значения - неэксклюзивный, неэксклюзивный обновленный, эксклюзивный и их вариации с комментариями. По моей ошибке:
Автор: PashaTechnique Перейти к цитате
Автор: two_oceans Перейти к цитате

Короче, я в шоке: открыл спецификацию и фсс на полном серьезе считают "http://eln.fss.ru/actor/fss/ca/1027739443236" валидным ID для тега сертификата. Когда уже отечественные гис будут на стандарты хотя бы смотреть)))
Я писал уже - путаница, там одно написано, тут другое говорят. Так в итоге то правильно как будет ?)
А вот кто бы знал. Технически наличие двоеточия и слешей в ID не приведет к неправильному разбору xml и ури. Однако наличие этих символов запрещено стандартом (этакая перестраховка от разработчиков стандарта чтобы ID можно было использовать в других местах без оглядки) и парсеры работающие по стандарту обязаны считать это несоответствием схеме. У ФСС похоже парсер не проверяет схему (то есть в этом случае схему проверяют в своем коде и не заморочились проверкой данного пункта или даже специально исключили проверку). Ради интереса можно попробовать вместо CERT_... написать как они хотят, но это будет не по стандарту и такая подпись может не проверяться некоторыми средствами проверки подписи. Перепроверил себя еще раз, wsu:Id точно этого типа:
Цитата:
wsu:Id
This global attribute supports annotating arbitrary elements with an ID.
Attribute information
Namespace: http://docs.oasis-open.o...security-utility-1.0.xsd
Schema document: oasis-200401-wss-wssecurity-utility-1.0.xsd
Type: xsd:ID
Properties: Global, Qualified
Value: A value of type xsd:ID.

Автор: PashaTechnique Перейти к цитате
Автор: two_oceans Перейти к цитате

https://www.sql.ru/forum...ektronnyy-bolnichnyy-eln вот тут тоже немного обсуждали, кстати Shuraken тут на форуме тоже был когда пилил работу с фсс, но выложить код было запрещено контрактом. Можно попробовать в его тему тут написать, ему придет оповещение, вдруг чего еще полезного подскажет.
А где его тема тут ?)
Вот тут, не совсем его тема, но там он много писал https://www.cryptopro.ru...osts&t=13688&p=3
Автор: PashaTechnique Перейти к цитате
Еще я буквально сегодня утром заметил, в кабинете фсс, выложили жирную надпись, в картинке можно посмотреть.
Это значит что нужно алгоритмы менять? на 2001? Какой же я везучий Dancing
Может по-этому сертификаты не совпадали, хоть и написано что продуктивная среда, но может тестовую тоже захватили, попробую пока)
Как я понимаю, нет. Это для тех кто использовал для шифрования сертификат ФСС по алгоритму гост-2001. Если у использовался гост-2012, то должно работать без смены (в этот раз). Объявление и на тестовой и на рабочей, только даты и сертификаты разные.

Отредактировано пользователем 15 августа 2019 г. 8:21:59(UTC)  | Причина: Не указана

Offline PashaTechnique  
#35 Оставлено : 16 августа 2019 г. 5:35:42(UTC)
PashaTechnique

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

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

Сказал(а) «Спасибо»: 1 раз
Автор: two_oceans Перейти к цитате
Автор: PashaTechnique Перейти к цитате
Автор: two_oceans Перейти к цитате
Заодно при проверке ответа фсс выяснилось, что у меня программа не ловит идентификатор алгоритма "http://www.w3.org/2001/10/xml-exc-c14n#WithComments", так что я тоже в выигрыше.
То есть он не сравнивает схему ?
Кто он? Алгоритм каноникализации CanonicalizationMethod Algorithm никак не связан со схемой подписи гост-2001 или гост-2012, если Вы об этом. Можно использовать любой из допустимых стандартом. Мне известно 6 вариантов значения - неэксклюзивный, неэксклюзивный обновленный, эксклюзивный и их вариации с комментариями. По моей ошибке:
Автор: PashaTechnique Перейти к цитате
Автор: two_oceans Перейти к цитате

Короче, я в шоке: открыл спецификацию и фсс на полном серьезе считают "http://eln.fss.ru/actor/fss/ca/1027739443236" валидным ID для тега сертификата. Когда уже отечественные гис будут на стандарты хотя бы смотреть)))
Я писал уже - путаница, там одно написано, тут другое говорят. Так в итоге то правильно как будет ?)
А вот кто бы знал. Технически наличие двоеточия и слешей в ID не приведет к неправильному разбору xml и ури. Однако наличие этих символов запрещено стандартом (этакая перестраховка от разработчиков стандарта чтобы ID можно было использовать в других местах без оглядки) и парсеры работающие по стандарту обязаны считать это несоответствием схеме. У ФСС похоже парсер не проверяет схему (то есть в этом случае схему проверяют в своем коде и не заморочились проверкой данного пункта или даже специально исключили проверку). Ради интереса можно попробовать вместо CERT_... написать как они хотят, но это будет не по стандарту и такая подпись может не проверяться некоторыми средствами проверки подписи. Перепроверил себя еще раз, wsu:Id точно этого типа:
Цитата:
wsu:Id
This global attribute supports annotating arbitrary elements with an ID.
Attribute information
Namespace: http://docs.oasis-open.o...security-utility-1.0.xsd
Schema document: oasis-200401-wss-wssecurity-utility-1.0.xsd
Type: xsd:ID
Properties: Global, Qualified
Value: A value of type xsd:ID.

Автор: PashaTechnique Перейти к цитате
Автор: two_oceans Перейти к цитате

https://www.sql.ru/forum...ektronnyy-bolnichnyy-eln вот тут тоже немного обсуждали, кстати Shuraken тут на форуме тоже был когда пилил работу с фсс, но выложить код было запрещено контрактом. Можно попробовать в его тему тут написать, ему придет оповещение, вдруг чего еще полезного подскажет.
А где его тема тут ?)
Вот тут, не совсем его тема, но там он много писал https://www.cryptopro.ru...osts&t=13688&p=3
Автор: PashaTechnique Перейти к цитате
Еще я буквально сегодня утром заметил, в кабинете фсс, выложили жирную надпись, в картинке можно посмотреть.
Это значит что нужно алгоритмы менять? на 2001? Какой же я везучий Dancing
Может по-этому сертификаты не совпадали, хоть и написано что продуктивная среда, но может тестовую тоже захватили, попробую пока)
Как я понимаю, нет. Это для тех кто использовал для шифрования сертификат ФСС по алгоритму гост-2001. Если у использовался гост-2012, то должно работать без смены (в этот раз). Объявление и на тестовой и на рабочей, только даты и сертификаты разные.


Вообщем-то ответили мне из ФСС, сказали сделать: сменить id на id их структуры, и так далее, это все сделал, но ошибка та же, ничего не изменилось, еще в ФСС мне ответили что якобы мое сообщение не такое как у них на старте, почему у меня написано SOAP большими буквами, а у них маленькими. И у меня назрел такой же вопрос, не является это ли ошибкой? Но я даже не понял как это исправить...

Вообщем далее по порядку:
Вот мой xml до значения header. Тут все пространства имен, все как у всех, но SOAP - большими.
Код:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:fil="http://ru/ibs/fss/ln/ws/FileOperationsLn.wsdl" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">


Вот их xml до значения header. Тут soap - маленькими. И строки с версией xml у меня нет, как и с кодировкой документа.
Код:

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:end="http://ru/ibs/fss/ln/ws/FileOperationsLn.wsdl" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsi="http://www.w3.org/2001/XMLSchema">


Еще в ответе мне скинули мое переделанное сообщение, как нужно, и тут вот что выходит, опять же это уже загуглил все, путного нет ничего, про делфи старые форумы.

Разница ошибок:
На мое сообщение которое создаю сам.
Код:

ORA-20001: Отсутствует подпись головной организации


Которое предложили мне.
Код:

ORA-20001: Некорректная подпись головной организации: ЭЦП неверна. INVALID_SIGNATURE ЭП недействительна. Обратитесь к разработчику программного обеспечения, на котором осуществлялось подписание данных.


И я вообще в замешательстве теперь полном...
Offline two_oceans  
#36 Оставлено : 16 августа 2019 г. 6:22:51(UTC)
two_oceans

Статус: Эксперт

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

Сказал(а) «Спасибо»: 30 раз
Поблагодарили: 118 раз в 113 постах
По стадарту префиксы могут быть произвольные (ограничения символов как в именах тегов), я скорее проверю, что у них запинается на дефисе в SOAP-ENV или на отсутствии декларации с кодировкой и версией xml, чем на регистре букв. У меня тоже запиналось на дефисе полтора года назад, после прочтения стандарта xml я добавил допустимые символы и больше не запинается. Однако похоже они вообще стандарт ни во что не ставят, так что можно попробовать сделать как у них.

Покажите пожалуйста Ваше и переделанное сообщения. ЭП может нарушиться при переделке если изменен префикс у тега Body (префикс Body наследуется от Envelope), по идее больше нигде префикс не используется в подписываемых частях (эксклюзивная каноникализация выкинет объявление этого префикса из других фрагментов). В итоге надо бы переподписать переделанное сообщение из-за изменения Body.

Как получить нужный префикс в объекте SOAP, это скорее задача на смекалку. Наверно, есть стандартный инструментарий смены префикса, но так как я на Джава не пишу, то без понятия как это сделать. Навскидку и "крестьянскими методами", набросать минимальный шаблон соап в файле или тестовой переменной (с нужным префиксом):
Код:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Header/><soapenv:Body/></soapenv:Envelope>
и загрузить содержимое файла в объект SOAP, добавить нужную структуру запроса, подписать. Версию xml и кодировку можно просто дописать в начало текста перед отправкой (если сделать аккуратно, подпись не нарушится). Однако скорее всего есть параметр добавлять ли версию и кодировку при формировании текста/стрима из объекта SOAP.

UPD: еще вижу они fil на end поменяли и xsd/xsi между собой. К слову, по прошлому Вашему документу забыл упомянуть, что в одном месте wse, в другом wsse. Как по мне это не страшно, но раз они придирчивы к префиксам, возможно надо подправить.

Отредактировано пользователем 16 августа 2019 г. 6:42:27(UTC)  | Причина: Не указана

Offline PashaTechnique  
#37 Оставлено : 16 августа 2019 г. 6:40:05(UTC)
PashaTechnique

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

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

Сказал(а) «Спасибо»: 1 раз
Автор: two_oceans Перейти к цитате
По стадарту префиксы могут быть произвольные (ограничения символов как в именах тегов), я скорее проверю, что у них запинается на дефисе в SOAP-ENV или на отсутствии декларации с кодировкой и версией xml, чем на регистре букв. У меня тоже запиналось на дефисе полтора года назад, после прочтения стандарта xml я добавил допустимые символы и больше не запинается. Однако похоже они вообще стандарт ни во что не ставят, так что можно попробовать сделать как у них.

Покажите пожалуйста Ваше и переделанное сообщения. ЭП может нарушиться при переделке если изменен префикс у тега Body (префикс Body наследуется от Envelope), по идее больше нигде префикс не используется в подписываемых частях (эксклюзивная каноникализация выкинет объявление этого префикса из других фрагментов). В итоге надо бы переподписать переделанное сообщение из-за изменения Body.

Как получить нужный префикс, это скорее задача на смекалку. Например, набросать шаблон соап в файле (с нужным префиксом - теги Envelope, пустой Header, пустой Body) и загрузить содержимое файла в объект SOAP, добавить нужную структуру запроса, подписать. Версию xml и кодировку можно просто дописать в начало текста перед отправкой (если сделать аккуратно подпись не нарушится). Однако скорее всего есть параметр добавлять ли версию и кодировку при формировании текста из объекта SOAP.

UPD: еще вижу они fil на end поменяли и xsd/xsi между собой. К слову, по прошлому Вашему документу забыл упомянуть, что в одном месте wse, в другом wsse. Как по мне это не страшно, но раз они придирчивы к префиксам, возможно надо подправить.


Мое:
Код:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:fil="http://ru/ibs/fss/ln/ws/FileOperationsLn.wsdl" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><SOAP-ENV:Header><wsse:Security SOAP-ENV:actor="http://eln.fss.ru/actor/mo/1025401011833" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"><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="#OGRN_1025401011833"><Transforms><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/></Transforms><DigestMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34112012-256"/><DigestValue>LBA3cSEuga668uVc1k2Er7aNJXQQG6AG/4WlzR3sfrI=</DigestValue></Reference></SignedInfo><SignatureValue>Neud2/i2zHCMIUNcMKE9JSqJkOnBsuvF/h6aYCaOWlUGIxUmoyOC0RKstPUWBa54bKSyeknOYSql
iJNLa/CIEA==</SignatureValue><KeyInfo><wsse:SecurityTokenReference><wsse:Reference URI="#http://eln.fss.ru/actor/mo/1025401011833" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"/></wsse:SecurityTokenReference></KeyInfo></Signature><wse:BinarySecurityToken xmlns:wse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" wsu:Id="http://eln.fss.ru/actor/mo/1025401011833">MIIDkTCCA0CgAwIBAgITEgA4/fAC4SR8WI2UNQABADj98DAIBgYqhQMCAgMwfzEjMCEGCSqGSIb3
DQEJARYUc3VwcG9ydEBjcnlwdG9wcm8ucnUxCzAJBgNVBAYTAlJVMQ8wDQYDVQQHEwZNb3Njb3cx
FzAVBgNVBAoTDkNSWVBUTy1QUk8gTExDMSEwHwYDVQQDExhDUllQVE8tUFJPIFRlc3QgQ2VudGVy
IDIwHhcNMTkwNzIzMDczNzQwWhcNMTkxMDIzMDc0NzQwWjCBljEgMB4GCSqGSIb3DQEJARYRcmV0
MTIzcmV0QG1haWwucnUxGTAXBgNVBAMMEFNoYXNoa292IEV2Z2VuaWkxCzAJBgNVBAsMAklUMQ8w
DQYDVQQKDAZLT01JQUMxFTATBgNVBAcMDE5vdm9rdXpuZXRzazEVMBMGA1UECAwMTm92b2t1em5l
dHNrMQswCQYDVQQGEwJSVTBmMB8GCCqFAwcBAQEBMBMGByqFAwICJAAGCCqFAwcBAQICA0MABECg
MYebqlT5Z/0xUFI6B2BQ/OrVH+PAApw+4MA+m35zBphmU6/XsHFQ7PiuXgbdA7yAYHQEenWvoT3P
BSph5WW0o4IBdjCCAXIwDgYDVR0PAQH/BAQDAgTwMBMGA1UdJQQMMAoGCCsGAQUFBwMCMB0GA1Ud
DgQWBBROTjX9G1CBPUbTZykKaBU89Ztn2DAfBgNVHSMEGDAWgBROgz4Uae/sXXqVK18R/jcyFklV
KzBcBgNVHR8EVTBTMFGgT6BNhktodHRwOi8vdGVzdGNhLmNyeXB0b3Byby5ydS9DZXJ0RW5yb2xs
L0NSWVBUTy1QUk8lMjBUZXN0JTIwQ2VudGVyJTIwMigxKS5jcmwwgawGCCsGAQUFBwEBBIGfMIGc
MGQGCCsGAQUFBzAChlhodHRwOi8vdGVzdGNhLmNyeXB0b3Byby5ydS9DZXJ0RW5yb2xsL3Rlc3Qt
Y2EtMjAxNF9DUllQVE8tUFJPJTIwVGVzdCUyMENlbnRlciUyMDIoMSkuY3J0MDQGCCsGAQUFBzAB
hihodHRwOi8vdGVzdGNhLmNyeXB0b3Byby5ydS9vY3NwL29jc3Auc3JmMAgGBiqFAwICAwNBAKO3
xo+lLAp+6tbpTHiboyM4ZFJ4K+zZTRvV8nv61H3+hgrXAAWCSQi8TiBAMeKHeUmGz9JxJbn76zdL
cyrdDL0=</wse:BinarySecurityToken></wsse:Security></SOAP-ENV:Header><SOAP-ENV:Body wsu:Id="OGRN_1025401011833"><fil:getNewLNNum><ogrn>1025401011833</ogrn></fil:getNewLNNum></SOAP-ENV:Body></SOAP-ENV:Envelope>


Их сообщение:
Код:

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:end="http://ru/ibs/fss/ln/ws/FileOperationsLn.wsdl" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsi="http://www.w3.org/2001/XMLSchema">
	<soapenv:Header xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
		<wsse:Security soapenv:actor="http://eln.fss.ru/actor/mo/1025401011833" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
			<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="#OGRN_1025401011833">
						<Transforms>
							<Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
						</Transforms>
						<DigestMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34112012-256"/>
						<DigestValue>PcOwMW8wBoZl2wKwsO0OG3hyiA91lgF3P1sLNYXqnVU=</DigestValue>
					</Reference>
				</SignedInfo>
				<SignatureValue>DlCd4fyK0YlykF6CK5vtgxgk555pziXAQ/v39uFGqVrIUAZ00LF/Ym9yfDlYOlJSY/tM8lEsSKrMUdov3zD5mw==</SignatureValue>
				<KeyInfo>
					<wsse:SecurityTokenReference>
						<wsse:Reference URI="#http://eln.fss.ru/actor/mo/1027739443236" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"/>
					</wsse:SecurityTokenReference>
				</KeyInfo>
			</Signature>
			<wse:BinarySecurityToken xmlns:wse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" wsu:Id="http://eln.fss.ru/actor/mo/1027739443236">MIIDkTCCA0CgAwIBAgITEgA4/fAC4SR8WI2UNQABADj98DAIBgYqhQMCAgMwfzEjMCEGCSqGSIb3
DQEJARYUc3VwcG9ydEBjcnlwdG9wcm8ucnUxCzAJBgNVBAYTAlJVMQ8wDQYDVQQHEwZNb3Njb3cx
FzAVBgNVBAoTDkNSWVBUTy1QUk8gTExDMSEwHwYDVQQDExhDUllQVE8tUFJPIFRlc3QgQ2VudGVy
IDIwHhcNMTkwNzIzMDczNzQwWhcNMTkxMDIzMDc0NzQwWjCBljEgMB4GCSqGSIb3DQEJARYRcmV0
MTIzcmV0QG1haWwucnUxGTAXBgNVBAMMEFNoYXNoa292IEV2Z2VuaWkxCzAJBgNVBAsMAklUMQ8w
DQYDVQQKDAZLT01JQUMxFTATBgNVBAcMDE5vdm9rdXpuZXRzazEVMBMGA1UECAwMTm92b2t1em5l
dHNrMQswCQYDVQQGEwJSVTBmMB8GCCqFAwcBAQEBMBMGByqFAwICJAAGCCqFAwcBAQICA0MABECg
MYebqlT5Z/0xUFI6B2BQ/OrVH+PAApw+4MA+m35zBphmU6/XsHFQ7PiuXgbdA7yAYHQEenWvoT3P
BSph5WW0o4IBdjCCAXIwDgYDVR0PAQH/BAQDAgTwMBMGA1UdJQQMMAoGCCsGAQUFBwMCMB0GA1Ud
DgQWBBROTjX9G1CBPUbTZykKaBU89Ztn2DAfBgNVHSMEGDAWgBROgz4Uae/sXXqVK18R/jcyFklV
KzBcBgNVHR8EVTBTMFGgT6BNhktodHRwOi8vdGVzdGNhLmNyeXB0b3Byby5ydS9DZXJ0RW5yb2xs
L0NSWVBUTy1QUk8lMjBUZXN0JTIwQ2VudGVyJTIwMigxKS5jcmwwgawGCCsGAQUFBwEBBIGfMIGc
MGQGCCsGAQUFBzAChlhodHRwOi8vdGVzdGNhLmNyeXB0b3Byby5ydS9DZXJ0RW5yb2xsL3Rlc3Qt
Y2EtMjAxNF9DUllQVE8tUFJPJTIwVGVzdCUyMENlbnRlciUyMDIoMSkuY3J0MDQGCCsGAQUFBzAB
hihodHRwOi8vdGVzdGNhLmNyeXB0b3Byby5ydS9vY3NwL29jc3Auc3JmMAgGBiqFAwICAwNBAKO3
xo+lLAp+6tbpTHiboyM4ZFJ4K+zZTRvV8nv61H3+hgrXAAWCSQi8TiBAMeKHeUmGz9JxJbn76zdL
cyrdDL0=</wse:BinarySecurityToken>
		</wsse:Security>
	</soapenv:Header>
	<soapenv:Body wsu:Id="OGRN_1025401011833">
		<end:getNewLNNumRange>
			<ogrn>1025401011833</ogrn>
			<cntLnNumbers>1</cntLnNumbers>
		</end:getNewLNNumRange>
	</soapenv:Body>
</soapenv:Envelope>


Да я тут теги меняю, кривляюсь, пытаюсь понять что к чему, да почему.
Offline two_oceans  
#38 Оставлено : 16 августа 2019 г. 7:05:18(UTC)
two_oceans

Статус: Эксперт

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

Сказал(а) «Спасибо»: 30 раз
Поблагодарили: 118 раз в 113 постах
В переделанном правда хэш и подпись не сходится, сертификат остался тот же (Ваш тестовый, хотя Id как будто это сертификат ФСС), а хэши другие. Мрак.

Отредактировано пользователем 16 августа 2019 г. 7:08:15(UTC)  | Причина: Не указана

Offline PashaTechnique  
#39 Оставлено : 16 августа 2019 г. 7:20:54(UTC)
PashaTechnique

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

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

Сказал(а) «Спасибо»: 1 раз
Автор: two_oceans Перейти к цитате
В переделанном правда хэш и подпись не сходится, сертификат остался тот же (Ваш тестовый, хотя Id как будто это сертификат ФСС), а хэши другие. Мрак.


Есть какие-то соображения, что я делаю не так, может сертификат который я скачал от них вообще не действителен. Я как понимаю проблема в нем же, а не в сертификате выданном Crypto Pro.
В той теме про делфи , указывали что есть вид алгоритма EL_2012, а есть DH_2012. Может в этом дело?
Offline two_oceans  
#40 Оставлено : 16 августа 2019 г. 10:15:32(UTC)
two_oceans

Статус: Эксперт

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

Сказал(а) «Спасибо»: 30 раз
Поблагодарили: 118 раз в 113 постах
Автор: PashaTechnique Перейти к цитате
Есть какие-то соображения, что я делаю не так, может сертификат который я скачал от них вообще не действителен. Я как понимаю проблема в нем же, а не в сертификате выданном Crypto Pro.
В той теме про делфи ,указывали что есть вид алгоритма EL_2012, а есть DH_2012. Может в этом дело?
Сертификат, который от них, используется для шифрования, к подписи вообще никаким боком. Ответы, которые приходят на запрос, также были верно подписаны их сертификатом; Ваши запросы тоже подписаны математически корректной подписью. Не вижу ошибок в алгоритме.

Это техподдержка при переделке Вашего запроса на верный по их мнению чего-то накосячили с подписью (если уж они подписали, то должны заменить сертификат) возможно сверх этого документ исказился при пересылке/копировании. Если бы не стоял их огрн в ссылке на сертификат, то я бы подумал что это Ваша подпись неизмененного документа просто сюда скопировали в качестве исходного документ не тот который отправляли им. Но раз там заменен огрн в ссылке на сертификат, а в Вашем сообщении огрн не заменен, то они сами чего-то мутили с подписью.

Про искажение копирования - в идеале не должно быть в документе отступов табуляциями или лишних переводов строк, это потому что символы перевода строк и табуляции можно каноникализировать по-разному и получать разный хэш. По крайней мере, в подписываемых частях (Body и SignedInfo с вложенными тегами). Исказить мог форум если выбрали не ту разметку.
Автор: two_oceans Перейти к цитате
Как получить нужный префикс в объекте SOAP... набросать минимальный шаблон соап в файле или тестовой переменной (с нужным префиксом):
Код:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Header/><soapenv:Body/></soapenv:Envelope>
и загрузить содержимое файла в объект SOAP, добавить нужную структуру запроса (включая остальные пространства имен Envelope), подписать. Версию xml и кодировку можно просто дописать в начало текста перед отправкой (если сделать аккуратно, подпись не нарушится). Однако скорее всего есть параметр добавлять ли версию и кодировку при формировании текста/стрима из объекта SOAP.
По такой схеме пробовали? Что получилось (запрос, описание результата в их ответе)? Если сформированное Вами по их указаниям сообщение проходит проверку другими средствами и не проходит проверку у них, пусть еще раз пояснят.

Отредактировано пользователем 16 августа 2019 г. 10:18:12(UTC)  | Причина: Не указана

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