SignedXmlクラスを使用してC#でXml(実際にはSOAP xml)に署名しようとしていますが、署名段階は正常に通過しますが、署名を検証しようとすると、無効であると表示されます。トランスフォームXmlDsigEnvelopedSignatureTransformの代わりにXmlDsigExcC14NTransformを使用した、MSDNの例から行った唯一の変更。XmlDsigEnvelopedSignatureTransformを使用すると、有効な署名が取得されます。
これが私の署名コードです:
private static XmlDocument SignXml(XmlDocument doc)
{
SignedXml signedXml = new SignedXml(doc);
signedXml.SigningKey = Certificate.PrivateKey;
Reference reference = new Reference();
reference.Uri = "";
XmlDsigEnvelopedSignatureTransform env = new XmlDsigEnvelopedSignatureTransform();
//XmlDsigExcC14NTransform env = new XmlDsigExcC14NTransform();
reference.AddTransform(env);
signedXml.AddReference(reference);
signedXml.ComputeSignature();
XmlElement signature = signedXml.GetXml();
doc.DocumentElement.AppendChild(signature);
doc.Save(SignedXmlPath);
return doc;
}
上記のコードは私に有効な署名を与えますが、私が使用する場合
XmlDsigExcC14NTransform env = new XmlDsigExcC14NTransform();
それ以外の
XmlDsigEnvelopedSignatureTransform env = new XmlDsigEnvelopedSignatureTransform();
無効な署名を取得します。
これが私の確認コードです:
private static bool Verify(XmlDocument doc)
{
SignedXml signedDoc = new SignedXml(doc);
XmlNodeList nodeList = doc.GetElementsByTagName(Constants.SignatureElement);
signedDoc.LoadXml((XmlElement)nodeList[0]);
return signedDoc.CheckSignature((RSA)Certificate.PublicKey.Key);
}
の変換アルゴリズムで署名する方法を教えてもらえますかhttp://www.w3.org/2001/10/xml-exc-c14n#
前もって感謝します。