XML imza doğrulama temelleri

Adobe AIR 1.5 ve üstü

XML imzalarının doğrulanmasının hızlı açıklama ve kod örnekleri için Adobe Geliştirici Bağlantısı'ndaki hızlı başlatmayla ilgili makalelere bakın.

Adobe® AIR®, XML imzalarının doğrulanması için XMLSignatureValidator sınıfı ve IURIDereferencer arabirimini sunar. XMLSignatureValidator sınıfı tarafından kabul edilen XML sözdizimi, XML İmza Sözdizimi ve İşleme için W3C önerisinin bir alt kümesidir. (Önerinin yalnızca bir alt kümesi desteklendiğinden, tüm kurala uygun imzalar doğrulanamaz.) AIR, XML imzaları oluşturma için API sağlamaz.

XML imza doğrulama sınıfları

XML imza doğrulama API'si aşağıdaki sınıfları içerir:

Paket

Sınıflar

flash.security

XMLSignatureValidator dizesi sabitleri aşağıdaki sınıflarda tanımlanmıştır:

flash.events

XML imza doğrulama sınıflarını kullanma

XML imzasını doğrulamak amacıyla XMLSignatureValidator sınıfını kullanmak için:

  • Bir XMLSignatureValidator nesnesi oluşturun

  • IURIDereferencer arabiriminin uygulamasını sağlayın. XMLSignatureValidator nesnesi, imzadaki her başvuru için URI ileterek IURIDereferencer dereference() yöntemini çağırır. dereference() yöntemi, URI'yi ve başvurulan verileri (aynı belgede imza olarak veya harici bir kaynakta bulunabilecek) verileri çözmelidir.

  • XMLSignatureValidator nesnesinin sertifika güvenini, iptal etme denetlemesini ve başvuru doğrulama ayarlarını uygulamanıza uygun olarak ayarlayın.

  • complete ve error olayları için olay dinleyicileri ekleyin.

  • İmzayı doğrulanmak üzere ileterek verify() yöntemini çağırın.

  • complete ve error olaylarını işleyin ve sonuçları yorumlayın.

Aşağıdaki örnek, XML imzasının geçerliliğini doğrulayan validate() işlevini uygular. XMLSignatureValidator özellikleri, imzalayıcı sertifikasının sistem güven depolama alanında olacağı veya depolama alanında bulunan bir sertifikaya ekleneceği biçimde ayarlanır. Örnek de XMLDereferencer adlı uygun bir IURIDereferencer sınıfının mevcut olduğunu varsayar.

private function validate( xmlSignature:XML ):void 
{ 
    var verifier:XMLSignatureValidator = new XMLSignatureValidator(); 
    verifier.addEventListener(Event.COMPLETE, verificationComplete); 
    verifier.addEventListener(ErrorEvent.ERROR, verificationError); 
    try 
    { 
        verifier.uriDereferencer = new XMLDereferencer(); 
 
        verifier.referencesValidationSetting = 
            ReferencesValidationSetting.VALID_IDENTITY; 
        verifier.revocationCheckSetting = RevocationCheckSettings.BEST_EFFORT; 
        verifier.useSystemTrustStore = true; 
         
        //Verify the signature 
        verifier.verify( xmlSignature ); 
    } 
    catch (e:Error) 
        { 
            trace("Verification error.\n" + e); 
        } 
} 
 
//Trace verification results 
private function verificationComplete(event:Event):void 
 
    var signature:XMLSignatureValidator = event.target as XMLSignatureValidator; 
    trace("Signature status: " + signature.validityStatus + "\n"); 
    trace("  Digest status: " + signature.digestStatus + "\n"); 
    trace("  Identity status: " + signature.identityStatus + "\n"); 
    trace("  Reference status: " + signature.referencesStatus + "\n"); 
} 
 
private function verificationError(event:ErrorEvent):void 
{ 
    trace("Verification error.\n" + event.text);                 
}

XML imza doğrulama işlemi

XMLSignatureValidator verify() yöntemini çağırdığınızda, AIR aşağıdaki adımları gerçekleştirir:

  • Çalışma zamanı, imzalayıcı sertifikasının ortak anahtarını kullanarak imzanın şifreleme bütünlüğünü doğrular.

  • Çalışma zamanı, XMLSignatureValidator nesnesinin geçerli ayarlarını temel alarak sertifikanın şifreleme bütünlüğünü, kimliğini ve güvenilirliğini oluşturur.

    İmzalayıcı sertifikada konumlandırılan güven, doğrulama işleminin bütünlüğü için kilit noktadır. İmza doğrulama, iyi tanımlanmış bir şifreleme işlemi kullanılarak yürütülür, ancak imzalayıcı sertifikasının güvenilirliği, işlemsel olarak varılamayacak bir yargıdır.

    Genel olarak, bir sertifikanın güvenilir olup olmadığına karar vermenin üç yolu vardır:

    • Sertifika yetkililerine ve işletim sistemi güven depolama alanına güvenerek.

    • Doğrudan imzalayıcıdan sertifikanın bir kopyasını, sertifika için güven tutturucusu görevi yapan başka bir sertifikayı veya sertifikayı güvenilir biçimde tanımlamak üzere ortak anahtar gibi yeterli bir bilgiyi alarak.

    • Uygulamanızın son kullanıcısına sertifikaya güvenip güvenmediğini sorarak. Sertifikadaki tanımlayıcı bilgi esas olarak güvenilir olmadığından, böyle bir sorgu kendinden imzalı sertifikalarda geçersizdir.

  • Çalışma zamanı, imzalanan verilerin şifreleme bütünlüğünü doğrular.

    İmzalanan veriler, IURIDereferencer uygulamanızın yardımıyla doğrulanır. İmza belgesindeki her başvuru için IURIDereferencer uygulamasının dereference() yöntemi çağrılır. dereference() yönteminin döndürdüğü veriler, başvuru özetini hesaplamak için kullanılır. Bu özet değeri, imza belgesinde kaydedilen özetle karşılaştırılır. Özetler eşleşirse, veriler imzalanmış olduğu için değiştirilmez.

    XML imzası doğrulama sonuçlarına güvenirken dikkate alınması gereken önemli bir nokta, yalnızca imzalı olanların güvenilir olduğudur. Örneğin, bir paketteki dosyaları listeleyen imzalı bir bildirimi düşünün. XMLSignatureValidator imzayı doğrularken yalnızca bildirimin kendisinin değiştirilip değiştirilmediğini denetler. Dosyalardaki veriler imzalı değildir, yani bildirimde başvurulan dosyalar değiştirilmiş veya silinmiş olsa bile imza doğrulanacaktır.

    Not: Böyle bir bildirimde yer alan dosyaları doğrulamak için dosya verilerinin özetini hesaplayabilir (bildirimde kullanılan karma algoritmanın aynısını kullanarak) ve imzalı bildirimde saklanan özetin sonucuyla karşılaştırabilirsiniz. Bazı durumlarda, ek dosyaların mevcudiyetini de kontrol etmeniz gerekebilir.

Doğrulama sonuçlarını yorumlama

Doğrulama sonuçları, XMLSignatureValidator nesnesinin durum özelliklerinde bildirilir. Bu özellikler, doğrulayıcı nesne complete olayını gönderdikten sonra okunabilir. Dört durum özelliği şunlardır: validityStatus , digestStatus , identityStatus , and referencesStatus .

validityStatus özelliği

validityStatus özelliği, imzanın genel geçerliliğini bildirir. validityStatus , diğer üç durum özelliğinin durumuna bağlıdır ve aşağıdaki değerlerden birine sahip olabilir:

  • valid digestStatus , identityStatus ve referencesStatus özelliklerinin tümü valid olduğunda.

  • invalid — Bir veya daha çok durum özelliği invalid olduğunda.

  • unknown — Bir veya daha çok durum özelliği unknown olduğunda ve hiçbir durum invalid olmadığında.

digestStatus özelliği

digestStatus özelliği, mesaj özetinin şifreleme doğrulama sonuçlarını bildirir. digestStatus özelliği, aşağıdaki değerlerden birine sahip olabilir:

  • valid — İmza belgesi imzalamadan sonra değiştirilmediyse.

  • invalid — İmza belgesi değiştirildi veya yanlış biçimlendirildiyse.

  • unknown verify() yöntemi hatasız tamamlanmadıysa.

identityStatus özelliği

identityStatus özelliği, imzalayıcı sertifikasının durumunu bildirir. Bu özelliğin değeri aşağıdaki faktörlere bağlıdır:

  • sertifikanın şifreleme bütünlüğü

  • sertifikanın süresi dolmuş veya iptal edilmiş olup olmadığı

  • kullanılan bilgisayarda sertifikaya güvenilip güvenilmediği

  • XMLSignatureValidator nesnesinin durumu (örneğin güven zinciri oluşturma amacıyla ek sertifikalar eklenip eklenmediği, bu sertifikaların güvenilir olup olmadığı ve useSystemTrustStore ile revocationCheckSettings özelliklerinin değerleri)

identityStatus özelliği aşağıdaki değerlere sahip olabilir:
  • valid — İmzalayıcı sertifikası, geçerli sayılmak için aşağıdaki koşulları karşılamalıdır:

    • İmzalayıcı sertifikası değiştirilmemiş olmalıdır.

    • İmzalayıcı sertifikasının süresi dolmuş veya sertifika iptal edilmiş olmamalıdır—imzada geçerli bir zaman damgası bulunması durumu hariç. İmzada zaman damgası bulunuyorsa, belge imzalandığında geçerli olduğu süre boyunca sertifika geçerli sayılır. (Zaman damgasını imzalamak için zaman damgası servisi tarafından kullanılan sertifika, kullanıcının bilgisayarında güvenilir bir kök sertifikaya eklenmelidir.)

    • İmzalayıcı sertifikası güvenlidir. Sertifika, sistem güven depolama alanında bulunuyorsa veya sistem güven depolama alanında bulunan başka bir sertifikaya eklenmişse ve useSystemTrustStore özelliğini true olarak ayarladıysanız, güvenlidir. Ayrıca, XMLSignatureValidator nesnesinin addCertificate() yöntemini kullanarak da güvenilir bir sertifika oluşturabilirsiniz.

    • Sertifika gerçekte bir imzalayıcı sertifikasıdır.

  • invalid — Sertifikanın süresi dolmuş veya sertifika iptal edilmiştir—ve imzalama zamanındaki geçerliliği kanıtlayan bir zaman damgası yoktur—veya sertifika değiştirilmiştir.

  • unknown — Sertifika geçersiz değilse, ancak güvenilir de değilse. Örneğin kendinden imzalı sertifikalar unknown olarak bildirilir (açık olarak güvenilmediği sürece). verify() yöntemi hatasız olarak tamamlanmadığında veya imza özeti geçersiz olduğundan kimlik denetlenmediğinde, identityStatus özelliği unknown olarak bildirilir.

referencesStatus özelliği

referencesStatus özelliği, imzanın SignedData öğesindeki başvuruların şifreleme bütünlüğünü bildirir.

  • valid — İmzadaki her başvurunun hesaplanan özeti, XML imzasında kendisine karşılık gelen kayıtlı özetle eşleşiyorsa. valid durumu, imzalanan verilerin değiştirilmediğini gösterir.

  • invalid — Hesaplanan herhangi bir özet, imzada kendisine karşılık gelen özetle eşleşmiyorsa.

  • unknown — Başvuru özetleri denetlenmediyse. Genel imza özeti invalid veya imzalayıcı sertifikası geçersiz olduğunda, başvurular denetlenmez. identityStatus özelliği unknown olduğunda, başvurular yalnızca referencesValidationSetting validOrUnknown ise denetlenir.