Bu sayfa salt okunur. Kaynağı görebilirsiniz ama değiştiremezsiniz. Bunun yanlış olduğunu düşünüyorsanız yöneticiye danışın.
<sxh java;highlight:[8,11] ;title:Java & .NET> create signature contained SignatureContainer container = SignatureFactory.createContainer(SignatureFormat.CAdES, context); create signature object in the container Signature signature = container.createSignature(certificate);
add content to be signed signature.addContent(new SignableFile(file), false); sign signature.sign(cardSigner);
write the signature to a File container.write(new FileOuputStream(fileName)); </sxh> ==== ES-T Signature Creation ==== <sxh java;highlight:[11];title:Java & .NET Code> create signature object in the container Signature signature = container.createSignature(certificate);
upgrade the signature to ES-T signature.upgrade(SignatureType.ES_T); write the signature to a File container.write(new FileOuputStream(fileName)); </sxh>
<sxh java; highlight:[8]; title:Java Code> Read the signature container from a file SignatureContainer container = SignatureFactory.readContainer(fileInputStream); Take the first signature Signature signature = container.getSignatures().get(0);
Upgrade the signature to ES-T signature.upgrade(SignatureType.ES_T); write the signature to a File container.write(new FileOuputStream(fileName)); </sxh>
<sxh csharp; highlight:[8]; title:.NET Code> Read the signature container from a file SignatureContainer container = SignatureFactory.readContainer(fileInputStream); Take the first signature Signature signature = container.getSignatures()[0];
In order to create a signature of type ES-XL, it is enough to change the line in the ES-T signature creation sample
<sxh java> create … upgrade signature.upgrade(SignatureType.ES_T); </sxh>
with the line below
<sxh java> upgrade signature.upgrade(SignatureType.ES_XL); </sxh> ===== İmza Doğrulama ===== İmza doğrulamada SignatureContainer içindeki verifyAll() metodu kullanılır. <sxh java; highlight:[6]; title:Java Code> imzayı oku SignatureContainer container = SignatureFactory.readContainer(inputstream); inputstream.close();
SignatureContainer
verifyAll()
imza doğrula ContainerValidationResult cvr = container.verifyAll(); imza yapısı içerisindeki bütün imzalar geçerli mi? assertEquals(ContainerValidationResultType.ALL_VALID, cvr.getResultType()); </sxh>
<sxh csharp; highlight:[6]; title:.NET Code > imzayı oku SignatureContainer container = SignatureFactory.readContainer(inputstream); inputstream.Close(); imza doğrula ContainerValidationResult cvr = container.verifyAll();
imza yapısı içerisindeki bütün imzalar geçerli mi? Assert.AreEqual(ContainerValidationResultType.ALL_VALID, cvr.getResultType()); </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
toString()
ContainerValidationResult
SignatureValidationResult
ContainerValidationResultType
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);
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>
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.
createSignature()
<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>
İ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.
detachFromParent()
<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 profilleri hakkında detaylı açıklama için bu dökümanın İ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 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 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>