SignedXml אינו מטפל כיאות בתכונות מרחב שמות xml

מאפייני הבעיה

אין אפשרות לאמת את חתימת ה-xml הדומה לזו מתחת על-ידי המחלקה SignedXml.

<tns:CertificateStatusResponse xmlns="" xmlns:dpfunc="" xml:id="response">
<tns:ReturnCode>00</tns:ReturnCode>
<tns:ReturnText>OK</tns:ReturnText>
<tns:CertificateStatus>
  <tns:CertificateSerialNo>3419000000001401</tns:CertificateSerialNo>
  <tns:CertificateType>signing</tns:CertificateType>
  <tns:MatchingCertificateSerialNo>3419000000001402</tns:MatchingCertificateSerialNo>
  <tns:Status><tns:revoked revocationDate="2011-01-21T10:12:04Z" CRLReason="1"/></tns:Status>
</tns:CertificateStatus>
<tns:Timestamp>2011-02-02T14:53:47Z</tns:Timestamp>
<tns:RequestId>hls=</tns:RequestId>
< xmlns חתימה = "#" >
<SignedInfo>
< אלגוריתם CanonicalizationMethod = ">
< אלגוריתם SignatureMethod = ">
< הפניית URI = "#response" >
    <Transforms>
< צורה של אלגוריתם = ">
< צורה של אלגוריתם = ">
    </Transforms>
< אלגוריתם DigestMethod = ">
    <DigestValue>4hTmTRbInGChuyeqoRs06Tug30s=</DigestValue>
  </Reference>
</SignedInfo>
<SignatureValue>jHG4+lRvqs1g8ZRLCdND7lT7qFQr6YnzQ...</SignatureValue>
<KeyInfo>
 <X509Data>
   <X509Certificate>MIIEADCCAuigAwIBAgIFAMa3vBEwDQYJKoZIhvcNAQELB...</X509Certificate>
  </X509Data>
</KeyInfo>
</Signature>
</tns:CertificateStatusResponse>

הגורם

כאשר SignedXml.CheckSignature() מנסה לאמת את החתימה canonicalizes הצומת SignedInfo ואת יורש תכונות מרחב שמות xml באופן שגוי. במקרה זה xml:id בירושה אל SignedInfo אשר אינה צריכה להתרחש פוסלת את החתימה.

פתרון

ב- .NET 4.0, פעולה זו ניתן לתקן על-ידי רישום המרה מותאמת אישית עבור אלגוריתם האחדת שמות. המרה מותאמת אישית הסמכות לביצוע להמרה Exc14N מוכללת ולאחר רצועות החוצה תכונת טווח השמות של xml.

המחלקה המרה מותאמת אישית הוא קצר מאוד ישר קדימה.
המחלקה הציבורית MyXmlDsigExcC14NTransform: XmlDsigExcC14NTransform
{
{} MyXmlDsigExcC14NTransform() ציבורית

void LoadInput(Object obj) עקיפה ציבורית
   {           
הבסיס XmlElement = (אובייקטי (XmlDocument)). DocumentElement;
אם (הבסיס. שם = = "SignedInfo") הבסיס. RemoveAttribute("xml:id");
בסיס. LoadInput(obj);
   }
}

בתחילתה של היישום שלך MyXmlDsigExcC14NTransform ניתן לרשום את השיחה הבאה:
CryptoConfig.AddAlgorithm(typeof(MyXmlDsigExcC14NTransform), "");

כאשר SignedXml.CheckSignature() נקרא, MyXmlDsigExcC14NTransform נקרא לבצע האחדת שמות אשר רצועות החוצה התכונה xml:id.

זקוק לעזרה נוספת?

הרחב את הכישורים שלך
סייר בהדרכה
קבל תכונות חדשות לפני כולם
הצטרף למשתתפי Microsoft insider

האם מידע זה היה שימושי?

תודה על המשוב!

תודה על המשוב! נראה שכדאי לקשר אותך לאחד מנציגי התמיכה של Office.

×