logo Обзор КриптоПро NGate для защищённого доступа к корпоративным ресурсам
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

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

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

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

Сказал(а) «Спасибо»: 1 раз
Паша Техник снова с вами =)
Перенес тему сюда из прошлой темы, так как JCP же вроде.

Вообщем соап с подписью есть, шифрую документ, пытаюсь отправить запрос, получаю ошибку.
По порядку:
Метод создания соап документа и его подписи.
Код:
private static SOAPMessage createSoapRequest() throws Exception { 
		 
		 
		 if(!JCPXMLDSigInit.isInitialized()) {
			    JCPXMLDSigInit.init(); // пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ
			}
		 
		 KeyStore keyStore = KeyStore.getInstance("HDImageStore");
         keyStore.load(null, null);

         PrivateKey privateKey = (PrivateKey) keyStore.getKey("zeus", "password".toCharArray());
         X509Certificate certificate = (X509Certificate) keyStore.getCertificate("zeus");

		 MessageFactory messageFactory = MessageFactory.newInstance();
		 SOAPMessage soapMessage = messageFactory.createMessage();
		 SOAPPart soapPart = soapMessage.getSOAPPart();
    	 SOAPEnvelope soapEnvelope = soapPart.getEnvelope();
    	 soapEnvelope.addNamespaceDeclaration("end", "http://ru/ibs/fss/ln/ws/FileOperationsLn.wsdl");
		 SOAPBody soapBody = soapEnvelope.getBody();
		 SOAPElement soapElement = soapBody.addChildElement("getNewLNNum", "end");
		 SOAPElement element1 = soapElement.addChildElement("ogrn");
		 element1.addTextNode("1025401011833");
		 soapMessage.saveChanges();
		 
		 soapMessage.getSOAPPart().getEnvelope().addNamespaceDeclaration("wsse",
	                "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd");
		 soapMessage.getSOAPPart().getEnvelope().addNamespaceDeclaration("wsu","http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd");
		 soapMessage.getSOAPPart().getEnvelope().addNamespaceDeclaration("ds","http://www.w3.org/2000/09/xmldsig#");
		 soapMessage.getSOAPBody().setAttributeNS("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd",
	                "wsu:Id", "body");

			
	        
	        // Формируем заголовок.
	        WSSecHeader header = new WSSecHeader();
	        header.setActor("http://eln.fss.ru/actor/mo/1025401011833");        				 
	        header.setMustUnderstand(false);
	        
	        // Получаем документ.
	        Document doc = soapMessage.getSOAPPart().getEnvelope().getOwnerDocument();
	        Element secHeader = header.insertSecurityHeader(soapMessage.getSOAPPart().getEnvelope().getOwnerDocument());
	        Element token = header.getSecurityHeader();
	        
	        NodeList list = secHeader.getElementsByTagName("wsse:BinarySecurityToken");
	        Element binSecToken = null;
	        
	        if (list.getLength()!=0){
	        	binSecToken = (Element) list.item(0); 
	        }else{
	        	binSecToken = (Element) header.getSecurityHeader().appendChild(doc.createElementNS("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd","wsse:BinarySecurityToken"));
	        }
	        
	        binSecToken.setAttribute("wsu:Id", "OGRN_1025401011833");
	        binSecToken.setAttribute(
					"EncodingType",
					"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary");
	        binSecToken.setAttribute(
					"ValueType",
					"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3");
	        		
	        /*** Подпись данных ***/

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

	        // Преобразования над документом.
	        final Transforms transforms = new Transforms(doc);
	        transforms.addTransform(Transforms.TRANSFORM_C14N_EXCL_OMIT_COMMENTS);

	        XMLSignatureFactory fac = XMLSignatureFactory.getInstance("DOM", xmlDSigProvider);

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

	        // Ссылка на подписываемые данные.
	        Reference ref = fac.newReference("#body",
	            fac.newDigestMethod("urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34112012-256", null),
	            transformList, null, null);

	        // Блок SignedInfo.
	        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));

	        // Блок KeyInfo.
	        KeyInfoFactory kif = fac.getKeyInfoFactory();
	        X509Data x509d = kif.newX509Data(Collections.singletonList(certificate));
	        KeyInfo ki = kif.newKeyInfo(Collections.singletonList(x509d));
			 
	        // Подпись данных.
	        javax.xml.crypto.dsig.XMLSignature sig = fac.newXMLSignature(si, ki);
	        DOMSignContext signContext = new DOMSignContext((Key)privateKey, token);
	        sig.sign(signContext);

	        // Блок подписи Signature.
	        Element sigE = (Element) XPathAPI.selectSingleNode(signContext.getParent(), "//ds:Signature");
	        // Блок данных KeyInfo.
	        Node keyE = XPathAPI.selectSingleNode(sigE, "//ds:KeyInfo", sigE);
	        
	        // Элемент SenderCertificate, который должен содержать сертификат.
			list = secHeader.getElementsByTagName("wsse:BinarySecurityToken");
	        Element cerVal = (Element)list.item(0);
	        
	        //Element cerVal = (Element) XPathAPI.selectSingleNode(token, "//*[@wsu:Id='SenderCertificate']");
	        cerVal.setTextContent(XPathAPI.selectSingleNode(keyE, "//ds:X509Certificate", keyE).getFirstChild().getNodeValue());

	        // Удаляем элементы KeyInfo, попавшие в тело документа. Они должны быть только в header.
	        keyE.removeChild(XPathAPI.selectSingleNode(keyE, "//ds:X509Data", keyE));

	        NodeList chl = keyE.getChildNodes();

	        for (int i = 0; i < chl.getLength(); i++) {
	            keyE.removeChild(chl.item(i));
	        }

	        // Блок KeyInfo содержит указание на проверку подписи с помощью сертификата SenderCertificate.
	        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);
		
			soapMessage.saveChanges();
//			
		 System.out.println("----------SOAP Request------------");
		 soapMessage.writeTo(System.out);
		 
		 return soapMessage;
		 
	 }

Результат:
Код:
----------SOAP Request------------
<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"><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"><wsse:BinarySecurityToken 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="OGRN_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=</wsse:BinarySecurityToken><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="#body"><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>mdvUPVEdSSzhK4GNjBJ1+20HJ9MYnjRFnDsq0qFEhcE=</DigestValue></Reference></SignedInfo><SignatureValue>3kYqxMlXmVaG3bm0/D0GhnFsFb8htdLRfp4fpQ32tFcMs4wLwck92N1OhrSshgnNxu06eTCnFLR9
8GNP97y4Pg==</SignatureValue><KeyInfo><wsse:SecurityTokenReference><wsse:Reference URI="OGRN_1025401011833" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"/></wsse:SecurityTokenReference></KeyInfo></Signature></wsse:Security></SOAP-ENV:Header><SOAP-ENV:Body wsu:Id="body"><end:getNewLNNum><ogrn>1025401011833</ogrn></end:getNewLNNum></SOAP-ENV:Body></SOAP-ENV:Envelope><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"><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"><wsse:BinarySecurityToken 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="OGRN_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=</wsse:BinarySecurityToken><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="#body"><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>mdvUPVEdSSzhK4GNjBJ1+20HJ9MYnjRFnDsq0qFEhcE=</DigestValue></Reference></SignedInfo><SignatureValue>3kYqxMlXmVaG3bm0/D0GhnFsFb8htdLRfp4fpQ32tFcMs4wLwck92N1OhrSshgnNxu06eTCnFLR9
8GNP97y4Pg==</SignatureValue><KeyInfo><wsse:SecurityTokenReference><wsse:Reference URI="OGRN_1025401011833" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"/></wsse:SecurityTokenReference></KeyInfo></Signature></wsse:Security></SOAP-ENV:Header><SOAP-ENV:Body wsu:Id="body"><end:getNewLNNum><ogrn>1025401011833</ogrn></end:getNewLNNum></SOAP-ENV:Body></SOAP-ENV:Envelope>
Offline PashaTechnique  
#2 Оставлено : 6 августа 2019 г. 10:29:13(UTC)
PashaTechnique

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

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

Сказал(а) «Спасибо»: 1 раз
Вообщем далее использую класс CryptXML из sample-source. Сделал ему конструктор передал сообщения с подписью получившееся ранее. Помучался с библиотеками. Но все работает.
Конструктор без дешифровки:
Код:
public CryptXML(SOAPMessage message) throws Exception {
    /**
     * Регистрация алгоритмов ГОСТ
     */
    XmlInit.init();

    /**
     * создание простого XML докуента для примера.
     */
    Document doc = message.getSOAPPart().getEnvelope().getOwnerDocument();
    writeDoc(doc, System.out);
    System.out.println("");

    /*
     * создание временной ключевой пары для теста.
     */
    KeyTwix twix = CertGen.generateTwix1(JCP.GOST_EL_DH_EPH_NAME, "Crypto",
        JCP.GOST_EL_SIGN_NAME, JCP.PROVIDER_NAME, "CN=cert");
    //KeyTwix twix = new KeyTwix("XmlSignEncrypt");

    /**
     * зашифрование "на сертификате".
     */
    encrypt(doc, twix.getCert());
    writeDoc(doc, System.out);
    System.out.println("");

    /**
     * расшифрование на секретном ключе.
     */
//    decrypt(doc, twix.getPrivate());
//    writeDoc(doc, System.out);
//    System.out.println("");

}


Результат:
Код:
<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"><xenc:EncryptedData xmlns:xenc="http://www.w3.org/2001/04/xmlenc#" Type="http://www.w3.org/2001/04/xmlenc#Content"><xenc:EncryptionMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gost28147"/><ds:KeyInfo>
<xenc:EncryptedKey xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"><xenc:EncryptionMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:transport-gost2001"/><ds:KeyInfo>
<ds:X509Data>
<ds:X509Certificate>
MIIBSTCB+aADAgECAgQnZVs+MAgGBiqFAwICAzAPMQ0wCwYDVQQDDARjZXJ0MB4XDTE5MDgwNjA3
MjA1NloXDTIwMDgwNjA3MjA1NlowDzENMAsGA1UEAwwEY2VydDBjMBwGBiqFAwICEzASBgcqhQMC
AiQABgcqhQMCAh4BA0MABEDfS5dATpipTtLgsT7yubbCWsv17278irpwFiKlk1Ig9aW76Mx+zT43
wuHIzFJn5UMStRnvIrDw8ncp05sbb7rTozswOTAOBgNVHQ8BAf8EBAMCA+gwEwYDVR0lBAwwCgYI
KwYBBQUHAwIwEgYDVR0TAQH/BAgwBgEB/wIBBTAIBgYqhQMCAgMDQQCGE7/xWEEpDtgyKlkMk3W5
Hphj6ZyZqrmnCMfQHYVDCYtZs5iKcP8guV7hKQVBljOZxmAa3HCJMA/pVq7ZnjQX
</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo><xenc:CipherData><xenc:CipherValue>MIGkMCgEIO9cfsyoDrpaMHX3ScDTrDWD8rJ2ADDbNQ4sNd2Rg/kuBARCblXPoHgGByqFAwICHwGg
YzAcBgYqhQMCAhMwEgYHKoUDAgIkAAYHKoUDAgIeAQNDAARAiclE2ckEX+LImifR+4Yq0VhLj9/q
Sjb1kjxJTEN3KnXwHz1yDW1VHA0zkABwaQVdsiPIOA5f8158Nc96DJhkOwQI5laec9PYemw=</xenc:CipherValue></xenc:CipherData></xenc:EncryptedKey></ds:KeyInfo><xenc:CipherData><xenc:CipherValue>CVly7jFVOVrnDDwUbG10/xlTO7Jnulu7gUU+SYYqJ2Pw47+BPzP2cG1bUrcVt9/3HiPXzEyLJnHQ
I3v/akaORO4a0WIR2l+5V+L6Q3ehAPpbO8RnEIitu5FU19zvJCYSTQRSOvT3QCAk+pgBnvF0pyGE
7cWYC4ZgJOpLtcU+Aw3Vw2vZ3Wk/ltW3XSn6cYsdhFEei1jMKeN8AlVKn+w5Q6vuVEtAXdPYZRcE
eke2+GV831YwKVrNqNHnb38VUYaQCmxTI0LnJqh6fyPNBAptu3U5HaS6Zn+3Zv8/S8eCLXhDex3E
vvokzQVg5tyjCyfTVw1YqBiwsyRongvLTIeEbplXKqymqteNColgpgjvCZoLUPYKEtftToHi8Mj+
cYmQE6gqWQfFWLyxLS6sj/bMOLk/Nzbcs7ETPYFr2EUxzReDMFt25FqQXECkylr4c2BmtqAw5SA4
8N8IMaJvWG75nNUxskOsZmdYrENXblgT8xeX6o35l31FhtT6yTnCkBYfB3lMH3zSrPNewkK0C8ZJ
1IHF2Tfkqoh9Uv2n3X/lc4XlYMBmHF5ypf+d+zOeNikok/iBVS5jtc/YBYDXl5sVkiOulEBFIb8u
Gc4Y+KwiYiL2V64XzaZaV7ZNkjnaNDSWFfLw3YM/s1FY8tOXL6iTBGcOd08ruvcarqYeM7hjA+aj
WJp4mMATiMhnXeEyo6XiBu0Q1aLSc/CfP2STBbGtWGwZ7Onf0uI7cZO9VxK2l2rNfr0lvOjtRQUK
cUCE8cxSZ5bqTEMCqv3X0m3z1TNHlcyqVXef/QCPTrx54XwLMMf38K07IPNxfiYm+uomB0C8+xtp
x8IzxbYCuqnqHTJJ0i/YkAFaxUcxu+fua38mfZZNGkFdZWkl2Oas4RYM9ETVuSr56z0z00/ijzDP
Rjo0ddW4a+r87xwMHUrKHY/gVdrlTmcNcEDsbBYyz279nAwJrOgf4kWFGFgOPAl30GDkoEETYF4v
9yWPXGtvDEycJxOVrbp+wT0ozWQuFy5EsLo/Goqs46NgaY6YnsVK+pJqqI2/Zetufs+k6zy84A1T
gCAIxcAu175tGpNnP7PIOHeagb6kbBZkyDk+JqWFraIl6B2sckCZpszLwSf3UBR17Wj5xjbzEtHe
ER69J2rCRI5e+XUfQq8IhTk84LKuCLQ89+5MMqwT1iitsUSyOHYjZybEHMTNDPt2V5ro8UM4nsG0
h7yZISTvReAGjr1eEiXgMmA25I37B3LvZi1WX8k6EX5tGLhnvd3+8zcIVtWFNZOybWIayHXX0KWM
9I5Rj7FelWdDIXt96A4/mkVHP7M0D3fPBgtgky5zClotFq0XrnrruszxVmHyIRs7lgbGFfuV1AYc
CHLVZvR4o5L2fejPj2tf1InawE1Av50BOMVOeOIhS1Ae4sGmuqewEE0ZhnhdTWUxk1Hq3uvnIAGq
6GFlYpGT8fnInTtvM5Vdhxtl47mXxXeASRuPnG5SLMsbFq+WUpsOPRIMfIdliKZrCQW3LNyCw2NQ
Ebjm2KLwH7xFlWm0AUDXTv1MnWkeaEJQjqT4Oxjwt+hUmsWc6Xjhk3MukWz1xJzujhC0RBllrdGi
RWTNQzu/8RhuCa8kLsfKkY3o4vzA9NdZtIiLkLHJAUknTRazXvND/ThGHfVK58BwCg3eY3RaE7bC
SbbZKBtxuhghxNVQIFU47+QNmj/VVYYBtasiElJILSYf/tlPQDnEuAC2Mw87y1i0gE1Uwqsx2m3c
6T3b48ZbyiuKiSZVwiWdE3v+DZV8H6qJ/nW6b43+9lctiyzp++EYdf3FnIcgs2SPDoLhGeEGf7dp
0Ex34n/rZJCe1iaSj15RF0GcLxjMiTHYhuGNmuCjA0yaJXdldOIvFzon2YHTGiwHlq5/wWivmQcL
vOvAIIqQmbUniKrEbHUJnZC5T4jdwAJSzdqLSVbDa5OkeLKjHA+UbipdmeMOwDlmjVMQqIcQ4YIL
hVNql5/oZnk+CqBg/CSdMwYq0PhqIdbbvoD1tNel2TOJUt/1mmQHNcnzHu0yOxSgT8J6WN6Ur4rJ
5VHkoCkfEdUKHwp817TSHOxoN+9n1UPaGwsbvOoaUVoIzPWD8e3OuT6wA5S/17vDVf44XJZ6hWlG
Ya7rcLOWo4dwX2XYW8O5ThTIX8igT14AxEUHYdpXA1EJykMf8sl/0DqN+GNXMACgkzCxluFEb0jX
yR/qbhTEE1H1F4oZWcy3Ez17v3OzxkKRIVLUP3fQ9aD9jwSm0kvhRvj9b6BNGnM2zEvk6cuq49cb
iaqadN9oyvD7Uklz7mREYGPZlZRMW7+EwMBaKbGW6Lo4yUH6hwyy+kKCG1KpgYwmFuE2yEtGdmPc
0Q3HqLtkL2VrwBAnG6ZIaPCrTvxKqQQ2Qso6BvB5n7LCfAilFIGV+Zwuqktx2mBpq4Gi3Z2bDPW/
mxEWVNHVI2Ju3cd2n7zYxpNrFudCRcIFCV7qXuoZ4tVNvwfxwvQn2S36Nxe4hynB9xWAb0Nr8Wlu
2pr2v9JkG/pHXuU+klBVrNfuqNKqUhsLdPxvuowE5BCPHWUd3/LEIiB8TlbP11lJw2QbKB4x3Koa
w7ZAHLPvCHTAhR6+RSKnzBIm/bEPeAj//OiFggUYTydvwsVdV9sQbRdOO27cPAJZCtoPiEUqpYNs
XHYg5LApjsWZ4YujnFK9a8hQKkLqKkuK+Ww2M3Yex5VMC7oQfUNrnVfcFynaSyKNlQvHskXKaEWj
F6Cim9fEj5TUV705kAd0J3CwDeFc09w5ABm8YmOJEozblQwTQ42gQGatK1aI5g/+c1IuB64P7iqn
q6bAxv0NzKb+SfMgVWT0U6cY5cFXFMdOvA9F0NK/WS4hWrbUazKSU/5SZMoUYZGWHjJ2XzgqxECP
0OCioBqETl6ZV+2LQdDOB72uLvAP3UKq6k5BFceKY9pi+jvLGUbCD2ThTLZ0U5b+Dz3DkWdYnfeU
u3SfgsTI2ZbDBcZwuutfhViTdnSE9u3vm6FOrPnL1WjkZ0Vqmt5O8qEL0BYAk78bzuVOUab5seqn
p0oQ8R25tR5lv/gsAa1ouGrQygpFEDu5KgRege/VvzEQ4JItVeCqaIs4xLWwalxyxYLwm/O220JQ
Ou590UikPrKUxS1ynq9t1VgOfY9fjG7gXLap3pOjDlit+TiYWdI+2c4HGW+cNUABuQcoXF3F/4t9
LDIJknu3vw4g5gGfNRwsKfvl75ga+wxj7mXvEnchpzhdQ7fCqLG3bTaybW/Hum7LJIOrK2ZPiUp3
zoMY0ytfmoePTmfPgjtpenw0G23ibch9YOKssqHyg2nCkdyQ78fJrvlYPU/C4eD76vUEE+H9/GYP
LFN+++7/Xdr1vw0KDcg6TK8dzIbCcM6LCe9iUcNNXRKb+0QUuiQhTK8lh2d5H2aLCuk/y9MWynUA
YKC3RoXTrtY4gebb1HXpr8nkCAMa3ASj/xRlTcyUjDhuL47HwrPZBLUbdmF5DxADlIvGiMh52SfO
R+S+75bneb/WgVJE7npUIEk3SCGxhEDPe3Rjqz5dXSrpMt3KFP1i2esArc534JCPy6Jx7q89hut4
2oTpOaI7dq5MFqxJRUVJRBLMOoRH/ggv28APXf4Jl5E+Uqoxr38ox2kT0N9KiscFRZ4EFM6D0CjR
2K2gv+gWekWIoZd6F4uQJUWAfpKYTmXVmHPz/O44NMZ5rzANzgF5ijHMDxMYeyZPDvBFZmNfYUr7
FHX0qscPk2lDVpwzdBNKdzmQffLZD8VEx+6HIfpcs0bOzy1eSoaVnwQAhYj9YicU79DcHbOTfGRN
vhAqKLLF9a8WRLzAeLcl9f1DQU9Vv4AUU5EjqV7sGyG7JyfFIL8Z1PO1tdtSQNphmElSwV8VKZ4B
lvfxW9+9Po9y3crzFr//v3f/APhjwQWywphSCcrCW95uhXgHMO7uESAn8TH9bu7z3Cf+w/pIDaSf
llpChNAQS67l0XBkPAW5TADn++OvkFa9pEDKdHCanfnWbcQUfSxA7rmIvtuzNG8JhE/F3L0tUaDj
Iq1gZgl4M0H1F7NZZRNmNb5PqCpYmBQZYtrIsT+jcJMxeobk8iNMw1g0fJ2BCWtf2IANYwv5jsvG
6bjNib1gYDQWFX5GU36qpwHBhyjaj268ETU=</xenc:CipherValue></xenc:CipherData></xenc:EncryptedData></SOAP-ENV:Envelope>
Offline PashaTechnique  
#3 Оставлено : 6 августа 2019 г. 10:31:23(UTC)
PashaTechnique

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

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

Сказал(а) «Спасибо»: 1 раз
Пробую отправить запрос в итоге вижу это:
Код:
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
   <S:Body>
      <S:Fault xmlns:ns4="http://www.w3.org/2003/05/soap-envelope">
         <faultcode>S:Server</faultcode>
         <faultstring>unexpected XML tag. expected: {http://schemas.xmlsoap.org/soap/envelope/}Body but found: {http://www.w3.org/2001/04/xmlenc#}EncryptedData</faultstring>
      </S:Fault>
   </S:Body>
</S:Envelope>


P.S. Растянул на 3 сообщения думал не влезет.
Offline two_oceans  
#4 Оставлено : 6 августа 2019 г. 10:39:08(UTC)
two_oceans

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

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

Сказал(а) «Спасибо»: 42 раз
Поблагодарили: 145 раз в 138 постах
В прошлой теме после Ваших сообщений уже обсуждали подобное - прочитайте последнее сообщение прошлой темы, у Вас тоже тип не тот и Body отсутствует.
Offline PashaTechnique  
#5 Оставлено : 13 августа 2019 г. 9:30:34(UTC)
PashaTechnique

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

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

Сказал(а) «Спасибо»: 1 раз
Я скоро просто взорвусь Brick wall . two_oceans вся надежда на тебя.
Создал XML, подписал, зашифровал, как сказано в прошлой теме все убрал. Header пустой, в Body подписанное сообщение зашифрованное.
Ниже что получилось:
Код:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"><SOAP-ENV:Header/><SOAP-ENV:Body><EncryptedData xmlns="http://www.w3.org/2001/04/xmlenc#" Type="http://www.w3.org/2001/04/xmlenc#Element"><EncryptionMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gost28147"/><KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#"><EncryptedKey xmlns="http://www.w3.org/2001/04/xmlenc#"><EncryptionMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:transport-gost2001"/><KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#"><X509Data><X509Certificate>MIIDkTCCA0CgAwIBAgITEgA4/fAC4SR8WI2UNQABADj98DAIBgYqhQMCAgMwfzEj
MCEGCSqGSIb3DQEJARYUc3VwcG9ydEBjcnlwdG9wcm8ucnUxCzAJBgNVBAYTAlJV
MQ8wDQYDVQQHEwZNb3Njb3cxFzAVBgNVBAoTDkNSWVBUTy1QUk8gTExDMSEwHwYD
VQQDExhDUllQVE8tUFJPIFRlc3QgQ2VudGVyIDIwHhcNMTkwNzIzMDczNzQwWhcN
MTkxMDIzMDc0NzQwWjCBljEgMB4GCSqGSIb3DQEJARYRcmV0MTIzcmV0QG1haWwu
cnUxGTAXBgNVBAMMEFNoYXNoa292IEV2Z2VuaWkxCzAJBgNVBAsMAklUMQ8wDQYD
VQQKDAZLT01JQUMxFTATBgNVBAcMDE5vdm9rdXpuZXRzazEVMBMGA1UECAwMTm92
b2t1em5ldHNrMQswCQYDVQQGEwJSVTBmMB8GCCqFAwcBAQEBMBMGByqFAwICJAAG
CCqFAwcBAQICA0MABECgMYebqlT5Z/0xUFI6B2BQ/OrVH+PAApw+4MA+m35zBphm
U6/XsHFQ7PiuXgbdA7yAYHQEenWvoT3PBSph5WW0o4IBdjCCAXIwDgYDVR0PAQH/
BAQDAgTwMBMGA1UdJQQMMAoGCCsGAQUFBwMCMB0GA1UdDgQWBBROTjX9G1CBPUbT
ZykKaBU89Ztn2DAfBgNVHSMEGDAWgBROgz4Uae/sXXqVK18R/jcyFklVKzBcBgNV
HR8EVTBTMFGgT6BNhktodHRwOi8vdGVzdGNhLmNyeXB0b3Byby5ydS9DZXJ0RW5y
b2xsL0NSWVBUTy1QUk8lMjBUZXN0JTIwQ2VudGVyJTIwMigxKS5jcmwwgawGCCsG
AQUFBwEBBIGfMIGcMGQGCCsGAQUFBzAChlhodHRwOi8vdGVzdGNhLmNyeXB0b3By
by5ydS9DZXJ0RW5yb2xsL3Rlc3QtY2EtMjAxNF9DUllQVE8tUFJPJTIwVGVzdCUy
MENlbnRlciUyMDIoMSkuY3J0MDQGCCsGAQUFBzABhihodHRwOi8vdGVzdGNhLmNy
eXB0b3Byby5ydS9vY3NwL29jc3Auc3JmMAgGBiqFAwICAwNBAKO3xo+lLAp+6tbp
THiboyM4ZFJ4K+zZTRvV8nv61H3+hgrXAAWCSQi8TiBAMeKHeUmGz9JxJbn76zdL
cyrdDL0=</X509Certificate></X509Data></KeyInfo><CipherData><CipherValue>MIGpMCgEID7M1+ucxUXGs4y19SvS6eZ7H9GXY8leZlUrbDaQDJ2IBARFAH2EoH0GCSqFAwcBAgUB
AaBmMB8GCCqFAwcBAQEBMBMGByqFAwICJAAGCCqFAwcBAQICA0MABEAIHpJ29MDFk/oIdW2lMhJb
tFqq/73/ec6tFgRSdlLXP2eEF45pMgIF9rfU/GR555gYRMBtCJtiuX8F0RlzmUG/BAigcyTgnHrG
Qg==</CipherValue></CipherData></EncryptedKey></KeyInfo><CipherData><CipherValue>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</CipherValue></CipherData></EncryptedData></SOAP-ENV:Body></SOAP-ENV:Envelope>


Ошибка:
Код:

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
   <S:Body>
      <S:Fault xmlns:ns4="http://www.w3.org/2003/05/soap-envelope">
         <faultcode>S:Server</faultcode>
         <faultstring>ru.ibs.cryptoprto.jcp.wrapper.eln.ws.client.generated.CryptoException_Exception: Не удалось расшифровать сообщение. Возможно сообщение зашифровано на ключе отличном от ключа уполномоченного лица ФСС. Проверьте правильность и актуальность ключа уполномоченного лица ФСС.</faultstring>
      </S:Fault>
   </S:Body>
</S:Envelope>


Ну что ему еще нужно то, что я делаю не так подскажите...
Offline two_oceans  
#6 Оставлено : 13 августа 2019 г. 10:05:13(UTC)
two_oceans

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

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

Сказал(а) «Спасибо»: 42 раз
Поблагодарили: 145 раз в 138 постах
Добрый день.
На структуру уже не ругается, это уже прогресс.

По поводу сообщения - на каком сертификате шифровали? Сертификат заменяли после шифрования? В примере стоит сертификат тестового УЦ, это уже замененный на Ваш или так и шифровали? Даже не знаю допустим ли тестовый УЦ - лучше уточнить в рекомендациях сервиса.
P.S. В личку конечно тоже можно, но в разделе Джава отвечают достаточно оперативно, может быть и кроме меня у кого появятся мысли. Все-таки я сам шифрование ФСС не реализовывал, читал в темах на этом форуме и чего-то могу не знать.
Offline PashaTechnique  
#7 Оставлено : 13 августа 2019 г. 10:18:34(UTC)
PashaTechnique

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

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

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

По поводу сообщения - на каком сертификате шифровали? Сертификат заменяли после шифрования? В примере стоит сертификат тестового УЦ, это уже замененный на Ваш или так и шифровали? Даже не знаю допустим ли тестовый УЦ - лучше уточнить в рекомендациях сервиса.
P.S. В личку конечно тоже можно, но в разделе Джава отвечают достаточно оперативно, может быть и кроме меня у кого появятся мысли. Все-таки я сам шифрование ФСС не реализовывал, читал в темах на этом форуме и чего-то могу не знать.


Ну получается на единственном возможном, который имел закрытый ключ, я как понял это же обязательное условие для создания подписи, именно подписи, а не вставки сертификата.
Заменить его на что ?
Да в примере стоит сертификат выданный УЧ на некоторый период, он походу является тестовым. На нем и шифрую.
Не понимаю как это шифровать на сертификате ФСС?

sertifikaty.jpg (201kb) загружен 6 раз(а).
Offline PashaTechnique  
#8 Оставлено : 13 августа 2019 г. 10:38:48(UTC)
PashaTechnique

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

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

Сказал(а) «Спасибо»: 1 раз
Ведь сертификат выданный УЦ, имеет закрытый ключ для шифрования. А сертификат ФСС имеет только открытый для дешифровки. Если я все верно понимаю конечно.
То есть сформировать\послать запрос я смогу только имея какой-то закрытый ключ.
Offline two_oceans  
#9 Оставлено : 13 августа 2019 г. 11:46:46(UTC)
two_oceans

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

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

Сказал(а) «Спасибо»: 42 раз
Поблагодарили: 145 раз в 138 постах
Не совсем так, вот смотрите - когда подписываете своим закрытым ключом, на самом деле зашифровываете значение хэша закрытым ключом. При этом любой кто имеет сертификат, соответствующий этому ключу, может при помощи открытого сертификата расшифровать зашифрованный хэш и сравнить с фактических хэшем, то есть проверить подпись. Для упрощения сертификат даже прикладывается к подписи. это подписание. Другими словами у заинтересованных лиц не возникнет сложности узнать открытый ключ из сертификата и расшифровать хэш.

Теперь смотрите шифрование файла от чужих глаз - если его зашифровать также закрытым ключом, то любой, кто имеет сертификат (открытый ключ) сможет его прочитать, что согласитесь, противоречит цели закрыть файл от чужих глаз. Поэтому была разработана схема согласования ключей - фигурируют еще сессионный ключ и ключ согласования и для расшифровки требуется закрытый ключ получателя, а для шифрования достаточно открытого ключа из сертификата над которым проводится несколько операций. В итоге расшифровать всю хитрую схему сможет только получатель. Поэтому Вам надо начать с того чтобы где-то добыть сертификат ФСС и указать как-то его при шифровании, а перед отправкой заменить сертификат ФСС в результате на свой сертификат.
Автор: PashaTechnique Перейти к цитате
Ведь сертификат выданный УЦ, имеет закрытый ключ для шифрования.
Более точно, сначала была сгенерирована ключевая пара (открытый и закрытый ключ), хранящиеся в контейнере. Потом на основе ключевой пары создан запрос на сертификат (в запрос включается открытый ключ, сам запрос подписан закрытым ключом). УЦ на основе запроса на сертификат добавляет свои поля и подписывает, что получилось (сертификат, содержащий открытый ключ). Затем происходит установка сертификата в хранилище (при этом опционально может быть добавление сертификата в контейнер и установление связи между сертификатом в хранилище и контейнером). Это все происходит быстро в случае тестового УЦ, а некоторые УЦ сами генерирую ключевую пару и создают сертификат, поэтому действительно можно запутаться.

Сам по себе сертификат ФСС тоже получен в УЦ, разница только в присутствии контейнера с закрытым ключом и наличии связи сертификата с контейнером.

Отредактировано пользователем 13 августа 2019 г. 12:20:18(UTC)  | Причина: Убрал свои представления о схеме обмена ключами - лучше почитайте доки

Offline PashaTechnique  
#10 Оставлено : 13 августа 2019 г. 12:20:00(UTC)
PashaTechnique

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

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

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

Теперь смотрите шифрование файла от чужих глаз - если его зашифровать также закрытым ключом, то любой, кто имеет сертификат (открытый ключ) сможет его прочитать, что согласитесь, противоречит цели закрыть файл от чужих глаз. Поэтому была разработана схема согласования ключей - в общих чертах (не бейте меня за неточности, сотрудники КриптоПро) работает примерно так:
Смысл в том, что при шифровании помимо своего закрытого ключа нужно еще и указать сертификат получателя и тогда расшифровать всю эту хитрую схему смогут только отправитель и получатель, так как только у них есть закрытые ключи для получения общего ключа согласования. Поэтому Вам надо начать с того чтобы где-то добыть сертификат ФСС и указать как-то его при шифровании, а перед отправкой заменить сертификат ФСС в результате на свой сертификат.
Автор: PashaTechnique Перейти к цитате
Ведь сертификат выданный УЦ, имеет закрытый ключ для шифрования.
Более точно, сначала была сгенерирована ключевая пара (открытый и закрытый ключ), хранящиеся в контейнере. Потом на основе ключевой пары создан запрос на сертификат (в запрос включается открытый ключ, сам запрос подписан закрытым ключом). УЦ на основе запроса на сертификат добавляет свои поля и подписывает, что получилось (сертификат, содержащий открытый ключ). Затем происходит установка сертификата в хранилище (при этом опционально может быть добавление сертификата в контейнер и установление связи между сертификатом в хранилище и контейнером). Это все происходит быстро в случае тестового УЦ, а некоторые УЦ сами генерирую ключевую пару и создают сертификат, поэтому действительно можно запутаться.

Сам по себе сертификат ФСС тоже получен в УЦ, разница только в присутствии контейнера с закрытым ключом и наличии связи сертификата с контейнером.


Если я вас правильно понял, все что вы сейчас описали делает следующая вещь.
Данный метод как раз берет тот самый сертификат ФСС. Для того чтобы пройти ту самую подлинность.

Код:

public static X509Certificate ExtractCertFromCertStore()
            throws NoSuchProviderException, KeyStoreException, IOException, CertificateException, NoSuchAlgorithmException, UnrecoverableKeyException {
		
        KeyStore allCertStore = null;
        String storepass = "pass";
        String alias = "fss_test_cert_2019_34.10-2012.cer";

        allCertStore = KeyStore.getInstance("CertStore");
        File f = new File("C:\\Users\\shashkov\\Documents\\fssstore\\fssstore");
        allCertStore.load(new FileInputStream(f), storepass.toCharArray());
        X509Certificate UserCert = (X509Certificate) allCertStore.getCertificate(alias);
        
        if (UserCert!=null)
        	System.out.println("Сертификат из файла, загружен.");
	    else
	    	System.out.println("Сертификат из файла, не загружен.");
        
        return UserCert;
        
    }


Этот метод берет тот самый ключ для подписи:
Код:

public static X509Certificate GetCertificateFromStorage(String Alias)
	            throws NoSuchProviderException, KeyStoreException, IOException, CertificateException, NoSuchAlgorithmException, UnrecoverableKeyException {

		 if(!JCPXMLDSigInit.isInitialized()) {
			    JCPXMLDSigInit.init(); 
		 }
		 
	     KeyStore ks = KeyStore.getInstance("HDImageStore");
	     ks.load(null, null);
	     X509Certificate certificate = (X509Certificate)ks.getCertificate(Alias);
	     
	     if (certificate!=null)
	    	 System.out.println("Сертификат из хранилища HDImageStore, загружен.");
	     else
	    	 System.out.println("Сертификат из хранилища HDImageStore, не загружен.");
	     
	     return certificate;
	     
	    }


Далее при шифровании происходит следующее:
Код:

      ...
      //Шифрование подписанного документа
      org.w3c.dom.Document doc = StartEncrypt(KeyCertificate.ExtractCertFromCertStore(), nameFile);
      X509Certificate.addTextNode(KeyCertificate.certToBase64(KeyCertificate.GetCertificateFromStorage("zeus")));
      ....
      public  static Document StartEncrypt(X509Certificate cert , String nameFile) throws Exception
    {
        XmlInit.init();
        MessageFactory mf = MessageFactory.newInstance();
        SOAPMessage message = mf.createMessage();
        SOAPPart soapPart = message.getSOAPPart();

        FileInputStream is = new FileInputStream("C:\\Storage\\Store\\"+nameFile); // ЕСЛИ берем из файла

        soapPart.setContent(new StreamSource(is));
        Document doc = message.getSOAPPart().getEnvelope().getOwnerDocument();

        //Создание случайного сессионного ключа.
        final KeyGenerator kg = KeyGenerator.getInstance("GOST28147");
        final SecretKey sessionKey = kg.generateKey();

        //Зашифрование сессионного ключа.
        EncryptedKey encryptedKey = wrapKey(doc, sessionKey, cert);
        //  EncryptedKey encryptedKey = wrapKey(doc, pk, cert);
        //зашифрование документа
        Element element = doc.getDocumentElement();
        XMLCipher xmlCipher = XMLCipher.getInstance(Consts.URI_GOST_CIPHER);
        xmlCipher.init(XMLCipher.ENCRYPT_MODE, sessionKey);
        // добавляем шифрованный ключ.
        EncryptedData encryptedData = xmlCipher.getEncryptedData();
        KeyInfo keyInfo = new KeyInfo(doc);
        keyInfo.add(encryptedKey);
        encryptedData.setKeyInfo(keyInfo);
        //зашифрование документа
        xmlCipher.doFinal(doc, element, false);
        is.close();
        return doc;
    }


Трудно на словах разобраться что там происходит, я даже половины не понял того что и вы то описали. Можете попробовать какими-то наводящими примерами?
Большая часть кода в проекте взята из исходников примеров предоставляемых самими Crypto Pro, естественно некоторые нюансы такие как пути к хранилищам, доступ к ним же так же проверен, все работает, на ура. Эх какая же тут путаница...
Offline two_oceans  
#11 Оставлено : 13 августа 2019 г. 12:29:04(UTC)
two_oceans

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

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

Сказал(а) «Спасибо»: 42 раз
Поблагодарили: 145 раз в 138 постах
Код:
//Шифрование подписанного документа
      org.w3c.dom.Document doc = StartEncrypt(KeyCertificate.ExtractCertFromCertStore(), nameFile);
      X509Certificate.addTextNode(KeyCertificate.certToBase64(KeyCertificate.GetCertificateFromStorage("zeus")));
Ну, получается все вроде бы на месте. ExtractCertFromCertStore() - берет сертификат получателя (ФСС), nameFile - имя документа для шифрования, GetCertificateFromStorage() - сертификат отправителя, который сразу добавляется в результат без необходимости замены. Остается проверить сами сертификаты ... и наверно схему обмена ключей. Вроде уже где-то писал про этот подводный камень - для сертификатов гост-2012 автоматом выбирается схема PRO12_EXPORT, а для фсс нужна PRO_EXPORT как с сертификатом гост-2001, так и гост-2012.

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

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

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

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

Сказал(а) «Спасибо»: 1 раз
Автор: two_oceans Перейти к цитате
Код:
//Шифрование подписанного документа
      org.w3c.dom.Document doc = StartEncrypt(KeyCertificate.ExtractCertFromCertStore(), nameFile);
      X509Certificate.addTextNode(KeyCertificate.certToBase64(KeyCertificate.GetCertificateFromStorage("zeus")));
Ну, получается все вроде бы на месте. ExtractCertFromCertStore() - берет сертификат получателя (ФСС), nameFile - имя документа для шифрования, GetCertificateFromStorage() - сертификат отправителя, который сразу добавляется в результат без необходимости замены. Остается проверить сами сертификаты.


Applause Буду очень рад услышать как это сделатьApplause
Offline PashaTechnique  
#13 Оставлено : 14 августа 2019 г. 6:11:53(UTC)
PashaTechnique

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

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

Сказал(а) «Спасибо»: 1 раз
ATTENTION
ACHTUNG
Уважаемые криптофорумчане.

Кто-нибудь уже подскажите, где или в каком методе происходит дефолтная подстановка это схемой PRO_EXPERT...
Offline PashaTechnique  
#14 Оставлено : 14 августа 2019 г. 7:27:14(UTC)
PashaTechnique

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

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

Сказал(а) «Спасибо»: 1 раз
Ну это просто магия какая-то.

Единственное что мне не хватало для нормальной отправки запроса.
Код:

        //Создание случайного сессионного ключа.
        final KeyGenerator kg = KeyGenerator.getInstance("GOST28147");
        kg.init(CryptParamsSpec.getInstance(CryptParamsSpec.Rosstandart_TC26_Z));
        final SecretKey sessionKey = kg.generateKey();


Ответ получен. Уже даже расшифровал его. Есть два нюанса которые мне не понятны и с чем это связанно соответственно тоже.
И так использую пока самый простой метод на стороне сервиса - это получение нового номера ЭЛН.
Вот собственно расшифрованный ответ:
Код:

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" 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"><SOAP-ENV:Header><wsse:Security S:actor="http://eln.fss.ru/actor/fss/ca/1027739443236"><wsse:BinarySecurityToken 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/fss/ca/1027739443236">MIIIJTCCB9KgAwIBAgIRAMR1DVsR5NuA6BHzyun8ReUwCgYIKoUDBwEBAwIwggEfMRwwGgYJKoZI
hvcNAQkBFg11Y0B2b3NraG9kLnJ1MRgwFgYFKoUDZAESDTExNjc3NDYyODkyNDgxGjAYBggqhQMD
gQMBARIMMDA3NzI5NDk4ODEzMQswCQYDVQQGEwJSVTEYMBYGA1UECAwPNzcg0JzQvtGB0LrQstCw
MRkwFwYDVQQHDBDQsy4g0JzQvtGB0LrQstCwMTEwLwYDVQQJDCjRg9C70LjRhtCwINCj0LTQsNC7
0YzRhtC+0LLQsCwg0LTQvtC8IDg1MSkwJwYDVQQKDCDQpNCT0JHQoyDQndCY0JggwqvQktC+0YHR
hdC+0LTCuzEpMCcGA1UEAwwg0KTQk9CR0KMg0J3QmNCYIMKr0JLQvtGB0YXQvtC0wrswHhcNMTgx
MDA4MTIwNTU4WhcNMTkxMDA4MTIxNTU4WjCCAZQxGDAWBgUqhQNkARINMTAyNzczOTQ0MzIzNjEa
MBgGCCqFAwOBAwEBEgwwMDc3MzYwNTY2NDcxNDAyBgNVBAkMK9Ce0YDQu9C40LrQvtCyINC/0LXR
gNC10YPQu9C+0LosINC00L7QvCAz0LAxHzAdBgkqhkiG9w0BCQEWEGcucHJ5YW1vdkBmc3MucnUx
CzAJBgNVBAYTAlJVMQswCQYDVQQIDAI3NzEZMBcGA1UEBwwQ0LMuINCc0L7RgdC60LLQsDFnMGUG
A1UECgxe0KTQvtC90LQg0YHQvtGG0LjQsNC70YzQvdC+0LPQviDRgdGC0YDQsNGF0L7QstCw0L3Q
uNGPINCg0L7RgdGB0LjQudGB0LrQvtC5INCk0LXQtNC10YDQsNGG0LjQuDFnMGUGA1UEAwxe0KTQ
vtC90LQg0YHQvtGG0LjQsNC70YzQvdC+0LPQviDRgdGC0YDQsNGF0L7QstCw0L3QuNGPINCg0L7R
gdGB0LjQudGB0LrQvtC5INCk0LXQtNC10YDQsNGG0LjQuDBmMB8GCCqFAwcBAQEBMBMGByqFAwIC
JAAGCCqFAwcBAQICA0MABECEkSwF1tUQy0VCXJxoCCHcWH40247CTla0jJli3jNSjdcj0pc3YjxM
/cND94wWL7K4Olk8msDN7zGNgcCwmIZno4IEZzCCBGMwDgYDVR0PAQH/BAQDAgPYMB0GA1UdJQQW
MBQGCCsGAQUFBwMCBggrBgEFBQcDBDAdBgNVHSAEFjAUMAgGBiqFA2RxATAIBgYqhQNkcQIwNgYF
KoUDZG8ELQwrItCa0YDQuNC/0YLQvtCf0YDQviBDU1AiICjQstC10YDRgdC40Y8gNC4wKTCCAQgG
BSqFA2RwBIH+MIH7DCsi0JrRgNC40L/RgtC+0J/RgNC+IENTUCIgKNCy0LXRgNGB0LjRjyA0LjAp
DCoi0JrRgNC40L/RgtC+0J/RgNC+INCj0KYiINCy0LXRgNGB0LjQuCAyLjAMT9Ch0LXRgNGC0LjR
hNC40LrQsNGCINGB0L7QvtGC0LLQtdGC0YHRgtCy0LjRjyDihJYg0KHQpC8xMjQtMzAxMCDQvtGC
IDMwLjEyLjIwMTYMT9Ch0LXRgNGC0LjRhNC40LrQsNGCINGB0L7QvtGC0LLQtdGC0YHRgtCy0LjR
jyDihJYg0KHQpC8xMjgtMjk4MyDQvtGCIDE4LjExLjIwMTYwggFgBgNVHSMEggFXMIIBU4AUjMT1
xwUOCKrWHyz8rQaXa1sowluhggEspIIBKDCCASQxHjAcBgkqhkiG9w0BCQEWD2RpdEBtaW5zdnlh
ei5ydTELMAkGA1UEBhMCUlUxGDAWBgNVBAgMDzc3INCc0L7RgdC60LLQsDEZMBcGA1UEBwwQ0LMu
INCc0L7RgdC60LLQsDEuMCwGA1UECQwl0YPQu9C40YbQsCDQotCy0LXRgNGB0LrQsNGPLCDQtNC+
0LwgNzEsMCoGA1UECgwj0JzQuNC90LrQvtC80YHQstGP0LfRjCDQoNC+0YHRgdC40LgxGDAWBgUq
hQNkARINMTA0NzcwMjAyNjcwMTEaMBgGCCqFAwOBAwEBEgwwMDc3MTA0NzQzNzUxLDAqBgNVBAMM
I9Cc0LjQvdC60L7QvNGB0LLRj9C30Ywg0KDQvtGB0YHQuNC4ggsA1FjD1QAAAAAADDAdBgNVHQ4E
FgQUqFxeJxIJdDYfxXvNkZpupHIZNkYwJwYJKwYBBAGCNxUKBBowGDAKBggrBgEFBQcDAjAKBggr
BgEFBQcDBDBxBgNVHR8EajBoMDGgL6AthitodHRwOi8vdWMudm9za2hvZC5ydS9jZHAvdm9za2hv
ZF9nb3N0MTIuY3JsMDOgMaAvhi1odHRwOi8vY2RwMS52b3NraG9kLnJ1L2NkcC92b3NraG9kX2dv
c3QxMi5jcmwwgYIGCCsGAQUFBwEBBHYwdDA3BggrBgEFBQcwAoYraHR0cDovL3VjLnZvc2tob2Qu
cnUvY2RwL3Zvc2tob2RfZ29zdDEyLmNydDA5BggrBgEFBQcwAoYtaHR0cDovL2NkcDEudm9za2hv
ZC5ydS9jZHAvdm9za2hvZF9nb3N0MTIuY3J0MCsGA1UdEAQkMCKADzIwMTgxMDA4MTIwNTU4WoEP
MjAxOTEwMDgxMjA1NThaMAoGCCqFAwcBAQMCA0EAzvp/kUQBSGrurEz478+bY4+lVNYtR3pqB4m+
0CC9atS12eG0QCb7HQ52TSiv4OddD7alVOSS8WEL6OSLah0B3Q==</wsse:BinarySecurityToken><Signature xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#WithComments"/><SignatureMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102012-gostr34112012-256"/><Reference URI="#OGRN_1027739443236"><Transforms><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#WithComments"/></Transforms><DigestMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34112012-256"/><DigestValue>7wgpLIIj3zbzYPIACoG2HwXH9UJEgEcaBGg6imIYmA0=</DigestValue></Reference></SignedInfo><SignatureValue>Ey2YNN8A+xIz+ISWGB2BzG2kV1oy8TNHecpG9ORCOLwbmGKDXnmSoPbYDKdgFqI6Tz5LT3baQC0w
xYtdDzKfxQ==</SignatureValue><KeyInfo><wsse:SecurityTokenReference><wsse:Reference URI="#http://eln.fss.ru/actor/fss/ca/1027739443236" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"/></wsse:SecurityTokenReference></KeyInfo></Signature></wsse:Security></SOAP-ENV:Header><S:Body wsu:Id="OGRN_1027739443236"><ns1:getNewLNNumResponse xmlns:ns1="http://ru/ibs/fss/ln/ws/FileOperationsLn.wsdl" xmlns:ns2="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"><ns1:fileOperationsLnUserGetNewLNNumOut><ns1:REQUEST_ID>LNNUMMO_1025401011833_2019_08_14_00001</ns1:REQUEST_ID><ns1:STATUS>0</ns1:STATUS><ns1:MESS>ORA-20001: Отсутствует подпись головной организации</ns1:MESS><ns1:DATA xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/></ns1:fileOperationsLnUserGetNewLNNumOut></ns1:getNewLNNumResponse></S:Body></S:Envelope>


И так по порядку:
Почему когда я задавал в запросе указывая идентификационный номер МО, он был одним, а в ответе пришел другой?

Запрос:
Код:

        //Добавляем заголовки для помещения информации о подписи:
        WSSecHeader header = new WSSecHeader();
        header.setActor("http://eln.fss.ru/actor/mo/OGRN_1025401011833"); 
        header.setMustUnderstand(false);


Ответ:
Код:

<wsse:Reference URI="#http://eln.fss.ru/actor/fss/ca/1027739443236" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"/>


Второй вопрос уже написан в ответе на запрос (Отсутствует подпись головной организации). Вот тут если можно поподробнее?
Offline two_oceans  
#15 Оставлено : 14 августа 2019 г. 8:09:10(UTC)
two_oceans

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

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

Сказал(а) «Спасибо»: 42 раз
Поблагодарили: 145 раз в 138 постах
Поздравляю!
Цитата:
И так по порядку:
Почему когда я задавал в запросе указывая идентификационный номер МО, он был одним, а в ответе пришел другой?
Это надо смотреть по методическим рекомендациям сервиса ФСС. Навскидку, в запросе был ОГРН больницы, в ответе ОГРН самого ФСС. Вроде как логично, если зависит от отправителя.
Цитата:
Второй вопрос уже написан в ответе на запрос (Отсутствует подпись головной организации). Вот тут если можно поподробнее?
Код:
 strRef.setAttribute("URI", "OGRN_1025401011833");
Насколько вижу по коду в начале темы, Вы так и не вняли совету из прошлой темы вставить решетку в URI поэтому вероятно ФСС считает что сертификата нет и ЭЦП не верна.
Код:
 strRef.setAttribute("URI", "#OGRN_1025401011833");

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

Offline PashaTechnique  
#16 Оставлено : 14 августа 2019 г. 8:33:07(UTC)
PashaTechnique

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

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

Сказал(а) «Спасибо»: 1 раз
Автор: two_oceans Перейти к цитате
Поздравляю!
Цитата:
И так по порядку:
Почему когда я задавал в запросе указывая идентификационный номер МО, он был одним, а в ответе пришел другой?
Это надо смотреть по методическим рекомендациям сервиса ФСС. Навскидку, в запросе был ОГРН больницы, в ответе ОГРН самого ФСС. Вроде как логично, если зависит от отправителя.
Цитата:
Второй вопрос уже написан в ответе на запрос (Отсутствует подпись головной организации). Вот тут если можно поподробнее?
Код:
 strRef.setAttribute("URI", "OGRN_1025401011833");
Насколько вижу по коду в начале темы, Вы так и не вняли совету из прошлой темы вставить решетку в URI поэтому вероятно ФСС считает что сертификата нет и ЭЦП не верна.
Код:
 strRef.setAttribute("URI", "#OGRN_1025401011833");


Насчет первого вопроса думаю рано или поздно узнаю, но спасибо за наводку!

А что если в данный момент URI выглядит вот так, нужен ли этот символ:
Код:

strRef.setAttribute("URI", "http://eln.fss.ru/actor/mo/1025401011833");


Вообщем-то уже попробовал и с решеткой отправить запрос, собственно ничего не изменилось, а к чему она вообще?
Но с другой стороны если сертификата нет, ЭЦП не верна, скорее всего сервис бы послал меня, учитывая что по-моему мнению на стороне сервиса стоят верификации ЭЦП.

Offline two_oceans  
#17 Оставлено : 14 августа 2019 г. 9:56:28(UTC)
two_oceans

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

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

Сказал(а) «Спасибо»: 42 раз
Поблагодарили: 145 раз в 138 постах
Цитата:
Но с другой стороны если сертификата нет, ЭЦП не верна, скорее всего сервис бы послал меня, учитывая что по-моему мнению на стороне сервиса стоят верификации ЭЦП.
Как я понимаю, того чего просили сервис не вернул, а прислал описание ошибки, то есть "послал".

Цитата:
Вообщем-то уже попробовал и с решеткой отправить запрос, собственно ничего не изменилось, а к чему она вообще?
Решетка это разделитель в URI между "адресом страницы" и "ID в документе". Если части "адрес страницы" нет (стоит первая решетка или значение ури пустое), то используется текущий документ. Если части "ID в документе" нет, то есть решетка последняя или отсутствует, используется весь документ. Таким образом, если написать OGRN_1111 без решетки это будет считаться как адрес страницы, но OGRN_1111 это не валидный адрес, поэтому скорее всего будет либо исключение либо выберется пустая строка вместо содержимого тега с ID OGRN_1111. Если написать #OGRN_1111 это будет считаться как выбор содержимого ID OGRN_1111 в текущем документе (включая сам тег с ID, что нам и требуется). Опять же если такого ID нет в документе, то выберется пустая строка (в этом случае исключение бывает редко). Если в документе 2 одинаковых ID то будет либо исключение либо выберется первый из них. Делаем выводы по аналогии для другого значения:

Если укажете ури http://eln.fss.ru/actor/mo/1025401011833 без решетки, то при проверке будет пытаться скачать страницу по адресу http://eln.fss.ru/actor/mo/1025401011833 целиком. Полагаю такого адреса нет и будет либо исключение или пустая строка. ID со значением http://eln.fss.ru/actor/mo/1025401011833 будет невалидный (из-за наличия двоеточия и слешей), поэтому ури #http://eln.fss.ru/actor/mo/1025401011833 скорее всего тоже выберет пустую строку. Как видите что так пустая строка, что так, ничего не изменилось. Это в свою очередь означает что сертификат не найден при проверке и невозможно проверить SignatureValue. Если SignatureValue не проверено, то положено прерывать проверку подписи. Поэтому надо придумать другое значение ID (валидное), а в ури поставить решетку первой перед значением ID другого элемента.

Подробнее про валидность ID http://www.datypic.com/sc/xsd/t-xsd_ID.html
Цитата:
The type xsd:ID is used for an attribute that uniquely identifies an element in an XML document. An xsd:ID value must be an NCName. This means that it must start with a letter or underscore, and can only contain letters, digits, underscores, hyphens, and periods.
xsd:ID carries several additional constraints:
Their values must be unique within an XML instance, regardless of the attribute's name or its element name.
A complex type cannot include more than one attribute of type xsd:ID, or any type derived from xsd:ID.
xsd:ID attributes cannot have default or fixed values specified.
По-русски (вольно): тип xsd:ID основан на типе NCName, это означает что значение должно начинаться с подчеркивания или буквы и может содержать только следующие символы: буквы, цифры, подчеркивания, дефисы, точки. Кроме того, на накладываются дополнительные ограничения: значение должно быть уникально в xml документе, другие типы не могут содержать 2 и более атрибута типа xsd:ID, любой тип основанный на xsd:ID не может иметь значения по умолчанию или фиксированного значения.

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

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

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

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

Сказал(а) «Спасибо»: 1 раз
Автор: two_oceans Перейти к цитате
Цитата:
Но с другой стороны если сертификата нет, ЭЦП не верна, скорее всего сервис бы послал меня, учитывая что по-моему мнению на стороне сервиса стоят верификации ЭЦП.
Как я понимаю, того чего просили сервис не вернул, а прислал описание ошибки, то есть "послал".

Цитата:
Вообщем-то уже попробовал и с решеткой отправить запрос, собственно ничего не изменилось, а к чему она вообще?
Решетка это разделитель в URI между "адресом страницы" и "ID в документе". Если части "адрес страницы" нет (стоит первая решетка или значение ури пустое), то используется текущий документ. Если части "ID в документе" нет, то есть решетка последняя или отсутствует, используется весь документ. Таким образом, если написать OGRN_1111 без решетки это будет считаться как адрес страницы, но OGRN_1111 это не валидный адрес, поэтому скорее всего будет либо исключение либо выберется пустая строка вместо содержимого тега с ID OGRN_1111. Если написать #OGRN_1111 это будет считаться как выбор содержимого ID OGRN_1111 в текущем документе (включая сам тег с ID, что нам и требуется). Опять же если такого ID нет в документе, то выберется пустая строка (в этом случае исключение бывает редко). Если в документе 2 одинаковых ID то будет либо исключение либо выберется первый из них. Делаем выводы по аналогии для другого значения:


Все, я вспомнил, я сделал так как вы просили, начала появляться ошибка и я это убрал, но я не понимаю что он хочет от меня.
Попробовал слетает сразу это в картинке прикрепил. Гуглил указывается что это какой-то баг JDK. Так и не дошло как убрать, есть какие-то предположения?
Пересмотрел кучу проектов и исходников нигде не видел чтобы ставили эту решетку, даже в сэмплах от CryptoPro.


Код:

        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");
	еlement.addTextNode("1025401011833");


sertifikaty.jpg (336kb) загружен 4 раз(а).

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

Offline PashaTechnique  
#19 Оставлено : 14 августа 2019 г. 10:32:35(UTC)
PashaTechnique

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

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

Сказал(а) «Спасибо»: 1 раз
Пробовал еще другой вариант.
Код:

        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");


Принцип построения сообщения не изменился, но на решетку он и в этом случае ругается. Как я понял из ошибки, он не может найти такой элемент чтобы сослаться на него, верно?
Но в таком случае где он должен находиться...
Offline two_oceans  
#20 Оставлено : 14 августа 2019 г. 10:38:21(UTC)
two_oceans

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

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

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

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

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