Статус: Новичок
Группы: Участники
Зарегистрирован: 10.09.2012(UTC) Сообщений: 7 Откуда: Санкт-Петербург
|
Пробую использовать тестовый сервис проверки подписи, расположенный по адресу http://188.254.16.92:7777/gateway/services/SID0003038. Создал носитель и хранилище, сделал запрос на сертификат, записал подписанный сертификат, а также, подписавший рутовый: Код:
GostCertificateRequest request = new GostCertificateRequest();
request.setKeyUsage(GostCertificateRequest.CRYPT_DEFAULT);
request.addExtKeyUsage(GostCertificateRequest.INTS_PKIX_CLIENT_AUTH);
request.addExtKeyUsage(GostCertificateRequest.INTS_PKIX_SERVER_AUTH);
KeyPair keyPair = KeyPairGen.genKey(Constants.SIGN_KEY_PAIR_ALG);
request.setPublicKeyInfo(keyPair.getPublic());
request.setSubjectInfo(DNAME);
request.encodeAndSign(keyPair.getPrivate());
String httpAddress = "http://www.cryptopro.ru/certsrv/";
CertificateFactory cf = CertificateFactory.getInstance("X.509");
ByteArrayInputStream bais;
byte[] encodedCert = request.getEncodedCert(httpAddress);
bais = new ByteArrayInputStream(encodedCert);
Certificate cert = cf.generateCertificate(bais);
byte[] encodedRootCert = GostCertificateRequest.getEncodedRootCert(httpAddress);
bais = new ByteArrayInputStream(encodedRootCert);
Certificate certRoot = cf.generateCertificate(bais);
String certPath = HDImageStore.getDir() + File.separator + "root.crt";
OutputStream outCert = new FileOutputStream(certPath);
outCert.write(certRoot.getEncoded());
outCert.close();
List<Certificate> list = new ArrayList<Certificate>();
list.add(cert);
list.add(certRoot);
KeyStore ks = KeyStore.getInstance("HDImageStore");
ks.load(null, null); // не существует хранилища сертификатов, проинициализированного именем данного ключевого носителя
ks.setKeyEntry(CONT_NAME, keyPair.getPrivate(), PASSWORD, list.toArray(new Certificate[0]));
ks.setCertificateEntry(CERT_NAME, certRoot);
HDImageStore.setDir(HDS_DIR);
String storePath = HDS_DIR + File.separator + CONT_NAME;
OutputStream outStore = new FileOutputStream(storePath);
ks.store(outStore, PASSWORD);
outStore.close();
Далее подписываю soap-пакеты: Код:
public static void signSoapMessage(SOAPMessage msg, String certSerNum, String certContent, PrivateKey privateKey)
throws SOAPException, XMLSecurityException, TransformerException {
addNamespaceDeclarations(msg);
Document doc = msg.getSOAPPart().getEnvelope().getOwnerDocument();
// инициализация объекта формирования ЭЦП в соответствии с алгоритмом ГОСТ Р 34.10-2001
final XMLSignature sig = new XMLSignature(doc, "", SIGN_METHOD);
// создание узла преобразований <ds:Transforms> обрабатываемого XML-документа
final Transforms transforms = new Transforms(doc);
// добавление в узел преобразований правил работы с документом
transforms.addTransform(Transforms.TRANSFORM_ENVELOPED_SIGNATURE);
transforms.addTransform(Transforms.TRANSFORM_C14N_WITH_COMMENTS);
// добавление в узел подписи ссылок (узла <ds:Reference>), определяющих правила работы с
// XML-документом (обрабатывается текущий документ с заданными в узле <ds:Transforms> правилами
// и заданным алгоритмом хеширования)
sig.addDocument("#body", transforms, DIGEST_METHOD);
SOAPHeader header = msg.getSOAPPart().getEnvelope().getHeader();
if (header == null) {
header = msg.getSOAPPart().getEnvelope().addHeader();
}
customizeSoapHeader(header, certSerNum, certContent, (SOAPElement)sig.getElement());
// создание подписи объекта XML-документа
sig.sign(privateKey);
}
Получаю следущий soap-пакет: Код:
<?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: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">
<soapenv:Header><wsse:Security xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" S:actor="http://smev.gosuslugi.ru/actors/smev"><ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:SignedInfo>
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
<ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411"/>
<ds:Reference URI="#body">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
<ds:Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments"/>
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr3411"/>
<ds:DigestValue>QqlfvmY9mysyWlfQtdyGDG2SlytYpBf3Y0AwySHO+nw=</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue>
P3VIDN97FFltym8dbukg3IrpWHGvDidx88osNJc/D5ea0uc5CQ1OBS1zConlgNSgcg7a4W5RD53r
azIJwmxp5Q==
</ds:SignatureValue>
<ds:KeyInfo><wsse:SecurityTokenReference><wsse:Reference URI="#CertId-130748464693857113771608" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"/></wsse:SecurityTokenReference></ds:KeyInfo></ds:Signature><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="CertId-130748464693857113771608">MIIDgzCCAzKgAwIBAgIKG6/jcwACAAKOWDAIBgYqhQMCAgMwZTEgMB4GCSqGSIb3DQEJARYRaW5mb0BjcnlwdG9wcm8ucnUxCzAJBgNVBAYTAlJVMRMwEQYDVQQKEwpDUllQVE8tUFJPMR8wHQYDVQQDExZUZXN0IENlbnRlciBDUllQVE8tUFJPMB4XDTEyMDkxNzIxNDYzN1oXDTE0MTAwNDA3MDk0MVowgboxHjAcBgkqhkiG9w0BCQEWD2luZm9AaXRuLnNwYi5ydTELMAkGA1UEBhMCUlUxJjAkBgNVBAcMHdCh0LDQvdC60YIt0J/QtdGC0LXRgNCx0YPRgNCzMTswOQYDVQQKDDLQmNC90YHQuNGC0YPRgiDQodC10YLQtdCy0YvRhSDQotC10YXQvdC+0LvQvtCz0LjQuTEmMCQGA1UEAwwd0KLQtdGB0YLQvtCy0YvQuSDRgdC10YDQstC40YEwYzAcBgYqhQMCAhMwEgYHKoUDAgIjAQYHKoUDAgIeAQNDAARAhkf4NXr2rxyGlgL6i27S+Kqtl4C4bfZWv1c6ACnuAGwcbHtp7yKrpSEgX79K7U/CE/gWfjuWvnEJ6/7tss1AvqOCAWowggFmMAsGA1UdDwQEAwIF4DAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwHQYDVR0OBBYEFBTCcoxTYXTMPj4waQYcQep9g/JCMB8GA1UdIwQYMBaAFG2PXgXZX6yRF5QelZoFMDg3ehAqMFUGA1UdHwROMEwwSqBIoEaGRGh0dHA6Ly93d3cuY3J5cHRvcHJvLnJ1L0NlcnRFbnJvbGwvVGVzdCUyMENlbnRlciUyMENSWVBUTy1QUk8oMikuY3JsMIGgBggrBgEFBQcBAQSBkzCBkDAzBggrBgEFBQcwAYYnaHR0cDovL3d3dy5jcnlwdG9wcm8ucnUvb2NzcG5jL29jc3Auc3JmMFkGCCsGAQUFBzAChk1odHRwOi8vd3d3LmNyeXB0b3Byby5ydS9DZXJ0RW5yb2xsL3BraS1zaXRlX1Rlc3QlMjBDZW50ZXIlMjBDUllQVE8tUFJPKDIpLmNydDAIBgYqhQMCAgMDQQCZ5U03aFYNNsbGio+eIwPwC/KaF9oxNnMhTz6lijnVrLSKmea6d7znpcJWgDwaaf+r4XfMUzUHREHGXsZVFy5u</wsse:BinarySecurityToken></wsse:Security></soapenv:Header><soapenv:Body wsu:Id="body" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<ns9:UnifoTransferMsg xmlns:ns9="http://roskazna.ru/SmevUnifoService/" xmlns:ns2="http://www.w3.org/2000/09/xmldsig#" xmlns:ns3="http://smev.gosuslugi.ru/rev110801" xmlns:ns4="http://roskazna.ru/xsd/PGU_ImportRequest" xmlns:ns5="http://rosrazna.ru/xsd/SmevUnifoService" xmlns:ns6="http://roskazna.ru/xsd/Ticket" xmlns:ns7="http://roskazna.ru/xsd/PGU_DataRequest" xmlns:ns8="http://www.w3.org/2004/08/xop/include">
<ns3:Message>
<ns3:Sender>
<ns3:Code>0000000001</ns3:Code>
<ns3:Name>External Organization</ns3:Name>
</ns3:Sender>
<ns3:Recipient>
<ns3:Code>0000000000</ns3:Code>
<ns3:Name>UNIFO</ns3:Name>
</ns3:Recipient>
<ns3:Originator>
<ns3:Code>0000000001</ns3:Code>
<ns3:Name>External Organization</ns3:Name>
</ns3:Originator>
<ns3:TypeCode>Request</ns3:TypeCode>
<ns3:Date>2011-09-09T16:15:39.200+04:00</ns3:Date>
</ns3:Message>
<ns3:MessageData>
<ns3:AppData>
<ns5:exportData>
<ns7:DataRequest kind="CHARGE">
<PostBlock>
<ID>444</ID>
<TimeStamp>2011-09-09T16:15:39.201+04:00</TimeStamp>
<SenderIdentifier>044525716</SenderIdentifier>
</PostBlock>
<Payers>
<PayerIdentifier>67CE036679</PayerIdentifier>
</Payers>
</ns7:DataRequest>
</ns5:exportData>
</ns3:AppData>
</ns3:MessageData>
</ns9:UnifoTransferMsg>
</soapenv:Body>
</soapenv:Envelope>
Отправляю его на вышеуказанный сервис проверки подписи (см. http://www.cryptopro.ru/forum2/....aspx?g=posts&t=5207), где vsrType.setIsCertCheck(true);. Получаю код ошибки 11 (= Не установлен доверенный сертификат. Не удается отследить цепочку сертификации сертификата подписи). В чём может быть ошибка? Игорь.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,977 Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 708 раз в 669 постах
|
Судя по ответному сообщению, происходит попытка проверить цепочку сертификатов на сервере, причем корневой сертификат Тестового УЦ там не установлен в доверенные (вы требуете проверить сертификат vsrType.setIsCertCheck(true)). Задайте setIsCertCheck(false). Отредактировано пользователем 18 сентября 2012 г. 21:28:09(UTC)
| Причина: Не указана |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 10.09.2012(UTC) Сообщений: 7 Откуда: Санкт-Петербург
|
Если я ставлю false, то сервис возвращает 0 (Ок), даже если soap-пакеты подписываются самосгенерённым сертификатом. Поэтому, хочется проверить, как будет в боевом варианте. Если, как Вы говорите, Цитата:корневой сертификат Тестового УЦ там не установлен в доверенные можно ли где-то найти подобный сервис, который бы подписывал запрсы на тестовые сертификаты (наподобие http://www.cryptopro.ru/certsrv/), а затем проверял бы soap-пакеты, подписанные этими тестовыми сертификатами (наподобие http://188.254.16.92:7777/gateway/services/SID0003038)?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,977 Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 708 раз в 669 постах
|
В боевом режиме можно проверить, если использовать ключ и сертификат, выпущенный настоящим УЦ. На счет других сервисов не в курсе. |
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close