ESYAE-imza Kütüphaneleri

User Tools

Site Tools


esya:ortakimza:imza-api-kullanim

Farklar

Bu sayfanın seçili sürümü ile mevcut sürümü arasındaki farkları gösterir.

Karşılaştırma görünümüne bağlantı

esya:ortakimza:imza-api-kullanim [2013/07/15 11:26]
Ahmet Yetgin created
esya:ortakimza:imza-api-kullanim [2013/08/19 05:50] (mevcut)
Dindar Öz
Satır 1: Satır 1:
 ====== Kütüphane Kullanımı ====== ====== Kütüphane Kullanımı ======
  
-==== İmza Atma ====+===== İmza Atma ===== 
 + 
 +==== Basit (ES-BES) ​İmza Atma ====
 <sxh java;​highlight:​[8,​11] ;title:Java & .NET> <sxh java;​highlight:​[8,​11] ;title:Java & .NET>
 // imza konteyneri yarat // imza konteyneri yarat
Satır 38: Satır 40:
 container.write(new FileOuputStream(fileName));​ container.write(new FileOuputStream(fileName));​
 </​sxh>​ </​sxh>​
 +
 +===== İmza Geliştirme =====
  
 ==== Basit (ES-BES) İmzayı Zaman Damgalı İmzaya Çevirme ==== ==== Basit (ES-BES) İmzayı Zaman Damgalı İmzaya Çevirme ====
Satır 88: Satır 92:
 olarak değiştimek yeterlidir. olarak değiştimek yeterlidir.
  
-==== İmza Doğrulama ====+===== İmza Doğrulama ​=====
  
 İmza doğrulamada ''​SignatureContainer''​ içindeki ''​verifyAll()''​ metodu kullanılır. İmza doğrulamada ''​SignatureContainer''​ içindeki ''​verifyAll()''​ metodu kullanılır.
Satır 115: Satır 119:
 Assert.AreEqual(ContainerValidationResultType.ALL_VALID,​ cvr.getResultType());​ Assert.AreEqual(ContainerValidationResultType.ALL_VALID,​ cvr.getResultType());​
 </​sxh>​ </​sxh>​
 +
 +==== İmza doğrulama Sonuç Nesnesi ==== 
 +
 +İmza doğrulama sonuç nesnesi ''​toString()''​ metodu, imza nesne hiyerarşisini bir ağaç yapısında formatlı olarak döner.
 +
 +''​SignatureContainer''​ nesnesine ait doğrulama sonucu ''​ContainerValidationResult'',​ her bir imzaya ait doğrulama sonucu ''​SignatureValidationResult''​ nesnesidir. ''​SignatureValidationResult''​ nesneleri ''​ContainerValidationResult''​ içerisinde yer alır.
 +
 +İmza doğrulama sonucunu anlamak için ''​ContainerValidationResult''​ içindeki ''​ContainerValidationResultType''​ alanına bakmak yeterlidir.
 +
 +Hangi imzanın hatalı olduğu bilinmek istenirse ilgili imza sonuçları kontrolden geçirilmelidir.
 +
 +<sxh java; title: Java Code>
 +// NOT bu metod ContainerValidationResult içinde ​
 +// halihazırda mevcuttur !!!
 +public List<​SignatureValidationResult>​ getInvalidValidationResults()
 +{
 +    List<​SignatureValidationResult>​ invalids = 
 +                                 new ArrayList<​SignatureValidationResult>​();​
 +    // root imzalari tara
 +    for (Signature signature : results.keySet()) {
 +        // counter imzalari tara
 +        traceResults(results.get(signature),​ invalids);
 +    }
 +    return invalids;
 +}
 +
 +private void traceResults(SignatureValidationResult svr, 
 +                          List<​SignatureValidationResult>​ invalids)
 +{
 +    // imza geçerli mi?
 +    if (svr.getResultType() != ValidationResultType.VALID) {
 +        invalids.add(svr);​
 +    }
 +    // counter signatures
 +    if (svr.getCounterSignatureValidationResults() != null) {
 +        for (SignatureValidationResult counter :   
 +                                 ​svr.getCounterSignatureValidationResults())
 +        {
 +            traceResults(counter,​ invalids);
 +        }
 +    }
 +}
 +</​sxh>​
 +
 +<sxh csharp; title:.NET Code>
 +ContainerValidationResult cvr = container.verifyAll();​
 +
 +// konteyner içindeki tüm imza doğrulama sonuçlarını tara
 +for (Signature signature : cvr.getAllResults().Keys){
 +    // imza doğrulama sonucu
 +    SignatureValidationResult svr = cvr.getAllResults().get(signature);​
 +
 +    // imza geçerli mi?
 +    if (svr.getResultType != ValidationResultType.VALID)
 +        Console.WriteLine("​Geçersiz imza "​+svr);​
 +}
 +</​sxh>​
 +===== Çoklu imza ===== 
 +==== İmza Ekleme ====
 +
 +=== Seri imza ===
 +
 +Bir imzayı imzalayan imzaya **seri imza** denir. Örneğin çalışan izin talebini imzalar. Yönetici de onay imzası atar. Seri imza oluşturmak için Signature nesnesi createCounterSignature(Certificate) metodu kullanılır.
 +
 +<sxh java;​title:​Java Code;>
 +// imza konteynerini dosyadan oku
 +SignatureContainer sc = SignatureFactory.readContainer(fileInputStream);​
 +
 +// konteynerdeki ilk imzayı al
 +Signature s = sc.getSignatures().get(0);​
 +
 +// seri imzayı oluştur
 +Signature counter= s.createCounterSignature(counterSignersCertificate);​
 +
 +// seri imza at
 +counter.sign(cardSigner);​
 +
 +// imza konteynerini dosyaya yaz
 +sc.write(new FileOuputStream(fileName));​
 +</​sxh>​
 +
 +<sxh csharp; title:.NET Code;>
 +// imza konteynerini dosyadan oku
 +SignatureContainer sc = SignatureFactory.readContainer(fileInputStream);​
 +
 +// konteynerdeki ilk imzayı al
 +Signature s = sc.getSignatures()[0];​
 +
 +// seri imzayı oluştur
 +Signature counter= s.createCounterSignature(counterSignersCertificate);​
 +
 +// seri imza at
 +counter.sign(cardSigner);​
 +
 +// imza konteynerini dosyaya yaz
 +sc.write(new FileOuputStream(fileName));​
 +</​sxh>​
 +
 +=== Paralel imza ===
 +
 +''​SignatureContainer''​ içinde ''​createSignature()''​ metodu her çağrıldığında bir imza yaratılmış ve imza konteynere eklenmiş olur. ''​SignatureContainer''​ içindeki birbirinden bağımsız(birbirini imzalamayan) bu imzalara **paralel imza** denir.
 +
 +<sxh java; title:Java & .NET Code;>
 +// imza konteynerini dosyadan oku
 +SignatureContainer container =    ​
 +        SignatureFactory.readContainer(fileInputStream);​
 +
 +Signature s1 = container.createSignature(certificate1);​
 +s.addContent(new SignableFile(file),​ true);
 +s.sign(signer1);​
 +
 +Signature s2 = container.createSignature(certificate2);​
 +s2.addContent(new SignableFile(file),​ true);
 +s2.sign(signer2);​
 +
 +// imzayı dosyaya yaz
 +container.write(new FileOuputStream(fileName));​
 +</​sxh>​
 +
 +==== İmza Çıkarma ====
 +
 +İmzayı üst yapısından ayırmak için ''​detachFromParent()''​ metodu kullanılır. Bu metodun uygulandığı imza, eğer bir seri imza ise üst imzadan, ilk seviyede bir imza ise konteynerden(''​SignatureContainer''​) ayrılmış olur. Ayrılan imzanın kendi seri imzaları varsa onlarda imza ile birlikte konteynerden çıkar.
 +
 +<sxh java;​title:​Java Code>
 +// konteynerdeki ilk imzayı al
 +Signature s = sc.getSignatures().get(0);​
 +
 +// ilk seri imzayı oluştur
 +Signature counterSignature = s.getCounterSignatures().get(0);​
 +
 +// seri imzayı(ve alt imzalarını) çıkar
 +counterSignature.detachFromParent();​
 +
 +// imzayı yaz
 +container.write(stream);​
 +.NET Code
 +// konteynerdeki ilk imzayı al
 +Signature s = sc.getSignatures()[0];​
 +
 +// ilk seri imzayı oluştur
 +Signature counterSignature = s.getCounterSignatures()[0];​
 +
 +// seri imzayı(ve alt imzalarını) çıkar
 +counterSignature.detachFromParent();​
 +
 +// imzayı yaz
 +container.write(stream);​
 +</​sxh>​
 +
 +===== İmza Profillerine Uygun İmza Atma ===== 
 +
 +İmza profilleri hakkında detaylı açıklama için bu dökümanın [[esya:​eimza:​profiller|İmza Profilleri]] bölümüne bakınız.
 +
 +Türkiyede tanımlı imza profil politikaları TurkishESigProfiles sınıfında tanımlıdır.
 +
 +==== P1 İmza Atma ====
 +
 +P1 profili, temel olarak içinde imza zamanı özelliği olan ES-BES imzadır.
 +
 +<sxh java; title:Java & .NET Code;>
 +SignatureContainer container = SignatureFactory.createContainer(format);​
 +Signature signature = container.createSignature(signersCertificate);​
 +signature.addContent(contentToSign,​ true);
 +signature.setSigningTime(Calendar.getInstance());​
 +signature.sign(cardSigner);​
 +// imzayı yaz
 +container.write(stream);​
 +</​sxh>​
 +
 +==== P2 İmza Atma ====
 +
 +P2 profili zaman damgalı imzadır.
 +
 +<sxh java; title:Java & .NET Code>
 +SignatureContainer container = SignatureFactory.createContainer(format);​
 +Signature signature = container.createSignature(signersCertificate);​
 +signature.addContent(contentToSign,​ true);
 +// imza zamanı
 +signature.setSigningTime(Calendar.getInstance());​
 +// imza politikası
 +signature.setSignaturePolicy(TurkishESigProfiles.SIG_POLICY_ID_P2v1);​
 +// imzala
 +signature.sign(cardSigner);​
 +// ES-T tipi imzaya dönüştür (zaman damgası ekle)
 +signature.upgrade(SignatureType.ES_T);​
 +// imzayı yaz
 +container.write(stream);​
 +</​sxh>​
 +
 +==== P3 İmza Atma ====
 +
 +P3 profili doğrulama için SİL(Sertifika İptal Listesi) kullanılan uzun ömürlü imzalar içindir.
 +
 +<sxh java;​title:​Java & .NET Code;>
 +// context yarat
 +Context context = new Context(new File(workingDir).toURI());​
 +
 +// uygun setifika doğrulama politikası (doğrulamada sadece Sİl kullan)
 +context.getConfig().setCertificateValidationPolicy(crlOnlyPolicy);​
 +
 +// imzayı yarat
 +SignatureContainer c = SignatureFactory.createContainer(format,​ context);
 +Signature signature = c.createSignature(signersCertificate);​
 +
 +// imzalanacak içerik
 +signature.addContent(contentToSign,​ true);
 +// imza zamanı
 +signature.setSigningTime(Calendar.getInstance());​
 +
 +// imza politikası
 +signature.setSignaturePolicy(TurkishESigProfiles.SIG_POLICY_ID_P3v1);​
 +
 +// imzala
 +signature.sign(cardSigner);​
 +// gelişmiş(ES-XLong) imzaya çevir
 +signature.upgrade(SignatureType.ES_XL);​
 +// imzayı yaz
 +c.write(stream);​
 +</​sxh>​
 +
 +==== P4 İmza Atma ====
 +
 +P4 profili doğrulama için ÇiSDuP(OCSP) kullanılan uzun ömürlü imzalar içindir.
 +
 +<sxh java; title:Java & .NET Code>
 +// context yarat
 +Context context = new Context(new File(workingDir).toURI());​
 +
 +// uygun sertifika doğrulama politikası (mümkün olan her zaman OCSP kullan)
 +context.getConfig().setCertificateValidationPolicy(ocspFirstPolicy);​
 +
 +// imzayı yarat
 +SignatureContainer c = SignatureFactory.createContainer(format,​ context);
 +Signature signature = c.createSignature(signersCertificate);​
 +
 +// imzalanacak içerik
 +signature.addContent(contentToSign,​ true);
 +// imza zamanı
 +signature.setSigningTime(Calendar.getInstance());​
 +
 +// imza politikası
 +signature.setSignaturePolicy(TurkishESigProfiles.SIG_POLICY_ID_P4v1);​
 +
 +// imzala
 +signature.sign(cardSigner);​
 +// gelişmiş(ES-XLong) imzaya çevir ​
 +signature.upgrade(SignatureType.ES_XL);​
 +// imzayı yaz
 +c.write(stream);​
 +</​sxh>​
 +
 +
esya/ortakimza/imza-api-kullanim.1373887602.txt.gz · Son değiştirilme: 2013/07/15 11:26 Değiştiren: Ahmet Yetgin