Aracılığıyla paylaş


Açık Paketleme Kurallarının Dijital İmzalama Çerçevesi

 

David Meltzer ve Andrey Shur
Microsoft Corporation

Eylül 2006

Aşağıdakiler cihazlar için geçerlidir:
   OPC Dijital İmzalama Çerçevesi
   W3C XML Dijital İmza standardı
   Microsoft .NET 3.0 Framework

Özet: Paket bileşenlerine ve destekleyici hizmetlere genel bir bakış sağlayan OPC Dijital İmzalama Çerçevesi'ni ve imzalama ilkesi ile uygulama örneklerini açıklar. (12 yazdırılan sayfa)

İçindekiler

Giriş
OPC Dijital İmzalama Çerçevesi bileşenleri
   XML Dijital İmza Standardı
   Paketlerde Dijital İmzaları Temsil Etme
   İmzalama Bölümleri ve İlişkiler
Paket İmzaları için Programlama Desteği
   İmzalama Paketi Bölümleri ve İlişkileri
   Sertifikaları ve İmzaları Doğrulama
Uygulama İmzalama İlkesi
   XPS Belgeleri
   XPS İmzaları için Programlama Desteği
Başvurular

Giriş

Açık Paketleme Kuralları (OPC) tarafından belirtilen paketleme modeli paketleri, parçaları ve ilişkileri açıklar. Paketler, içeriği ve kaynakları barındıran bölümleri tutar. İlişkiler, paketi parçalara bağlamak ve paketteki çeşitli parçaları bağlamak için tanımlanır.

Bu makalede, paket bileşenlerine ve destekleyici hizmetlere genel bir bakış sağlayan OPC Dijital İmzalama Çerçevesi ve imzalama ilkesi ve uygulama örnekleri ele alınmaktadır.

İmzalama Çerçevesi, dijital imzaları temsil eden bir altyapı ve imza oluşturma ve doğrulama hizmetleri içerir. İmzalama Çerçevesi, W3C XML Dijital İmza standardının paket parçalarına ve ilişkilerine uygulanmasını sağlar.

İmzalama Çerçevesi'ni kullanarak, paket tabanlı biçimlerin sahipleri biçimlerine özgü "imzalama ilkelerini" tanımlar ve uygular. İlkeler, belirli biçimlerin integral içeriğinin nasıl imzalanıp doğrulanacağını belirtir ve imzaların farklı iş akışları için nasıl kullanıldığını kapsar. Aslında, tek bir biçim için bir belgenin yaşam döngüsünün farklı aşamalarında kullanılmak üzere tanımlanmış çeşitli ilkeler olabilir.

Paket tabanlı biçim için imzalama ilkesi, imzalama bölümleri ve ilişkileri ve muhtemelen diğer belge özellikleri (hedeflenen görüntüleme cihazının doğrulanması, renk derinliği veya uygulama sürümü gibi) açısından ifade edilir. İmzalama ilkesi, imzalanan belge bileşenlerini ve varsa hangilerinin imzasız bırakılıp bırakılmadığını belirtir. Örneğin, bir pakete yeni parça ve ilişkilerin eklenmesine izin vermek için bir imzalama ilkesi uygulanabilir veya bir pakete yeni parçalar veya imzalar eklendiğinde bir ilke imzanın geçersiz kılınmasına neden olabilir.

Bu makalede , Açık Paketleme Kuralları Belirtimi ve W3C Önerisi XML İmza söz dizimi ve işlemesi hakkında bilgi sahibi olduğunuz varsayılır.

OPC Dijital İmzalama Çerçevesi bileşenleri

XML Dijital İmza Standardı

Paketler için İmzalama Çerçevesi, W3C Önerisi XML İmza söz dizimi ve işlemesinde tanımlandığı gibi XML Dijital İmza Standardı'nı kullanır. Bu Öneri, dijital imzaları üretmek ve depolamak için XML söz dizimi ve işleme kurallarını belirtir.

Standart, herhangi bir tür dijital kaynağı imzalamak ve doğrulamak için xml imza öğesi türünü, şemasını ve uyumluluk gereksinimlerini tanımlar. Şema ayrıca kaynaklara başvurmak ve imzayla ilgili algoritmalar belirtmek için öğeleri tanımlar.

Dijital imzaların özellikleri

dijital imza, imzalanan içeriğin imzalandıktan sonra değişip değişmediğini belirlemek için kullanılabilir. İmza, iyi bilinen bir algoritmaya göre karma olarak oluşturulan ve oluşturulduğunda imzada depolanan bir içerik bildirimi içerir. İçeriğin değişip değişmediğini belirlemek için imzalanmış içeriğin karması yeniden oluşturulur ve imzada depolanan karmayla karşılaştırılır.

Dijital imza, içeriğin imzalayanını tanımlamak için de kullanılabilir. İmzalayanın kimliği, imzayla ilişkilendirilmiş bir sertifikayla temsil edilir. Sertifika imzaya eklenmiş veya başka bir yerde kullanılabilir.

Dijital imza bir belgeyi "kilitlemez" veya şifrelenmesini sağlamaz (zaten şifrelenmiş olsa da). İmzalandıktan sonra belge içeriği değişmeden kalır. Dijital imzalar, imzalanmış içeriğin istenmeyen tüketiciler tarafından görüntülenmesini engellemez.

Paketlerde Dijital İmzaları Temsil Etme

Uygulamalar, belirli bir parça ve ilişki yapılandırmasını kullanarak dijital imzaları bir pakete ekler.

İmzalama Çerçevesi, XML Dijital İmza standardı tarafından izin verilen paketleme ad alanındaki öğeleri ve öznitelikleri kullanır. Paketleme ad alanında tanımlanan imza öğeleri, standardı çelişkiye düşmeden genişleten pakete özgü özellikleri destekler. Eklemelerin özeti için OPC Belirtiminin "XML Dijital İmza Belirtiminde Yapılan Değişiklikler" bölümüne bakın.

İmzalama Çerçevesi için tanımlanan paket bölümleri Origin bölümü, XML İmzası bölümü ve Sertifika bölümü'lerdir. Her biri iyi tanımlanmış bir içerik türüne sahiptir. İyi tanımlanmış ilişki türleri, OPC Belirtiminin Ek H, "Standart Ad Alanları ve İçerik Türleri" bölümünde belirtildiği gibi bir paketteki imza bölümlerini bağlamak için kullanılır.

Dijital İmza Kaynak Bölümü

Dijital İmza Kaynağı bölümü, bir paketteki imzalarda gezinmek için başlangıç noktasıdır. Dijital İmza Kaynağı bölümü, Dijital İmza Kaynağı ilişkisi kullanılarak paket kökünden hedeflenmiştir. Kaynak bölümünden birden çok İmza parçası hedeflenebilir. Pakette imza yoksa, Kaynak bölümü mevcut olmaz.

Dijital İmza XML İmza Bölümü

Dijital İmza XML İmzası bölümleri, W3C Dijital İmza standartlarında ve paketleme ad alanında tanımlanan işaretlemeleri içerir. Parçalar, Dijital İmza ilişkisiyle Dijital İmza Kaynağı parça XML'sinden hedeflenir.

Dijital İmza Sertifikası Bölümü

İmzalayanı tanımlamak için gereken X.509 sertifikası, pakete yerleştirildiyse XML İmzası bölümüne eklenmiş veya ayrı bir Sertifika bölümünde depolanmış olabilir. İsteğe bağlı Sertifika bölümü, Dijital İmza Sertifikası ilişkisine sahip XML İmzası bölümünden hedeflenmiştir. Sertifika bölümü birden çok İmza bölümü arasında paylaşılabilir.

Özel İmza Bölümleri

İmzalama Çerçevesi tarafından özel (uygulamaya özgü) imza bölümlerine izin verilir, ancak işlenmez. XML imzası dışında bir imza biçimini tutan imza bölümü, özel bir içerik türü tarafından tanımlanmalıdır. Ayrıca, Dijital İmza Kaynağı bölümünden bölümü hedeflemek için özel ilişki türüne sahip bir ilişki kullanılmalıdır.

İmzalama Bölümleri ve İlişkiler

XML Dijital İmza standardı, bir paket için parça olan adreslenebilir kaynakların imzasına izin verir. İmzalama Çerçevesi parçaların imzasını etkinleştirir. Bir paketteki ilişkiler parçasında depolanan ilişkilerin tümü aynı anda imzalanabilir veya imzalama için ilişkilerin bir alt kümesi belirtilebilir.

Geçerli olarak imzalanmış bir paketteki bir bölümün amaçlandığı gibi kullanıldığından veya işlendiğinden emin olmak için, bir bölümün içerik türü ve bölüm içeriği imzalanır. İçerik türü adreslenebilir bir kaynak olmadığından, içerik türü değerini imzalamak için pakete özgü bir yaklaşım benimsilir. Paket imzalandığında, imzalanan her bölümün içerik türü, imzalı bölüme başvuran URI'nin sorgu bileşeninde depolanır. Paket kullanıldığında, OPC Dijital İmzalama Çerçevesi, bölümün içerik türünün bölüm imzalandığından beri değişmediğinden emin olmak için içerik türü değerini kullanır.

İlişkiler bölümü bir bütün olarak imzalandığında, o bölümde tanımlanan tüm ilişkiler imzalanır. İmza geçersiz kılınmadan paketin bazı içeriğinin değişmesine izin veren imzalama ilkelerini desteklemek için İmzalama Çerçevesi, belirtilen ilişkileri imzalamaya yönelik bir mekanizma sağlar. Belirtilen ilişkileri imzalamak için İmzalama Çerçevesi özel bir dönüşüm kullanır( İlişkiler Dönüşümü (bkz . Dönüştürme Algoritmaları).

İlişkiler Dönüşümü, yalnızca belirtilen ilişki kümesini içeren bir ilişki bölümü oluşturur. Elde edilen ilişkiler bölümü imzalama için ve imza doğrulama sırasında kullanılır.

Paket İmzaları için Programlama Desteği

Uygulamalar imzaları imzalamak ve doğrulamak için PackageDigitalSignatureManager .NET 3.0 sınıflarını kullanabilir. System.IO.Packaging ad alanında tanımlanan pakete özgü sınıflar, System.Security.Cryptography.Xml ad alanında tanımlanan Microsoft .NET 3.0 Framework'ün dijital imza sınıflarını kullanır.

PackageDigitalSignatureManager sınıfı, imza oluşturup doğrulamak ve imza altyapısını bir pakete yerleştirmek için kullanılır. İmza, PackageDigitalSignature sınıfını temel alan bir nesneyle temsil edilir.

İmzalama Paketi Bölümleri ve İlişkileri

Bir uygulama, imzalama ilkesine göre imza atacak parçaların ve ilişkilerin listesini tanımlar. Uygulama daha sonra packageDigitalSignatureManager.Sign() yöntemini çağırarak imzayı oluşturur ve imza altyapısını pakete ekler.

Aşağıdaki örnek kodda, ilişki bölümleri dışında paketteki tüm bölümlerin imzalanması, paket kökünden kaynaklanan tüm mevcut ilişkilerin imzalanması ve XML İmzası bölümünde imzalama için kullanılan sertifikanın katıştırılması gösterilmektedir. Örnek kod, başlangıçta pakette imza bulunmadığını varsayar ve doğrulama öncesinde yalnızca bir imza uygulanır.

İmzalama İşlemini Başlatma

Paketteki imzalarla çalışmaya başlamak için, önce aşağıda gösterildiği gibi bir PackageDigitalSignatureManager oluşturun.

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

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

Sertifika Ekleme Seçenekleri

Sertifika, imzanın kendisine eklenmiş bir dize olarak, paketin ayrı bir parçası olarak veya paketin dışındaki bir kaynak olarak temsil edilebilir. Sertifika pakete yerleştirilecekse, bir uygulama PackageDigitalSignature.CertificateOption özelliğinin ekleme seçenekleri kullanılarak sertifikanın nasıl kalıcı olacağını belirtir. PackageDigitalSignatureManager sınıfı oluşturulduktan sonra, sertifika için ekleme seçenekleri aşağıdaki örnek kodda gösterildiği gibi ayarlanır.

    //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;

İmzalı Parçalar Listesi

İmzalanması gereken bölümlerin listesi, bölümleri ele alan URI'ler kullanılarak belirtilir. Bu örnekte, PackUriHelper.IsRelationshipPartUri() yöntemi kullanılarak filtrelenen ilişki bölümleri dışında paketteki tüm bölümler imzalanır.

    //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);
  }

İmzalı İlişkiler Listesi

tek tek ilişkiler İlişkiler Dönüşümü kullanılarak imzalı. İlişkilerin bu şekilde imzalanması, imza geçersiz kılınmadan pakete yeni ilişkilerin eklenmesini sağlar.

İmzalama sırasında kullanılacak PackageRelationshipSelector nesnelerinin listesi oluşturularak imzalama için ilişkiler seçilir. PackageRelationshipSelector nesneleri ilişki türüne göre grup olarak oluşturulabilir (Open Packaging Conventions'ın "Standart Ad Alanları ve İçerik Türleri" bölümünde tanımlandığı gibi) veya aşağıdaki örnekte olduğu gibi ilişki kimliği belirtilerek tek tek oluşturulabilir.

     //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));
            }

PackageRelationshipSelectorType.Id ile PackageRelationshipSelector oluşturulurken, imza için benzersiz kimliği belirtilen ilişki seçilir. PackageRelationshipSelectorType.Type ile bir seçici oluştururken, belirtilen türdeki tüm ilişkiler imzalama için seçilir. Aynı türdeki ilişkiler daha sonra bir pakete eklenirse, imza geçersiz kılınacaktır.

Sertifika Nesnesi Oluşturma

İmzalamadan önce, System.Security.Cryptography.X509Certificates.X509Certificate2 türünde bir nesne örneği oluşturarak geçerli bir X.509 sertifikası alınır. Bu nesne, imzalama sırasında PackageDigitalSignatureManager.Sign() yöntemine geçirilir. Sertifika nesneleri oluşturma hakkında daha fazla bilgi için bkz . System.Security.Cryptography.X509Certificates ad alanı.

İmzayı Uygulama

İmzalanması gereken bölümlerin ve ilişkilerin listesini oluşturduktan ve sertifika nesnesini aldıktan sonra, uygulama PackageDigitalSignatureManager.Sign() yöntemini çağırır.

     //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();

Sign() yöntemi çağrıldığında, karma oluşturulur ve imza bildiriminde depolanır ve imza bölümü oluşturulur. İmza altyapısı pakette zaten varsa, yeni imza bölümü eklenir (izin veriliyorsa). Altyapı henüz pakette yoksa , Sign() yöntemi altyapıyı oluşturur ve pakete yerleştirir.

Sertifikaları ve İmzaları Doğrulama

Uygulamalar bir sertifikayı veya imzayı doğrulayabilir. İmzayı doğrulamadan önce sertifika doğrulanmalıdır. PackageDigitalSignature paketindeki imzayı temsil eden nesne, paketteyse, bu imzayı oluşturmak için kullanılan sertifikayı döndüren bir "İmzalayan" özelliğine sahiptir. Sertifika pakete eklenmediyse, uygulama sertifikayı uygulama tarafından bilinen bir konumdan alır.

PackageDigitalSignatureManager.VerifyCertificate() yöntemi, alınan sertifikayı doğrulamak, sertifika yapısını, son kullanma tarihini ve zincir durumunu denetlemek için kullanılır. Zincir durumu hakkında daha fazla bilgi için .NET Framework Sınıf Kitaplığı'ndaki X509ChainStatusFlag Numaralandırması'na bakın.

Uygulama geliştiricileri, imzalama ilkelerini desteklemek için sertifika durumunu kullanabilir. Örneğin, bir uygulama yalnızca belirli tarihlerden sonra verilen sertifikaların kabul edilebilir olduğunu belirtebilir.

PackageDigitalSignatureManager.VerifySignatures() yöntemi, paketteki tüm imzaları doğrulamak için kullanılır. Bu yöntem yalnızca imzaları doğrular, imzalarla ilişkili sertifikaları doğrular.

Aşağıdaki örnek kod, imzalama örneklerinde pakete yerleştirilen sertifikayı ve imzayı doğrulamak için kullanılabilir. Örnek kod, pakete ek imza eklenmediğini varsayar.

    // 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();

Uygulama İmzalama İlkesi

Paket tabanlı biçimler kullanan uygulamalar, İmzalama Çerçevesi'nin bir parçası olarak kendi ilkelerini tanımlar. İlke, biçimin öğe türleri ve iş akışı gereksinimleri tarafından belirlenir. Bu bölümde, imzalama ilkesi bir Microsoft paket tabanlı biçim için açıklanmıştır: XPS Belgesi biçimi.

XPS Belgeleri

XPS Belgesi biçimi, XML Kağıt Belirtiminde belirtildiği gibi Açık Paketleme Kuralları'nı temel alır. XML Kağıt Belirtimi, XPS Belgelerini imzalama ilkesini tanımlar. Bu ilkenin içinde, uygulama özelliklerini veya iş akışını desteklemek için kullanılabilir imzalama seçenekleri vardır.

XPS Belge Paketleri için İmzalama İlkesi

XPS Belgeleri için imzalama ilkesi, içeriğin doğrulanabilmesi için imzalanması gereken parça ve ilişkiler kümesini açıklar. Bu ilkenin bir parçası olarak, bir uygulama isteğe bağlı olarak içeriğe ek olarak CoreProperties bölümü gibi belirli bölümlerin bir bileşimini içeren bir imza oluşturabilir. Bu bölümlerin imzalanmasının, imza geçersiz kılınmadan değiştirilmesi engellenir. Ayrıca, uygulamalar isteğe bağlı olarak imzadaki Dijital İmza Kaynağı bölümüne eklenmiş olan ilişkiler bölümünü imzalayarak, imzayı geçersiz hale getirmeden belgeye yeni imzaların eklenmesini engelleyebilir.

İmzanın geçerli olması için XPS Belgesi imzalama ilkesi, imzaya belirli bölümlerin ve ilişkilerin eklenmesini gerektirir. Tanınmayan hiçbir parça veya ilişki imzalanamaz. bir imzayı doğrularken, bir uygulamanın tüm gerekli bölümlerin ve ilişkilerin imzalandığını onaylaması gerekir.

xps belge bölümleri imzalayın

Aşağıdaki tabloda, tüm XPS belgelerinde imzalanması gereken bölümlerin listesi ve isteğe bağlı olarak imzalanan bölümler yer alır. İlişkiler için XPS imzalama ilkesi, gerekli ilişkilerin (gerekli bölümleri hedefleyen ilişkiler) her zaman OPC tanımlı İlişkiler Dönüşümü kullanılarak imzalandığını belirtir. Bir parça imzalıysa, onu hedefleyen ilişkiler de imzalanmalıdır.

Parça Türü İlke
FixedDocumentSequence bölümü İmzalanması gerekir
FixedDocument bölümü İmzalanması gerekir
DocumentStructure bölümleri İmzalanması gerekir
SignatureDefinitions bölümü İmzalanması gerekir
FixedPage bölümleri İmzalanması gerekir
Gerekli kaynak bölümleri (yazı tipleri, resimler gibi) İmzalanması gerekir
StoryFragments bölümleri İmzalanması gerekir
Küçük resim bölümleri İmzalanması gerekir
CoreProperties bölümü İsteğe bağlı olarak imzalı
Dijital İmza Kaynağı bölümü İsteğe bağlı olarak imzalı
Dijital İmza Sertifikası bölümü İsteğe bağlı olarak imzalı
PrintTicket parçaları İsteğe bağlı olarak imzalı
DiscardControl bölümleri İsteğe bağlı olarak imzalı

XPS imzalama ilkesi hakkında daha fazla bilgi için XML Kağıt Belirtimi'ndeki "XPS Belge Paketi Özellikleri: Dijital İmzalar: İmzalama Kuralları" bölümüne bakın.

İşaretlemeyi Uyumluluk İmzalama İlkesi

XML Kağıt Belirtimi, xps belgesine alternatif içerik eklemenin bir aracını açıklar: işaretleme uyumluluğu. Alternatif içerik, İşaretleme Uyumluluğu ad alanındaki öğelerin içine yerleştirilir. İlkeye göre, İşaretleme Uyumluluğu öğeleri ve özniteliklerine sahip XPS Belgeleri, imzalama uygulaması tüm içerik alternatiflerini eşdeğer olarak tanımadığı sürece geçerli olarak imzalanamaz. Yalnızca tanınan öğeleri ve öznitelikleri içeren XPS Belgeleri imzalanabilir veya doğrulanabilir.

Countersignatures

Bir XPS Belgesinin içeriğine birden fazla imza uygulanabilir. Örneğin, yasal bir sözleşmeyi temsil eden içerik, imzalanan içeriği ve imzalayanın kimliğini gösteren birkaç kişinin imzalarını uygulamasını gerektirebilir.

Yeni imza eklemek, dijital imza kaynağı bölümüne eklenen ilişkiler bölümünde her zaman yeni bir ilişki oluşturur. Varolan imzaları geçersiz hale getirmeden bir XPS Belgesine yeni imzalar eklemek için, bu ilişkiler bölümü imzasız kalmalıdır (ancak ilişkilerin bir alt kümesi imzalanabilir). İlişkiler bölümü bir imzaya dahil edilirse, bu imza daha sonra uygulanan tüm imzalar tarafından geçersiz kılınacaktır.

XPS İmzalarını Doğrulama

XPS imzalama ilkesi, imza oluşturmayı tanımlamaya ek olarak, imzanın geçerli olarak nasıl doğrulanması yapılacağını da belirtir. İlke, aşağıdaki tabloda gösterildiği gibi, bir imza için uyumsuz, bozuk, sorgulanabilir ve geçerli olan geçerlilik durumlarını tanımlar.

İmza Durumu Tüm gerekli parçalar ve ilişkiler imzalandı mı? İmza yalnızca tanınan içeriği mi içeriyor? İmzalı içeriğin karması doğrulandı mı? İmzalı İşaretlemeyi Uyumluluk içeriği tanındı mı? Sertifika geçerli mi?
Uyumsuz NO

YES

yok

NO

yok

yok

yok

yok

yok

yok

Kırık YES EVET NO yok yok
Şüpheli YES

YES

YES

YES

YES

EVET

NO

YES

yok

NO

Geçerli YES YES YES YES YES

XPS Görüntüleyicisi sorgulanabilir ve bozuk XPS imzalarının yanı sıra geçerli XPS imzalarını görüntüler. Uyumsuz imzalar numaralandırılmaz.

XPS İmzaları için Programlama Desteği

Bir XPS Belgesi ile çalışırken, uygulamalar XpsDigitalSignature sınıfındaki yöntemleri kullanabilir. Bu sınıf PackageDigitalSignature sınıfını temel alır ve XPS Dijital İmza Belirtiminde belirtilen algoritmaları ve gereksinimleri izleyen yöntemleri içerir. İmzalama ve doğrulama yöntemleri, bir XPS Belgesinin tüm gerekli bölümlerinin ve ilişkilerinin imzalandığını doğrular.

XPS Belgesi İmzalama

XPS Belgesini imzalamak için XpsDocument.SignDigitally() yöntemi kullanılır. yöntemini çağırmadan önce, bir uygulamanın System.Security.Cryptography.X509Certificates.X509Certificate2 nesnesi kullanılarak alınabilen bir X.509 sertifikasına sahip olması gerekir.

     // 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 , imzalama ilkesine göre imza için ek kısıtlamalar belirtmek için kullanılabilir. Bu parametre , CoreMetadata ve/veya SignatureOrigin bölümlerinin imzadan dışlanıp dışlanmayacağını belirtir. Dışlanan bölümler daha sonra imza geçersiz kılınmadan değiştirilebilir. Örneğin, CoreMetadata bölümünün imzadan dışlanması, bir uygulamanın imzayı geçersiz hale getirmeden bazı belge özelliklerini değiştirmesine olanak tanır.

PrintTicket ve DiscardControl bölümleri SignDigitally() yöntemi tarafından oluşturulan imzaların dışında tutulur, ancak bu parçalar isteğe bağlı olarak uygulamaya özgü bir şekilde imzalanabilir.

XPS Belge İmzasını Doğrulama

Bir veya birden çok imza bir XPS Belgesi ile depolanabilir. İmzalar XpsDocument.Signatures özelliğinden alınabilir. Her imza, XpsDigitalSignature nesnesinin bir örneğiyle temsil edilir.

Aşağıdaki örnekte yalnızca koleksiyondaki ilk imza doğrulanmıştır.

     // 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
          }
     }

Başvurular