Bu sayfanın seçili sürümü ile mevcut sürümü arasındaki farkları gösterir.
en:esya:ortakimza:imza-api-kullanim [2013/08/28 12:42] Dindar Öz |
en:esya:ortakimza:imza-api-kullanim [2013/08/28 13:37] (mevcut) Dindar Öz |
||
---|---|---|---|
Satır 92: | Satır 92: | ||
- | ===== İmza Doğrulama ===== | + | ===== Signature Verification ===== |
- | İmza doğrulamada ''SignatureContainer'' içindeki ''verifyAll()'' metodu kullanılır. | + | ''verifyAll()'' method in ''SignatureContainer'' is used for signature verification. |
<sxh java; highlight:[6]; title:Java Code> | <sxh java; highlight:[6]; title:Java Code> | ||
- | // imzayı oku | + | // read the signature |
SignatureContainer container = SignatureFactory.readContainer(inputstream); | SignatureContainer container = SignatureFactory.readContainer(inputstream); | ||
inputstream.close(); | inputstream.close(); | ||
- | // imza doğrula | + | // verify |
ContainerValidationResult cvr = container.verifyAll(); | ContainerValidationResult cvr = container.verifyAll(); | ||
- | // imza yapısı içerisindeki bütün imzalar geçerli mi? | + | // are all the signatures in the container valid? |
assertEquals(ContainerValidationResultType.ALL_VALID, cvr.getResultType()); | assertEquals(ContainerValidationResultType.ALL_VALID, cvr.getResultType()); | ||
</sxh> | </sxh> | ||
<sxh csharp; highlight:[6]; title:.NET Code > | <sxh csharp; highlight:[6]; title:.NET Code > | ||
- | // imzayı oku | + | // read the signature |
SignatureContainer container = SignatureFactory.readContainer(inputstream); | SignatureContainer container = SignatureFactory.readContainer(inputstream); | ||
inputstream.Close(); | inputstream.Close(); | ||
- | // imza doğrula | + | // verify |
ContainerValidationResult cvr = container.verifyAll(); | ContainerValidationResult cvr = container.verifyAll(); | ||
- | // imza yapısı içerisindeki bütün imzalar geçerli mi? | + | // are all the signatures in the container valid? |
Assert.AreEqual(ContainerValidationResultType.ALL_VALID, cvr.getResultType()); | Assert.AreEqual(ContainerValidationResultType.ALL_VALID, cvr.getResultType()); | ||
</sxh> | </sxh> | ||
- | ==== İmza doğrulama Sonuç Nesnesi ==== | + | ==== Signature Verification Result Object ==== |
- | İmza doğrulama sonuç nesnesi ''toString()'' metodu, imza nesne hiyerarşisini bir ağaç yapısında formatlı olarak döner. | + | The method ''toString()'' in signature verification result object returns the signature object hierarchy as a tree. |
+ | The verification result of ''SignatureContainer'' is ''ContainerValidationResult'' where as that of each signature is ''SignatureValidationResult''. ''ContainerValidationResult'' object includes those ''SignatureValidationResult'' objects. | ||
- | ''SignatureContainer'' nesnesine ait doğrulama sonucu ''ContainerValidationResult'', her bir imzaya ait doğrulama sonucu ''SignatureValidationResult'' nesnesidir. ''SignatureValidationResult'' nesneleri ''ContainerValidationResult'' içerisinde yer alır. | + | To interpret the signature verification result the field ''ContainerValidationResultType'' in the class ''ContainerValidationResult'' is used. |
- | İmza doğrulama sonucunu anlamak için ''ContainerValidationResult'' içindeki ''ContainerValidationResultType'' alanına bakmak yeterlidir. | + | To identify which signatures are invalid, the corresponding signature results must be inspected. |
- | + | ||
- | Hangi imzanın hatalı olduğu bilinmek istenirse ilgili imza sonuçları kontrolden geçirilmelidir. | + | |
<sxh java; title: Java Code> | <sxh java; title: Java Code> | ||
- | // NOT bu metod ContainerValidationResult içinde | + | // NOTE this method already exists in ContainerValidationResult !!! |
- | // halihazırda mevcuttur !!! | + | |
public List<SignatureValidationResult> getInvalidValidationResults() | public List<SignatureValidationResult> getInvalidValidationResults() | ||
{ | { | ||
List<SignatureValidationResult> invalids = | List<SignatureValidationResult> invalids = | ||
new ArrayList<SignatureValidationResult>(); | new ArrayList<SignatureValidationResult>(); | ||
- | // root imzalari tara | + | // scan root signatures |
for (Signature signature : results.keySet()) { | for (Signature signature : results.keySet()) { | ||
- | // counter imzalari tara | + | // scan counter signatures |
traceResults(results.get(signature), invalids); | traceResults(results.get(signature), invalids); | ||
} | } | ||
Satır 148: | Satır 146: | ||
List<SignatureValidationResult> invalids) | List<SignatureValidationResult> invalids) | ||
{ | { | ||
- | // imza geçerli mi? | + | // is valid? |
if (svr.getResultType() != ValidationResultType.VALID) { | if (svr.getResultType() != ValidationResultType.VALID) { | ||
invalids.add(svr); | invalids.add(svr); | ||
Satır 166: | Satır 164: | ||
ContainerValidationResult cvr = container.verifyAll(); | ContainerValidationResult cvr = container.verifyAll(); | ||
- | // konteyner içindeki tüm imza doğrulama sonuçlarını tara | + | // scan all verification results in the container |
for (Signature signature : cvr.getAllResults().Keys){ | for (Signature signature : cvr.getAllResults().Keys){ | ||
- | // imza doğrulama sonucu | + | // signature verification result |
SignatureValidationResult svr = cvr.getAllResults().get(signature); | SignatureValidationResult svr = cvr.getAllResults().get(signature); | ||
- | // imza geçerli mi? | + | // is valied? |
if (svr.getResultType != ValidationResultType.VALID) | if (svr.getResultType != ValidationResultType.VALID) | ||
Console.WriteLine("Geçersiz imza "+svr); | Console.WriteLine("Geçersiz imza "+svr); | ||
} | } | ||
</sxh> | </sxh> | ||
- | ===== Çoklu imza ===== | + | ===== Multiple Signatures ===== |
- | ==== İmza Ekleme ==== | + | ==== Adding Signature ==== |
- | === Seri imza === | + | === Counter Signature === |
- | 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. | + | The signature of another signature is named as counter signature. For example, the employee signs a request and |
+ | the manager signs that signature as a confirmation of the request. To create counter signature, you can use the method ''createCounterSignature(Certificate)'' in ''Signature''. | ||
<sxh java;title:Java Code;> | <sxh java;title:Java Code;> | ||
- | // imza konteynerini dosyadan oku | + | // read the signature container |
SignatureContainer sc = SignatureFactory.readContainer(fileInputStream); | SignatureContainer sc = SignatureFactory.readContainer(fileInputStream); | ||
- | // konteynerdeki ilk imzayı al | + | // take the first signature |
Signature s = sc.getSignatures().get(0); | Signature s = sc.getSignatures().get(0); | ||
- | // seri imzayı oluştur | + | // create counter signature object |
Signature counter= s.createCounterSignature(counterSignersCertificate); | Signature counter= s.createCounterSignature(counterSignersCertificate); | ||
- | // seri imza at | + | // sign |
counter.sign(cardSigner); | counter.sign(cardSigner); | ||
- | // imza konteynerini dosyaya yaz | + | // write the signature container to a file |
sc.write(new FileOuputStream(fileName)); | sc.write(new FileOuputStream(fileName)); | ||
</sxh> | </sxh> | ||
<sxh csharp; title:.NET Code;> | <sxh csharp; title:.NET Code;> | ||
- | // imza konteynerini dosyadan oku | + | // read the signature container |
SignatureContainer sc = SignatureFactory.readContainer(fileInputStream); | SignatureContainer sc = SignatureFactory.readContainer(fileInputStream); | ||
- | // konteynerdeki ilk imzayı al | + | // take the first signature |
Signature s = sc.getSignatures()[0]; | Signature s = sc.getSignatures()[0]; | ||
- | // seri imzayı oluştur | + | // create counter signature object |
Signature counter= s.createCounterSignature(counterSignersCertificate); | Signature counter= s.createCounterSignature(counterSignersCertificate); | ||
- | // seri imza at | + | // sign |
counter.sign(cardSigner); | counter.sign(cardSigner); | ||
- | // imza konteynerini dosyaya yaz | + | // write the signature container to a file |
sc.write(new FileOuputStream(fileName)); | sc.write(new FileOuputStream(fileName)); | ||
</sxh> | </sxh> | ||
- | === Paralel imza === | + | === Parallel Signature === |
+ | |||
+ | Whenever the method ''createSignature()'' in ''SignatureContainer'' is caleed, a signature is created and added into the container. These independent signatures in the container are called as **paralel signature**. | ||
- | ''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;> | <sxh java; title:Java & .NET Code;> | ||
- | // imza konteynerini dosyadan oku | + | // read the signature container |
SignatureContainer container = | SignatureContainer container = | ||
SignatureFactory.readContainer(fileInputStream); | SignatureFactory.readContainer(fileInputStream); | ||
Satır 234: | Satır 234: | ||
s2.sign(signer2); | s2.sign(signer2); | ||
- | // imzayı dosyaya yaz | + | // write the signature to a file |
container.write(new FileOuputStream(fileName)); | container.write(new FileOuputStream(fileName)); | ||
</sxh> | </sxh> | ||
- | ==== İmza Çıkarma ==== | + | ==== Extracting Signature ==== |
- | İ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. | + | To extract the signature from a signed document the method ''detachFromParent()'' is used. If the signature to be extracted is a counter signature it is extracted from the parent signature. The extracted signatures contains all of its children counter signatures. |
<sxh java;title:Java Code> | <sxh java;title:Java Code> | ||
- | // konteynerdeki ilk imzayı al | + | // take the first signature |
Signature s = sc.getSignatures().get(0); | Signature s = sc.getSignatures().get(0); | ||
- | // ilk seri imzayı oluştur | + | // take the first counter signature |
Signature counterSignature = s.getCounterSignatures().get(0); | Signature counterSignature = s.getCounterSignatures().get(0); | ||
- | // seri imzayı(ve alt imzalarını) çıkar | + | // extract the counter signature and its children |
counterSignature.detachFromParent(); | counterSignature.detachFromParent(); | ||
- | // imzayı yaz | + | // write the signature |
container.write(stream); | container.write(stream); | ||
.NET Code | .NET Code | ||
- | // konteynerdeki ilk imzayı al | + | // take the first signature |
Signature s = sc.getSignatures()[0]; | Signature s = sc.getSignatures()[0]; | ||
- | // ilk seri imzayı oluştur | + | // take the first counter signature |
Signature counterSignature = s.getCounterSignatures()[0]; | Signature counterSignature = s.getCounterSignatures()[0]; | ||
- | // seri imzayı(ve alt imzalarını) çıkar | + | // extract the counter signature and its children |
counterSignature.detachFromParent(); | counterSignature.detachFromParent(); | ||
- | // imzayı yaz | + | // write the signature |
container.write(stream); | container.write(stream); | ||
</sxh> | </sxh> | ||
- | ===== İmza Profillerine Uygun İmza Atma ===== | + | ===== Creation of Signatures with Profiles ===== |
- | İ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. | + | For the detailed information about signature profiles, see [[en:esya:eimza:profiller|Signature Profiles]] |
+ | The class ''TurkishESigProfiles'' contains the policies for the signature profiles defined in Turkey. | ||
- | Türkiyede tanımlı imza profil politikaları TurkishESigProfiles sınıfında tanımlıdır. | ||
- | ==== P1 İmza Atma ==== | + | ==== P1 Signature Creation ==== |
- | P1 profili, temel olarak içinde imza zamanı özelliği olan ES-BES imzadır. | + | P1 is ES-BES which generally contains the signing time. |
<sxh java; title:Java & .NET Code;> | <sxh java; title:Java & .NET Code;> | ||
Satır 284: | Satır 284: | ||
signature.setSigningTime(Calendar.getInstance()); | signature.setSigningTime(Calendar.getInstance()); | ||
signature.sign(cardSigner); | signature.sign(cardSigner); | ||
- | // imzayı yaz | + | // write |
container.write(stream); | container.write(stream); | ||
</sxh> | </sxh> | ||
- | ==== P2 İmza Atma ==== | + | ==== P2 Signature Creation ==== |
- | P2 profili zaman damgalı imzadır. | + | P2 signature contains timestamp. |
<sxh java; title:Java & .NET Code> | <sxh java; title:Java & .NET Code> | ||
Satır 296: | Satır 296: | ||
Signature signature = container.createSignature(signersCertificate); | Signature signature = container.createSignature(signersCertificate); | ||
signature.addContent(contentToSign, true); | signature.addContent(contentToSign, true); | ||
- | // imza zamanı | + | // signature time |
signature.setSigningTime(Calendar.getInstance()); | signature.setSigningTime(Calendar.getInstance()); | ||
- | // imza politikası | + | // signature policy |
signature.setSignaturePolicy(TurkishESigProfiles.SIG_POLICY_ID_P2v1); | signature.setSignaturePolicy(TurkishESigProfiles.SIG_POLICY_ID_P2v1); | ||
- | // imzala | + | // sign |
signature.sign(cardSigner); | signature.sign(cardSigner); | ||
- | // ES-T tipi imzaya dönüştür (zaman damgası ekle) | + | // upgrade to ES-T (add timestamp) |
signature.upgrade(SignatureType.ES_T); | signature.upgrade(SignatureType.ES_T); | ||
- | // imzayı yaz | + | // write |
container.write(stream); | container.write(stream); | ||
</sxh> | </sxh> | ||
- | ==== P3 İmza Atma ==== | + | ==== P3 Signature Creation ==== |
- | P3 profili doğrulama için SİL(Sertifika İptal Listesi) kullanılan uzun ömürlü imzalar içindir. | + | The signature profile P3 is used for long-term signatures where CRL is available. |
<sxh java;title:Java & .NET Code;> | <sxh java;title:Java & .NET Code;> | ||
- | // context yarat | + | // create context |
Context context = new Context(new File(workingDir).toURI()); | Context context = new Context(new File(workingDir).toURI()); | ||
- | // uygun setifika doğrulama politikası (doğrulamada sadece Sİl kullan) | + | // proper certificate validation policy (use always OCSP when available) |
context.getConfig().setCertificateValidationPolicy(crlOnlyPolicy); | context.getConfig().setCertificateValidationPolicy(crlOnlyPolicy); | ||
- | // imzayı yarat | + | // create signature container |
SignatureContainer c = SignatureFactory.createContainer(format, context); | SignatureContainer c = SignatureFactory.createContainer(format, context); | ||
Signature signature = c.createSignature(signersCertificate); | Signature signature = c.createSignature(signersCertificate); | ||
- | // imzalanacak içerik | + | // content to be signed |
signature.addContent(contentToSign, true); | signature.addContent(contentToSign, true); | ||
- | // imza zamanı | + | // signature time |
signature.setSigningTime(Calendar.getInstance()); | signature.setSigningTime(Calendar.getInstance()); | ||
- | // imza politikası | + | // signature policy |
signature.setSignaturePolicy(TurkishESigProfiles.SIG_POLICY_ID_P3v1); | signature.setSignaturePolicy(TurkishESigProfiles.SIG_POLICY_ID_P3v1); | ||
- | // imzala | + | // sign |
signature.sign(cardSigner); | signature.sign(cardSigner); | ||
- | // gelişmiş(ES-XLong) imzaya çevir | + | // upgrade to ES-XLong) |
signature.upgrade(SignatureType.ES_XL); | signature.upgrade(SignatureType.ES_XL); | ||
- | // imzayı yaz | + | // sign |
c.write(stream); | c.write(stream); | ||
</sxh> | </sxh> | ||
- | ==== P4 İmza Atma ==== | + | ==== P4 Signature Creation ==== |
- | P4 profili doğrulama için ÇiSDuP(OCSP) kullanılan uzun ömürlü imzalar içindir. | + | The signature profile P4 is used for long-term signatures where OCSP is available. |
<sxh java; title:Java & .NET Code> | <sxh java; title:Java & .NET Code> | ||
- | // context yarat | + | // create context |
Context context = new Context(new File(workingDir).toURI()); | Context context = new Context(new File(workingDir).toURI()); | ||
- | // uygun sertifika doğrulama politikası (mümkün olan her zaman OCSP kullan) | + | // proper certificate validation policy (use always OCSP when available) |
context.getConfig().setCertificateValidationPolicy(ocspFirstPolicy); | context.getConfig().setCertificateValidationPolicy(ocspFirstPolicy); | ||
- | // imzayı yarat | + | // create signature |
SignatureContainer c = SignatureFactory.createContainer(format, context); | SignatureContainer c = SignatureFactory.createContainer(format, context); | ||
Signature signature = c.createSignature(signersCertificate); | Signature signature = c.createSignature(signersCertificate); | ||
- | // imzalanacak içerik | + | // content to be signed |
signature.addContent(contentToSign, true); | signature.addContent(contentToSign, true); | ||
- | // imza zamanı | + | // signature time |
signature.setSigningTime(Calendar.getInstance()); | signature.setSigningTime(Calendar.getInstance()); | ||
- | // imza politikası | + | // signature policy |
signature.setSignaturePolicy(TurkishESigProfiles.SIG_POLICY_ID_P4v1); | signature.setSignaturePolicy(TurkishESigProfiles.SIG_POLICY_ID_P4v1); | ||
- | // imzala | + | // sign |
signature.sign(cardSigner); | signature.sign(cardSigner); | ||
- | // gelişmiş(ES-XLong) imzaya çevir | + | // upgrade to ES-XLong) |
signature.upgrade(SignatureType.ES_XL); | signature.upgrade(SignatureType.ES_XL); | ||
- | // imzayı yaz | + | // write |
c.write(stream); | c.write(stream); | ||
</sxh> | </sxh> | ||