XML imzaları hakkında

Adobe AIR 1.5 ve üstü

XML imzası, XML sözdiziminde temsil edilen dijital bir imzadır. XML imzasındaki veriler, imzalı bilgilerin imzalamadan sonra değiştirilmediğini doğrulamak için kullanılabilir. Ayrıca, imzalayıcı sertifikası güvenilir bir sertifika yetkilisi tarafından kullanıldıysa, imza sahibinin kimliği ortak anahtar altyapısı aracılığıyla doğrulanabilir.

XML imzası, tüm dijital veri türlerine uygulanabilir (ikili biçim veya XML biçimindeki). XML imzaları genellikle şu amaçlar için kullanılır:

  • harici veya indirilmiş kaynakların değiştirilip değiştirilmediğini kontrol etme

  • bilinen bir kaynaktan gelen mesajları doğrulama

  • uygulama lisansını veya abonelik ayrıcalıklarını doğrulama

Desteklenen XML imzası sözdizimi

AIR, XML İmza Sözdizimi ve İşleme için W3C önerisinden aşağıdaki öğeleri destekler:

  • Tüm çekirdek imza sözdizim öğeleri (W3C öneri belgesinin 4. bölümü)—tam olarak desteklenmeyen KeyInfo öğesi hariç

  • KeyInfo öğesi yalnızca bir X509Data öğesi içermelidir

  • X509Data öğesi yalnızca bir X509Certificate öğesi içermelidir

  • SHA256 özet yöntemi

  • RSA-SHA1 (PKCS1) imzalama algoritması

  • "Yorum içermeyen kurallı XML" kurallaştırma yöntemi ve dönüştürme

  • Zarflı imza dönüştürmesi

  • zaman damgaları

Aşağıdaki belge, tipik bir XML imzasını gösterir (örneği basitleştirmek için şifreleme verilerinin büyük bölümü kaldırılmıştır):

<Signature xmlns="http://www.w3.org/2000/09/xmldsig#"> 
    <SignedInfo> 
        <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/> 
        <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/> 
        <Reference URI="URI_to_signed_data"> 
            <Transforms> 
                <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>            </Transforms> 
            <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/> 
            <DigestValue>uoo...vY=</DigestValue> 
        </Reference> 
    </SignedInfo> 
    <SignatureValue>Ked...w==</SignatureValue> 
    <KeyInfo> 
        <X509Data> 
            <X509Certificate>i7d...w==</X509Certificate> 
        </X509Data> 
    </KeyInfo> 
</Signature>

İmzanın anahtar öğeleri şunlardır:

  • SignedInfo — İmzalı verilere başvurular ve imzalama sırasında hesaplanan özet değerleri içerir. İmzalı veriler, XML imzasıyla aynı belgede yer alabilir veya harici olabilir.

  • SignatureValue — İmza sahibinin özel anahtarıyla şifrelenmiş SignedInfo öğesinin özetini içerir.

  • KeyInfo — İmzalayıcı sertifikasının yanı sıra, güven zincirinin oluşturulması için gerekli ek sertifikaları içerir. KeyInfo öğesi teknik olarak isteğe bağlı olsa da, AIR'in bu öğe bulunmadan imzayı doğrulayamayacağını dikkate alın.

Üç genel XML imza türü mevcuttur:

  • Zarflı — imza, imzalamakta olduğu XML verilerinin içine eklenir.

  • Zarflanan — imzalı XML verileri, Signature öğesinin içinde yer alan bir Object öğesinde bulunur.

  • Ayrılan — imzalanan veriler, XML imzasının dışında yer alır. İmzalanan veriler, harici bir dosyada bulunabilir. Alternatif olarak imzayla aynı XML belgesinde olabilir, ancak Signature öğesinin üst veya alt öğesi olamaz.

XML imzaları, imzalanan verilere başvurmak için URI'leri kullanır. İmzalama ve doğrulama uygulamaları, bu URI'leri çözmek için aynı kuralları kullanmalıdır. XMLSignatureValidator sınıfını kullanırken, bir IURIDereferencer arabirimi uygulaması sağlamalısınız. Bu uygulama, URI'nin çözülmesinden ve imzalanan verileri bir ByteArray nesnesi olarak döndürmekten sorumludur. Döndürülen ByteArray nesnesi, imzadaki özetin üretildiği algoritmanın aynısı kullanılarak özetlenir.

Sertifikalar ve güven

Bir sertifika ortak anahtar, tanımlayıcı bilgi ve sertifikayı yayımlayan yetkiliye ait olan bir veya daha çok sertifikadan oluşur.

Bir sertifikada güven oluşturmanın iki yolu vardır. Örneğin fiziksel medyada veya SSL işlemi gibi güvenli bir dijital iletim yoluyla doğrudan imza sahibinden sertifikanın bir kopyasını alarak güven oluşturabilirsiniz. İmzalayıcı sertifikasının güvenilir olup olmadığını belirlemek için bir sertifika yetkilisine güvenebilirsiniz.

Bir sertifika yetkilisine güvenmek için, imzalayıcı sertifikası imzanın doğrulandığı bilgisayarda güvenilen bir yetkili tarafından yayımlanmış olmalıdır. Çoğu işletim sistemi üreticisi, işletim sistemi güven depolama alanına bir dizi sertifika yetkilisine ait kök sertifikalar yerleştirir. Kullanıcılar da depolama alanına sertifika ekleyebilir veya sertifikaları depolama alanından kaldırabilir.

Sertifika güvenilir bir sertifika yetkilisi tarafından yayımlanmış olsa bile, sertifikanın güvendiğiniz birine ait olup olmadığına karar vermeniz gerekir. Birçok kullanım durumunda, bu karar son kullanıcıya bırakılır. Örneğin, bir AIR uygulamasının yüklenmesi sırasında, AIR yükleyicisi kullanıcının uygulamayı yüklemek isteyip istemediğini sorarken yayımcı sertifikasından tanımlayıcı bilgiler görüntüler. Diğer durumlarda, ortak anahtarı veya diğer sertifika bilgilerini kabul edilebilir anahtarların bir listesiyle harmanlamanız gerekebilir. (Bu listeyle oynanamaması için, liste kendi imzasıyla veya AIR şifreli yerel depoda saklanarak güvenceye alınmalıdır.)

Not: Bağımsız doğrulama—imzanın “kendinden imzalı” olması gibi—olmadan imzalayıcı sertifikasına güvenip güvenmeyeceğinize karar verebiliyor olmanızın yanı sıra, bu yolla imzayı doğrulayarak çok fazla güvence elde edemezsiniz. İmzayı kimin oluşturduğunu bilmediğiniz sürece, imzayla oynanmamış olduğuna dair güvencenin değeri çok azdır. İmza, geçerli biçimde imzalanmış sahte bir imza olabilir.

Sertifika süresinin dolması ve sertifika iptali

Tüm sertifikaların süresi dolar. Sertifikalar, sertifikayı yayımlayan yetkili tarafından, örneğin sertifikaya ilişkin özel anahtar deşifre olduğunda veya çalındığında, iptal edilebilir. İmza süresi dolmuş veya iptal edilmiş bir sertifikayla imzalandıysa, imzanın bir parçası olarak zaman damgası mevcut olmadığı sürece, imza geçersiz olarak bildirilir. Zaman damgası mevcut olduğunda, sertifika imzalama sırasında geçerli olduğu sürece, XMLSignatureValidator sınıfı imzayı doğrulayacaktır.

Zaman damgası, verilerin belirli bir tarih ve zamanda imzalandığını belgeleyen bir zaman damgası servisinden imzalanmış dijital bir mesajdır. Zaman damgaları, zaman damgası yetkilileri tarafından yayımlanır ve zaman damgası yetkilisinin kendi sertifikasıyla imzalanır. Zaman damgasının geçerli sayılması için, zaman damgasında gömülü olan zaman damgası yetkili sertifikasının kullanılan bilgisayarda güvenilen bir sertifika olması gerekir. XMLSignatureValidator, zaman damgasının doğrulanmasında kullanılacak farklı bir sertifika oluşturmak için API sağlamaz.