Platforma podpisywania cyfrowego konwencji open packaging

 

David Meltzer i Andrey Shur
Microsoft Corporation

Wrzesień 2006 r.

Dotyczy:
   OPC Digital Signing Framework
   Standard podpisu cyfrowego W3C XML
   Microsoft .NET 3.0 Framework

Podsumowanie: omawia platformę podpisywania cyfrowego OPC, zapewniając przegląd składników pakietu i usług pomocniczych oraz przykłady zasad podpisywania i jej implementacji. (12 stron drukowanych)

Zawartość

Wprowadzenie
Składniki struktury podpisywania cyfrowego OPC
   Standard podpisu cyfrowego XML
   Reprezentowanie podpisów cyfrowych w pakietach
   Podpisywanie części i relacji
Obsługa programowania dla podpisów pakietów
   Podpisywanie części pakietów i relacji
   Weryfikowanie certyfikatów i podpisów
Zasady podpisywania aplikacji
   Dokumenty XPS
   Obsługa programowania dla podpisów XPS
Odwołania

Wprowadzenie

Model pakowania określony przez konwencje open packaging (OPC) opisuje pakiety, części i relacje. Pakiety przechowują części, które przechowują zawartość i zasoby. Relacje są definiowane w celu połączenia pakietu z częściami i łączenia różnych części w pakiecie.

W tym artykule omówiono platformę podpisywania cyfrowego OPC, zapewniając przegląd składników pakietu i usług pomocniczych oraz przykłady zasad podpisywania i jej implementacji.

Struktura podpisywania zawiera infrastrukturę do reprezentowania podpisów cyfrowych oraz usług do tworzenia i weryfikowania podpisów. Struktura podpisywania umożliwia stosowanie standardu W3C XML Digital Signature do części pakietów i relacji.

Korzystając z platformy podpisywania, właściciele formatów opartych na pakietach definiują i implementują zasady podpisywania specyficzne dla ich formatów. Zasady określają sposób podpisywania i weryfikowania całkowitej zawartości określonych formatów oraz uosabiania sposobu użycia podpisów dla różnych przepływów pracy. W rzeczywistości w przypadku pojedynczego formatu może istnieć kilka zasad zdefiniowanych do użycia na różnych etapach cyklu życia dokumentu.

Zasady podpisywania dla formatu opartego na pakiecie są wyrażane pod względem podpisywania części i relacji oraz ewentualnie innych cech dokumentu (takich jak walidacja zamierzonego urządzenia wyświetlania, głębokości kolorów lub wersji aplikacji). Zasady podpisywania określają, które składniki dokumentu mają być podpisywane i które należy pozostawić bez znaku, jeśli istnieją. Można na przykład zaimplementować zasady podpisywania, aby umożliwić dodawanie nowych części i relacji do pakietu lub zasady mogą spowodować unieważnienie podpisu, jeśli nowe części lub podpisy zostaną dodane do pakietu.

W tym artykule przyjęto założenie, że znajomość specyfikacji Open Packaging Conventions oraz rekomendacji W3C XML-Signature Składnia i przetwarzanie.

Składniki struktury podpisywania cyfrowego OPC

Standard podpisu cyfrowego XML

Struktura podpisywania dla pakietów używa standardu PODPISU cyfrowego XML zgodnie z definicją w składni i przetwarzaniu rekomendacji W3C XML-Signature. To zalecenie określa reguły składni i przetwarzania XML do tworzenia i przechowywania podpisów cyfrowych.

Standard definiuje typ elementu podpisu XML, schemat i wymagania zgodności dotyczące podpisywania i weryfikowania dowolnego rodzaju zasobu cyfrowego. Schemat definiuje również elementy służące do odwoływania się do zasobów i określania algorytmów związanych z podpisem.

Funkcje podpisów cyfrowych

Podpis cyfrowy może służyć do określenia, czy podpisana zawartość została zmieniona od momentu podpisania. Podpis zawiera manifest zawartości, który jest skrótem zgodnie z dobrze znanym algorytmem i przechowywanym w podpisie podczas tworzenia. Aby określić, czy zawartość uległa zmianie, skrót podpisanej zawartości jest ponownie utworzony i porównywany z skrótem przechowywanym w podpisie.

Podpis cyfrowy może również służyć do identyfikowania podpisywania zawartości. Tożsamość podpisywania jest reprezentowana przez certyfikat skojarzony z podpisem. Certyfikat może być osadzony w podpisie lub dostępny w innym miejscu.

Podpis cyfrowy nie blokuje dokumentu ani nie powoduje jego zaszyfrowania (chociaż może być już zaszyfrowany). Zawartość dokumentu pozostaje niezmieniona po podpisaniu. Podpisy cyfrowe nie uniemożliwiają wyświetlania podpisanej zawartości przez niezamierzonych użytkowników.

Reprezentowanie podpisów cyfrowych w pakietach

Aplikacje zawierają podpisy cyfrowe w pakiecie przy użyciu określonej konfiguracji części i relacji.

Struktura podpisywania używa elementów i atrybutów z przestrzeni nazw pakietów, gdzie jest to dozwolone przez standard podpisu cyfrowego XML. Elementy podpisu zdefiniowane w przestrzeni nazw pakietów obsługują funkcje specyficzne dla pakietu, które rozszerzają standard bez zaprzeczania temu. Aby uzyskać podsumowanie dodatków, zobacz sekcję "Modyfikacje specyfikacji podpisu cyfrowego XML" specyfikacji OPC.

Części pakietu zdefiniowane dla platformy podpisywania to część źródłowa, część Podpis XML i część Certyfikat. Każdy z nich ma dobrze zdefiniowany typ zawartości. Dobrze zdefiniowane typy relacji są używane do łączenia części podpisów w pakiecie, jak określono w dodatku H, "Standardowe przestrzenie nazw i typy zawartości", specyfikacji OPC.

Część źródła podpisu cyfrowego

Część Źródła podpisu cyfrowego to punkt wyjścia do nawigowania po podpisach w pakiecie. Część Źródło podpisu cyfrowego jest przeznaczona dla katalogu głównego pakietu przy użyciu relacji Źródła podpisu cyfrowego . Wiele części podpisów może być przeznaczonych dla części Origin. Jeśli w pakiecie nie ma podpisów, część Origin nie będzie obecna.

Część podpisu cyfrowego XML

Części podpisu XML podpisu cyfrowego zawierają znaczniki zdefiniowane w standardzie W3C Digital Signature, a także w przestrzeni nazw pakowania. Części są przeznaczone dla części XML źródła podpisu cyfrowego z relacją Podpis cyfrowy .

Część certyfikatu podpisu cyfrowego

Certyfikat X.509 wymagany do identyfikacji osoby podpisającego, jeśli został umieszczony w pakiecie, może zostać osadzony w części Podpis XML lub przechowywany w oddzielnej części certyfikatu. Opcjonalna część Certyfikat jest przeznaczona dla części Podpis XML z relacją Certyfikat podpisu cyfrowego . Część Certyfikat może być współużytkowana między wieloma częściami podpisu.

Niestandardowe części podpisu

Niestandardowe (specyficzne dla aplikacji) części podpisu są dozwolone, ale nie są obsługiwane przez platformę podpisywania. Część podpisu, która zawiera postać podpisu innego niż podpis XML, musi być identyfikowana przez niestandardowy typ zawartości. Ponadto relacja z niestandardowym typem relacji musi być używana do kierowania części ze strony źródła podpisu cyfrowego.

Podpisywanie części i relacji

Standard podpisu cyfrowego XML umożliwia podpisywanie adresowalnych zasobów, które dla pakietu są częściami. Platforma podpisywania umożliwia podpisywanie części. Relacje w pakiecie, przechowywane w części relacji, mogą być podpisane jednocześnie lub podzestaw relacji można określić na potrzeby podpisywania.

Typ zawartości części jest podpisany wraz z zawartością części, aby upewnić się, że część w prawidłowym podpisanym pakiecie będzie używana lub renderowana zgodnie z oczekiwaniami. Ponieważ typ zawartości nie jest zasobem adresowalnym, podejście specyficzne dla pakietu jest podejmowane do podpisywania wartości typu zawartości. Po podpisaniu pakietu typ zawartości każdej podpisanej części jest przechowywany w składniku zapytania identyfikatora URI odwołującego się do podpisanej części. Gdy pakiet jest używany, platforma podpisywania cyfrowego OPC używa wartości typu zawartości, aby upewnić się, że typ zawartości części nie uległ zmianie od momentu podpisania części.

Gdy część relacji jest podpisana jako całość, wszystkie relacje zdefiniowane w tej części są podpisane. Aby obsługiwać zasady podpisywania, które umożliwiają zmianę niektórych zawartości pakietu bez unieważnienia podpisu, platforma podpisywania zapewnia mechanizm podpisywania określonych relacji. Aby podpisać określone relacje, struktura podpisywania używa specjalnej transformacji, transformacji relacji (zobacz Transform Algorithms).

Przekształcenie relacji tworzy część relacji zawierającą tylko określony zestaw relacji. Część uzyskana relacje służy do podpisywania i podczas walidacji podpisu.

Obsługa programowania dla podpisów pakietów

Aby podpisać i zweryfikować podpisy, aplikacje mogą używać klas .NET 3.0 PackageDigitalSignatureManager. Klasy specyficzne dla pakietu zdefiniowane w przestrzeni nazw System.IO.Packaging opierają się na klasach podpisów cyfrowych platformy Microsoft .NET 3.0 Framework zdefiniowanych w przestrzeni nazw System.Security.Cryptography.Xml .

Klasa PackageDigitalSignatureManager służy do tworzenia i weryfikowania podpisów oraz umieszczania infrastruktury podpisów w pakiecie. Podpis jest reprezentowany przez obiekt na podstawie klasy PackageDigitalSignature .

Podpisywanie części pakietów i relacji

Aplikacja definiuje listę części i relacji do podpisania zgodnie z zasadami podpisywania. Następnie aplikacja wywołuje metodę PackageDigitalSignatureManager.Sign() w celu utworzenia podpisu i dodania infrastruktury podpisów do pakietu.

Poniższy przykładowy kod pokazuje podpisywanie wszystkich części pakietu z wyjątkiem części relacji, podpisywanie wszystkich istniejących relacji pochodzących z katalogu głównego pakietu i osadzanie certyfikatu używanego do logowania w części Podpis XML. Przykładowy kod zakłada, że nie istnieją podpisy w pakiecie na początku, a przed weryfikacją zastosowano tylko jeden podpis.

Rozpoczynanie procesu podpisywania

Aby rozpocząć pracę z podpisami w pakiecie, najpierw utwórz element PackageDigitalSignatureManager, jak pokazano poniżej.

    // Open the package.
    Package package = Package.Open(filename);

    // Create the PackageDigitalSignatureManager
      PackageDigitalSignatureManager dsm =
        new PackageDigitalSignatureManager(package);

Opcje osadzania certyfikatu

Certyfikat może być reprezentowany jako ciąg osadzony w samym podpisie jako oddzielna część pakietu lub jako zasób poza pakietem. Jeśli certyfikat ma zostać umieszczony w pakiecie, aplikacja określa sposób utrwalania certyfikatu przy użyciu opcji osadzania właściwości PackageDigitalSignature.CertificateOption . Po utworzeniu klasy PackageDigitalSignatureManager są ustawione opcje osadzania certyfikatu, jak pokazano w poniższym przykładowym kodzie.

    //Specify that the certificate is embedded in the signature held
    //in the XML Signature part.

    //Certificate embedding options include:
    // InSignaturePart – Certificate is embedded in the signature.
    // InCertificatePart – Certificate is embedded in a 
    //                     separate certificate part

    dsm.CertificateOption =
        CertificateEmbeddingOption.InSignaturePart;

Lista podpisanych części

Lista części do podpisania jest określona przy użyciu identyfikatorów URI odnoszących się do części. W tym przykładzie wszystkie części pakietu zostaną podpisane z wyjątkiem części relacji, które są filtrowane przy użyciu metody PackUriHelper.IsRelationshipPartUri().

    //Initialize a list to hold the part URIs to sign.

    System.Collections.Generic.List<Uri> partsToSign =
        new System.Collections.Generic.List<Uri>();

    //Add each part to the list, except relationships parts.
    foreach (PackagePart packagePart in package.GetParts())
    {
        if (!PackUriHelper.IsRelationshipPartUri(packagePart.Uri))
      partsToSign.Add(packagePart.Uri);
  }

Lista podpisanych relacji

Poszczególne relacje są podpisane przy użyciu przekształcenia relacji. Podpisywanie relacji w ten sposób umożliwia dodawanie nowych relacji do pakietu bez unieważniania podpisu.

Relacje są wybierane do podpisywania przez utworzenie listy obiektów PackageRelationshipSelector , które będą używane podczas podpisywania. Obiekty PackageRelationshipSelector można utworzyć jako grupę według typu relacji (zgodnie z definicją w sekcji "Standardowe przestrzenie nazw i typy zawartości" konwencji otwierania pakietów) lub utworzone indywidualnie, określając identyfikator relacji, jak w poniższym przykładzie.

     //Create list of selectors for the list of relationships

     List<PackageRelationshipSelector> relationshipSelectors = 
          new List<PackageRelationshipSelector>();

     //Create one selector for each package-level relationship, based on id

  foreach (PackageRelationship relationship in package.GetRelationships())
            {
                relationshipSelectors.Add(new
                    PackageRelationshipSelector(relationship.sourceUri, 
                    PackageRelationshipSelectorType.Id, relationship.Id));
            }

Podczas tworzenia elementu PackageRelationshipSelector z PackageRelationshipSelectorType.Id zostanie wybrana jedna relacja o określonym unikatowym identyfikatorze do podpisania. Podczas tworzenia selektora z parametrem PackageRelationshipSelectorType.Type wszystkie relacje z określonym typem są wybierane do podpisywania. Jeśli relacje tego samego typu zostaną później dodane do pakietu, podpis zostanie unieważniony.

Tworzenie obiektu certyfikatu

Przed podpisaniem prawidłowy certyfikat X.509 jest uzyskiwany przez utworzenie wystąpienia obiektu typu System.Security.Cryptography.X509Certificates.X509Certificate2. Ten obiekt jest przekazywany do metody PackageDigitalSignatureManager.Sign() podczas podpisywania . Aby uzyskać więcej informacji na temat tworzenia obiektów certyfikatów, zobacz przestrzeń nazw System.Security.Cryptography.X509Certificates .

Stosowanie podpisu

Po utworzeniu listy części i relacji do podpisania i uzyskaniu obiektu certyfikatu aplikacja wywołuje metodę PackageDigitalSignatureManager.Sign().

     //Sign package using components created above

     PackageDigitalSignature signature = dsm.Sign(partsToSign, 
          x509Certificate, relationshipSelectors);

     //After signing, close the package.
     //The signature will be persisted in the package.
     package.Close();

Po wywołaniu metody Sign() skrót jest generowany i przechowywany w manifeście podpisu, a część podpisu jest tworzona. Jeśli infrastruktura sygnatur już istnieje w pakiecie, zostanie dodana nowa część podpisu (jeśli jest dozwolona). Jeśli infrastruktura jeszcze nie istnieje w pakiecie, metoda Sign() tworzy infrastrukturę i umieszcza ją w pakiecie.

Weryfikowanie certyfikatów i podpisów

Aplikacje mogą zweryfikować certyfikat lub podpis. Przed zweryfikowaniem podpisu należy zweryfikować certyfikat. Obiekt reprezentujący podpis w pakiecie PackageDigitalSignature ma właściwość "Signer", która zwraca certyfikat używany do tworzenia tego podpisu, jeśli znajduje się w pakiecie. Jeśli certyfikat nie jest osadzony w pakiecie, aplikacja uzyskuje certyfikat z lokalizacji znanej aplikacji.

Metoda PackageDigitalSignatureManager.VerifyCertificate() służy do weryfikowania uzyskanego certyfikatu, sprawdzania struktury certyfikatu, daty wygaśnięcia i stanu łańcucha. Aby uzyskać więcej informacji na temat stanu łańcucha, zobacz X509ChainStatusFlag Enumeration w bibliotece klas .NET Framework.

Deweloperzy aplikacji mogą używać stanu certyfikatu do obsługi zasad podpisywania. Na przykład aplikacja może określić, że dopuszczalne są tylko certyfikaty wystawione po określonych datach.

Metoda PackageDigitalSignatureManager.VerifySignatures() służy do weryfikowania wszystkich podpisów w pakiecie. Ta metoda weryfikuje tylko podpisy, a nie certyfikaty skojarzone z podpisami.

Poniższy przykładowy kod może służyć do weryfikowania certyfikatu i podpisu umieszczonego w pakiecie w przykładach podpisywania. Przykładowy kod zakłada, że do pakietu nie dodano żadnych dodatkowych podpisów.

    // Open the package.

    Package package = Package.Open(filename);

    // Create the PackageDigitalSignatureManager

    PackageDigitalSignatureManager dsm =
        new PackageDigitalSignatureManager(package);

    // Verify the collection of certificates in the package (one, in this case)

        foreach(PackageDigitalSignature signature in pdsm.Signatures)
        {
        if(PackageDigitalSignatureManager.VerifyCertificate(signature.Signer)
            != X509ChainStatusFlags.NoError)
              {
                // Application-specific code for error handling 
                // or certificate validation 
              }
        }
 
   // For this example, if all certificates are valid,
   // verify all signatures in the package.
 
    VerifyResult vResult = dsm.VerifySignatures(false);
    Console.WriteLine("Result " + vResult.ToString());

    // Close the package.

    package.Close();

Zasady podpisywania aplikacji

Aplikacje korzystające z formatów opartych na pakietach definiują własne zasady w ramach struktury podpisywania. Zasady są określane przez typy elementów i wymagania dotyczące przepływu pracy w formacie. W tej sekcji opisano zasady podpisywania dla jednego formatu opartego na pakiecie firmy Microsoft: formatu dokumentu XPS.

Dokumenty XPS

Format dokumentu XPS jest oparty na konwencjach open packaging, jak określono w specyfikacji papieru XML. Specyfikacja papieru XML definiuje zasady podpisywania dokumentów XPS. W ramach tych zasad dostępne są opcje podpisywania umożliwiające obsługę funkcji aplikacji lub przepływu pracy.

Zasady podpisywania pakietów dokumentów XPS

Zasady podpisywania dla dokumentów XPS opisują zestaw części i relacji, które muszą być podpisane, aby można było zweryfikować zawartość. W ramach tych zasad aplikacja może utworzyć podpis, który opcjonalnie zawiera kombinację określonych części, które są adjunct do zawartości, takie jak część CoreProperties. Podpisywanie tych części uniemożliwi ich zmianę bez unieważnienia podpisu. Ponadto aplikacje mogą opcjonalnie podpisać część relacji dołączoną do części Źródła podpisu cyfrowego w podpisie, uniemożliwiając dodawanie nowych podpisów do dokumentu bez unieważniania podpisu.

Aby podpis był prawidłowy, zasady podpisywania dokumentów XPS wymagają, aby niektóre części i relacje były uwzględniane w podpisie. Nie można podpisać nierozpoznanych części ani relacji. Podczas weryfikowania podpisu aplikacja musi potwierdzić, że wszystkie wymagane części i relacje są podpisane.

Części dokumentów XPS do podpisania

Poniższa tabela zawiera listę części, które muszą być podpisane we wszystkich dokumentach XPS, oraz części, które są opcjonalnie podpisane. W przypadku relacji zasady podpisywania XPS określają, że wymagane relacje (relacje przeznaczone dla wymaganych części) są zawsze podpisane przy użyciu przekształcenia relacji zdefiniowanych przez OPC. Jeśli część jest podpisana, relacje docelowe muszą być również podpisane.

Typ części Zasady
FixedDocumentSequence, część Musi być podpisany
Część FixedDocument Musi być podpisany
Części documentStructure Musi być podpisany
Część SignatureDefinitions Musi być podpisany
Części fixedPage Musi być podpisany
Wymagane części zasobów (takie jak czcionki, obrazy) Musi być podpisany
Części storyFragments Musi być podpisany
Części miniatur Musi być podpisany
Część CoreProperties Opcjonalnie podpisany
Część Źródła podpisu cyfrowego Opcjonalnie podpisany
Część Certyfikat podpisu cyfrowego Opcjonalnie podpisany
Części printTicket Opcjonalnie podpisany
Odrzuć części Opcjonalnie podpisany

Aby uzyskać więcej informacji na temat zasad podpisywania XPS, zobacz sekcję "Funkcje pakietu dokumentów XPS: podpisy cyfrowe: reguły podpisywania" w specyfikacji papieru XML.

Zasady podpisywania zgodności znaczników

Specyfikacja papieru XML opisuje sposób dołączania alternatywnej zawartości w dokumencie XPS: zgodność znaczników. Zawartość alternatywna jest umieszczana w elementach z przestrzeni nazw Zgodności znaczników. Zgodnie z zasadami dokumenty XPS, które mają elementy zgodności markup i atrybuty, nie mogą być prawidłowe podpisane, chyba że aplikacja podpisywania rozpoznaje wszystkie alternatywy zawartości jako równoważne. Tylko dokumenty XPS zawierające elementy i atrybuty, które są rozpoznawane, mogą być podpisane lub zweryfikowane.

Kontrasygnatur

Do zawartości dokumentu XPS można zastosować więcej niż jeden podpis. Na przykład zawartość reprezentująca umowę prawną może wymagać od kilku osób zastosowania podpisów, wskazujących zawartość podpisaną i tożsamość osoby podpisjącej.

Dodanie nowego podpisu zawsze tworzy nową relację w ramach części relacji dołączonej do części Źródła podpisu cyfrowego. Aby dodać nowe podpisy do dokumentu XPS bez unieważniania istniejących podpisów, ta część relacji musi pozostać niepodpisane (chociaż podzbiór relacji może być podpisany). Jeśli część relacji jest uwzględniona w podpisie, podpis ten zostanie unieważniony przez wszystkie następnie zastosowane podpisy.

Weryfikowanie podpisów XPS

Oprócz definiowania tworzenia podpisów zasady podpisywania XPS określają również sposób weryfikowania podpisu jako prawidłowego. Zasady definiują stany ważności podpisu, które zawierają niezgodne, uszkodzone, wątpliwe i prawidłowe, jak pokazano w poniższej tabeli.

Stan podpisu Wszystkie wymagane części i relacje są podpisane? Podpis zawiera tylko rozpoznaną zawartość? Zweryfikowano skrót podpisanej zawartości? Rozpoznana jest podpisana zawartość zgodności ze znacznikami? Certyfikat jest prawidłowy?
Niezgodne NO

TAK

n/d

NO

nie dotyczy

nie dotyczy

nie dotyczy

nie dotyczy

nie dotyczy

nie dotyczy

Złamane TAK TAK NO nie dotyczy nie dotyczy
Wątpliwe TAK

TAK

TAK

TAK

TAK

TAK

NO

TAK

n/d

NO

Prawidłowe TAK TAK TAK TAK TAK

Przeglądarka XPS wyświetla wątpliwe i uszkodzone podpisy XPS, a także prawidłowe podpisy XPS. Niezgodne podpisy nie są wyliczane.

Obsługa programowania dla podpisów XPS

Podczas pracy z dokumentem XPS aplikacje mogą używać metod w klasie XpsDigitalSignature . Ta klasa jest oparta na klasie PackageDigitalSignature i zawiera metody zgodne z algorytmami i wymaganiami określonymi w specyfikacji podpisu cyfrowego XPS. Metody podpisywania i walidacji sprawdzają, czy wszystkie wymagane części i relacje dokumentu XPS są podpisane.

Podpisywanie dokumentu XPS

Metoda XpsDocument.SignDigitally() służy do podpisywania dokumentu XPS. Przed wywołaniem metody aplikacja musi mieć certyfikat X.509, który można uzyskać przy użyciu obiektu System.Security.Cryptography.X509Certificates.X509Certificate2.

     // Open the XPS Document

     XpsDocument document = new XpsDocument(dstContainer,
          FileAccess.ReadWrite);

     // Obtain the certificate object from a file

     X509Certificate certificate =
          509Certificate.CreateFromCertFile(certFilename);

     // Create the signature and add it to the document using
     // the OPC Signing Framework

     document.SignDigitally(certificate, true, 
          XpsDigSigPartAlteringRestrictions.None);

XpsDigSigPartAlteringRestrictions może służyć do określania dodatkowych ograniczeń dla podpisu na podstawie zasad podpisywania. Ten parametr określa, czy należy wykluczyć części CoreMetadata i/lub SignatureOrigin z podpisu. Wykluczone części można następnie zmienić później bez unieważnienia podpisu. Na przykład wyłączenie części CoreMetadata z podpisu umożliwia aplikacji zmianę niektórych właściwości dokumentu bez unieważniania podpisu.

Części PrintTicket i DiscardControl są wykluczone z podpisów utworzonych przez metodę SignDigitally(), chociaż te części mogą być opcjonalnie podpisane w sposób specyficzny dla aplikacji.

Weryfikowanie podpisu dokumentu XPS

Jeden lub wiele podpisów może być przechowywany z dokumentem XPS. Podpisy można uzyskać z właściwości XpsDocument.Signatures . Każdy podpis jest reprezentowany przez wystąpienie obiektu XpsDigitalSignature .

W poniższym przykładzie zweryfikowano tylko pierwszy podpis w kolekcji.

     // Open the XPS Document.

     // Obtain the first enumerated signature.

     foreach (XpsDigitalSignature digitalSignature in
              document.Signatures)
     { 
          // Verify the signature object, if present.

          if (digitalSignature.Verify() ==
     System.IO.Packaging.PackageDigitalSignature.VerifyResult.Success)
          {
         //Signature is valid
          }
     }

Odwołania