Статус: Участник
Группы: Участники
Зарегистрирован: 26.12.2014(UTC) Сообщений: 15 Сказал(а) «Спасибо»: 1 раз
|
Автор: strelok671 Автор: Zet Здравтсвуйте. Сегодня отправлял сообщения, раньше все норманльно было, а вот час отправляю ошибка приходит. Вы не сталкивались с таким? com.otr.sufd.cryptowebservice.FaultMessage: UNKNOWN error: com.otr.cryptonew.jcaimpl.mcabridge.MCAError: CertCreateCertificateContext: Not enough storage is available to complete this operation. (0x8007000e) Если фидлером отправлять сообщение этоже раз 15 приходит ошибка com.otr.sufd.cryptowebservice.FaultMessage: SIGN_ERROR error: Ошибка подписи. Изначально ошибка происходит из-за ошибки подписи?
Честно говоря, я один раз отладился и забыл. Такой ошибки вроде не было, но явно что-то сломалось на сервере. Вопрос к смэву или казначейству. Да у них что-то было.
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 26.12.2014(UTC) Сообщений: 15 Сказал(а) «Спасибо»: 1 раз
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 26.12.2014(UTC) Сообщений: 15 Сказал(а) «Спасибо»: 1 раз
|
Автор: strelok671 Автор: Zet Здравтсвуйте. Сегодня отправлял сообщения, раньше все норманльно было, а вот час отправляю ошибка приходит. Вы не сталкивались с таким? com.otr.sufd.cryptowebservice.FaultMessage: UNKNOWN error: com.otr.cryptonew.jcaimpl.mcabridge.MCAError: CertCreateCertificateContext: Not enough storage is available to complete this operation. (0x8007000e) Если фидлером отправлять сообщение этоже раз 15 приходит ошибка com.otr.sufd.cryptowebservice.FaultMessage: SIGN_ERROR error: Ошибка подписи. Изначально ошибка происходит из-за ошибки подписи?
Честно говоря, я один раз отладился и забыл. Такой ошибки вроде не было, но явно что-то сломалось на сервере. Вопрос к смэву или казначейству. Снова здравствуйте! У меня к вам вопрос. Вот когда вы отправляете платеж по существующему начислению и потом запрашиваете по вернувшемуся ID статус пакета у вас все нормально проходит?
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 16.12.2014(UTC) Сообщений: 21 Откуда: Москва Сказал(а) «Спасибо»: 1 раз Поблагодарили: 2 раз в 2 постах
|
Автор: Zet Снова здравствуйте! У меня к вам вопрос. Вот когда вы отправляете платеж по существующему начислению и потом запрашиваете по вернувшемуся ID статус пакета у вас все нормально проходит?
Да, тест прошли нормально.
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 26.12.2014(UTC) Сообщений: 15 Сказал(а) «Спасибо»: 1 раз
|
Автор: strelok671 Автор: Zet Снова здравствуйте! У меня к вам вопрос. Вот когда вы отправляете платеж по существующему начислению и потом запрашиваете по вернувшемуся ID статус пакета у вас все нормально проходит?
Да, тест прошли нормально. Вот час на сервере включили проверку ЭП. У вас пакеты принимаются нормально? Можете показать соап пакет отправляемых данных, чтобы сравнить тэги, если не трудно? Отредактировано пользователем 26 февраля 2015 г. 14:57:56(UTC)
| Причина: Не указана
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 09.11.2011(UTC) Сообщений: 9
Сказал(а) «Спасибо»: 1 раз Поблагодарили: 2 раз в 2 постах
|
день добрый! Удалось ли кому-нибудь реализовать взаимодействие с ГИС ГМП версии 1.16.1 после того, как они включили проверку подписи? в настоящий момент начисление отправляется, но при запросе статуса обработки получаю "ЭП под сущностью неверна". в для подписывания использовал код из этой темы от maxdm код следующий: Код:
public override object BeforeSendRequest(ref Message request, System.ServiceModel.IClientChannel channel)
{
var xml = GetMessageXml(request);
var elements = xml.GetElementsByTagName("Charge");
if (elements.Count > 0)
XadesSignatureHelper.SignElement(elements[0], Certificates.Authority);
RebuildMessage(ref request, xml);
return null;
}
и сам XadesSignatureHelper (за основу брал Xades-master\Source\TestClient\MainForm.cs): Код:
public class XadesSignatureHelper
{
public static void SignElement(XmlNode elementToSign, X509Certificate2 certificate)
{
if (elementToSign == null)
throw new ArgumentNullException("elementToSign");
if (elementToSign.Attributes == null)
throw new ArgumentOutOfRangeException("elementToSign", "elementToSign.Attributes == null");
var attr = elementToSign.Attributes["Id"];
if (attr == null)
throw new ArgumentOutOfRangeException("elementToSign", "elementToSign не имеет атрибут Id");
var chargeId = attr.Value;
//var xadesSignedXml = new XadesSignedXml(envelopedSignatureXmlDocument);
var tmpDoc = new XmlDocument() { PreserveWhitespace = true };
tmpDoc.AppendChild(tmpDoc.ImportNode(elementToSign, true));
var xadesSignedXml = new XadesSignedXml(tmpDoc);
var reference = new Reference
{
DigestMethod = "http://www.w3.org/2001/04/xmldsig-more#gostr3411",
Uri = "#" + chargeId
};
reference.AddTransform(new XmlDsigEnvelopedSignatureTransform());
reference.AddTransform(new XmlDsigExcC14NTransform());
xadesSignedXml.AddReference(reference);
//----------------------AddCertificateInfoToSignature
var key = certificate.PrivateKey;
if (key == null)
throw new ApplicationException("PrivateKey == null");
xadesSignedXml.SigningKey = key;
var keyInfo = new KeyInfo();
keyInfo.AddClause(new KeyInfoX509Data((X509Certificate)certificate));
//keyInfo.AddClause(new RSAKeyValue((RSACryptoServiceProvider)key));
xadesSignedXml.KeyInfo = keyInfo;
//----------------------addXadesInfoButton_Click
xadesSignedXml.Signature.Id = "signatureId";
var xadesObject = new XadesObject { Id = "XadesObject", QualifyingProperties = { Target = "#signatureId" } };
AddSignedSignatureProperties(
xadesObject.QualifyingProperties.SignedProperties.SignedSignatureProperties,
xadesObject.QualifyingProperties.SignedProperties.SignedDataObjectProperties,
xadesObject.QualifyingProperties.UnsignedProperties.UnsignedSignatureProperties,
certificate);
xadesSignedXml.AddXadesObject(xadesObject);
//----------------computeSignatureButton_Click
xadesSignedXml.SignedInfo.SignatureMethod = "http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411";
xadesSignedXml.SignedInfo.CanonicalizationMethod = new XmlDsigExcC14NTransform().Algorithm;
xadesSignedXml.ComputeSignature();
xadesSignedXml.SignatureValueId = "signatureValueId";
//----------------------
#region requestTimeStampButton_Click
if (xadesSignedXml.SignatureStandard == KnownSignatureStandard.Xades)
{
try
{
var httpTSAClient = new HttpTsaClient();
httpTSAClient.RequestTsaCertificate = true; // this.tsaCertificateInResponseCheckBox.Checked;
var signatureValueElementXpaths = new ArrayList {"ds:SignatureValue"};
var elementIdValues = new ArrayList();
var signatureValueHash = httpTSAClient.ComputeHashValueOfElementList(xadesSignedXml.GetXml(),
signatureValueElementXpaths,
ref elementIdValues);
httpTSAClient.SendTsaWebRequest("http://testca.cryptopro.ru/tsp/tsp.srf", signatureValueHash);
var tsaResponsePkiStatus = httpTSAClient.ParseTsaResponse();
if (tsaResponsePkiStatus == KnownTsaResponsePkiStatus.Granted)
{
var signatureTimeStamp = new TimeStamp("SignatureTimeStamp")
{
EncapsulatedTimeStamp =
{
Id = "SignatureTimeStampId",
PkiData = httpTSAClient.TsaTimeStamp
}
};
// this.signatureTimeStampIdTextBox.Text;
var hashDataInfo = new HashDataInfo {UriAttribute = "#" + elementIdValues[0]};
signatureTimeStamp.HashDataInfoCollection.Add(hashDataInfo);
var unsignedProperties = xadesSignedXml.UnsignedProperties;
unsignedProperties.UnsignedSignatureProperties.SignatureTimeStampCollection.Add(signatureTimeStamp);
xadesSignedXml.UnsignedProperties = unsignedProperties;
var xml = xadesSignedXml.XadesObject.GetXml();
var xml1 = xadesSignedXml.GetXml();
elementToSign.AppendChild(elementToSign.OwnerDocument.ImportNode(xadesSignedXml.GetXml(), true));
}
else
throw new ApplicationException("TSA timestamp request not granted: " + tsaResponsePkiStatus.ToString());
}
catch (Exception exception)
{
throw new ApplicationException("Exception occurred during TSA timestamp request: " + exception.ToString());
}
}
else
throw new ApplicationException(
"Signature standard should be XAdES. (You need to add XAdES info before computing the signature to be able to inject a timestamp)");
#endregion requestTimeStampButton_Click
//-------------------------------------------------
}
private static void AddSignedSignatureProperties(SignedSignatureProperties signedSignatureProperties, SignedDataObjectProperties signedDataObjectProperties,
UnsignedSignatureProperties unsignedSignatureProperties, X509Certificate2 certificate)
{
XmlDocument xmlDocument;
Cert cert;
//xmlDocument = new XmlDocument();
cert = new Cert();
cert.IssuerSerial.X509IssuerName = certificate.IssuerName.Name;
cert.IssuerSerial.X509SerialNumber = certificate.SerialNumber;
cert.CertDigest.DigestMethod.Algorithm = SignedXml.XmlDsigSHA1Url;
cert.CertDigest.DigestValue = certificate.GetCertHash();
signedSignatureProperties.SigningCertificate.CertCollection.Add(cert);
signedSignatureProperties.SigningTime = DateTime.Now;
signedSignatureProperties.SignaturePolicyIdentifier.SignaturePolicyImplied = true;
}
}
так же в коде XadesSignedXml.cs внёс правки (в контрольных примерах от ГИС ГМП такие версии): Код:
public const string XadesNamespaceUri = "http://uri.etsi.org/01903/v1.1.1#"; // было "http://uri.etsi.org/01903/v1.3.2#";
public const string SignedPropertiesType = "http://uri.etsi.org/01903/v1.1.1#SignedProperties"; // было "http://uri.etsi.org/01903/v1.3.2#SignedProperties";
просьба намекнуть в какую сторону копать)
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 26.12.2014(UTC) Сообщений: 15 Сказал(а) «Спасибо»: 1 раз
|
Автор: kkklll день добрый! Удалось ли кому-нибудь реализовать взаимодействие с ГИС ГМП версии 1.16.1 после того, как они включили проверку подписи? в настоящий момент начисление отправляется, но при запросе статуса обработки получаю "ЭП под сущностью неверна". в для подписывания использовал код из этой темы от maxdm код следующий: Код:
public override object BeforeSendRequest(ref Message request, System.ServiceModel.IClientChannel channel)
{
var xml = GetMessageXml(request);
var elements = xml.GetElementsByTagName("Charge");
if (elements.Count > 0)
XadesSignatureHelper.SignElement(elements[0], Certificates.Authority);
RebuildMessage(ref request, xml);
return null;
}
и сам XadesSignatureHelper (за основу брал Xades-master\Source\TestClient\MainForm.cs): Код:
public class XadesSignatureHelper
{
public static void SignElement(XmlNode elementToSign, X509Certificate2 certificate)
{
if (elementToSign == null)
throw new ArgumentNullException("elementToSign");
if (elementToSign.Attributes == null)
throw new ArgumentOutOfRangeException("elementToSign", "elementToSign.Attributes == null");
var attr = elementToSign.Attributes["Id"];
if (attr == null)
throw new ArgumentOutOfRangeException("elementToSign", "elementToSign не имеет атрибут Id");
var chargeId = attr.Value;
//var xadesSignedXml = new XadesSignedXml(envelopedSignatureXmlDocument);
var tmpDoc = new XmlDocument() { PreserveWhitespace = true };
tmpDoc.AppendChild(tmpDoc.ImportNode(elementToSign, true));
var xadesSignedXml = new XadesSignedXml(tmpDoc);
var reference = new Reference
{
DigestMethod = "http://www.w3.org/2001/04/xmldsig-more#gostr3411",
Uri = "#" + chargeId
};
reference.AddTransform(new XmlDsigEnvelopedSignatureTransform());
reference.AddTransform(new XmlDsigExcC14NTransform());
xadesSignedXml.AddReference(reference);
//----------------------AddCertificateInfoToSignature
var key = certificate.PrivateKey;
if (key == null)
throw new ApplicationException("PrivateKey == null");
xadesSignedXml.SigningKey = key;
var keyInfo = new KeyInfo();
keyInfo.AddClause(new KeyInfoX509Data((X509Certificate)certificate));
//keyInfo.AddClause(new RSAKeyValue((RSACryptoServiceProvider)key));
xadesSignedXml.KeyInfo = keyInfo;
//----------------------addXadesInfoButton_Click
xadesSignedXml.Signature.Id = "signatureId";
var xadesObject = new XadesObject { Id = "XadesObject", QualifyingProperties = { Target = "#signatureId" } };
AddSignedSignatureProperties(
xadesObject.QualifyingProperties.SignedProperties.SignedSignatureProperties,
xadesObject.QualifyingProperties.SignedProperties.SignedDataObjectProperties,
xadesObject.QualifyingProperties.UnsignedProperties.UnsignedSignatureProperties,
certificate);
xadesSignedXml.AddXadesObject(xadesObject);
//----------------computeSignatureButton_Click
xadesSignedXml.SignedInfo.SignatureMethod = "http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411";
xadesSignedXml.SignedInfo.CanonicalizationMethod = new XmlDsigExcC14NTransform().Algorithm;
xadesSignedXml.ComputeSignature();
xadesSignedXml.SignatureValueId = "signatureValueId";
//----------------------
#region requestTimeStampButton_Click
if (xadesSignedXml.SignatureStandard == KnownSignatureStandard.Xades)
{
try
{
var httpTSAClient = new HttpTsaClient();
httpTSAClient.RequestTsaCertificate = true; // this.tsaCertificateInResponseCheckBox.Checked;
var signatureValueElementXpaths = new ArrayList {"ds:SignatureValue"};
var elementIdValues = new ArrayList();
var signatureValueHash = httpTSAClient.ComputeHashValueOfElementList(xadesSignedXml.GetXml(),
signatureValueElementXpaths,
ref elementIdValues);
httpTSAClient.SendTsaWebRequest("http://testca.cryptopro.ru/tsp/tsp.srf", signatureValueHash);
var tsaResponsePkiStatus = httpTSAClient.ParseTsaResponse();
if (tsaResponsePkiStatus == KnownTsaResponsePkiStatus.Granted)
{
var signatureTimeStamp = new TimeStamp("SignatureTimeStamp")
{
EncapsulatedTimeStamp =
{
Id = "SignatureTimeStampId",
PkiData = httpTSAClient.TsaTimeStamp
}
};
// this.signatureTimeStampIdTextBox.Text;
var hashDataInfo = new HashDataInfo {UriAttribute = "#" + elementIdValues[0]};
signatureTimeStamp.HashDataInfoCollection.Add(hashDataInfo);
var unsignedProperties = xadesSignedXml.UnsignedProperties;
unsignedProperties.UnsignedSignatureProperties.SignatureTimeStampCollection.Add(signatureTimeStamp);
xadesSignedXml.UnsignedProperties = unsignedProperties;
var xml = xadesSignedXml.XadesObject.GetXml();
var xml1 = xadesSignedXml.GetXml();
elementToSign.AppendChild(elementToSign.OwnerDocument.ImportNode(xadesSignedXml.GetXml(), true));
}
else
throw new ApplicationException("TSA timestamp request not granted: " + tsaResponsePkiStatus.ToString());
}
catch (Exception exception)
{
throw new ApplicationException("Exception occurred during TSA timestamp request: " + exception.ToString());
}
}
else
throw new ApplicationException(
"Signature standard should be XAdES. (You need to add XAdES info before computing the signature to be able to inject a timestamp)");
#endregion requestTimeStampButton_Click
//-------------------------------------------------
}
private static void AddSignedSignatureProperties(SignedSignatureProperties signedSignatureProperties, SignedDataObjectProperties signedDataObjectProperties,
UnsignedSignatureProperties unsignedSignatureProperties, X509Certificate2 certificate)
{
XmlDocument xmlDocument;
Cert cert;
//xmlDocument = new XmlDocument();
cert = new Cert();
cert.IssuerSerial.X509IssuerName = certificate.IssuerName.Name;
cert.IssuerSerial.X509SerialNumber = certificate.SerialNumber;
cert.CertDigest.DigestMethod.Algorithm = SignedXml.XmlDsigSHA1Url;
cert.CertDigest.DigestValue = certificate.GetCertHash();
signedSignatureProperties.SigningCertificate.CertCollection.Add(cert);
signedSignatureProperties.SigningTime = DateTime.Now;
signedSignatureProperties.SignaturePolicyIdentifier.SignaturePolicyImplied = true;
}
}
так же в коде XadesSignedXml.cs внёс правки (в контрольных примерах от ГИС ГМП такие версии): Код:
public const string XadesNamespaceUri = "http://uri.etsi.org/01903/v1.1.1#"; // было "http://uri.etsi.org/01903/v1.3.2#";
public const string SignedPropertiesType = "http://uri.etsi.org/01903/v1.1.1#SignedProperties"; // было "http://uri.etsi.org/01903/v1.3.2#SignedProperties";
просьба намекнуть в какую сторону копать) Если вы брали за основу XadesSignedXml который сделан подразделением майкрософт, то он не правильно считает сигнатуру. Я не знаю почему это так. Используйте просто SignedXml который библиотечный и там сами дописывайте тэги для формирования подписи Xades
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 16.12.2014(UTC) Сообщений: 21 Откуда: Москва Сказал(а) «Спасибо»: 1 раз Поблагодарили: 2 раз в 2 постах
|
Наконец-то ответили разработчики криптосервиса. Ошибка из-за того, что для формирования штампа времени использовалась функция sha-1 вместо госта. Пока не разбирался как исправить, просто занят другой задачей.
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 09.11.2011(UTC) Сообщений: 9
Сказал(а) «Спасибо»: 1 раз Поблагодарили: 2 раз в 2 постах
|
Автор: strelok671 Наконец-то ответили разработчики криптосервиса. Ошибка из-за того, что для формирования штампа времени использовалась функция sha-1 вместо госта. Пока не разбирался как исправить, просто занят другой задачей. Это про результат от "http://testca.cryptopro.ru/tsp/tsp.srf" или ещё про что-то? просто что касается TSA сервера, (пока для теста) то казна сказала: «Федеральное казначейство не предоставляет собственный TSA-сервер для простановки метки времени. Участники могут использовать любой сертифицированный TSA-сервер»
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 16.12.2014(UTC) Сообщений: 21 Откуда: Москва Сказал(а) «Спасибо»: 1 раз Поблагодарили: 2 раз в 2 постах
|
Автор: kkklll Автор: strelok671 Наконец-то ответили разработчики криптосервиса. Ошибка из-за того, что для формирования штампа времени использовалась функция sha-1 вместо госта. Пока не разбирался как исправить, просто занят другой задачей. Это про результат от "http://testca.cryptopro.ru/tsp/tsp.srf" или ещё про что-то? просто что касается TSA сервера, (пока для теста) то казна сказала: «Федеральное казначейство не предоставляет собственный TSA-сервер для простановки метки времени. Участники могут использовать любой сертифицированный TSA-сервер» Нет, это про формирование хеш функции для штампа времени с помощью microsoft.xades. Там не хватает атрибутов, нужных для гостового хеша, а без атрибутов получается использовать только sha-1. Для правильной подписи гостом придется либо дорабатывать их классы, либо формировать атрибуты вручную.
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close