İmza profillerinin açıklamalarını http://www.tk.gov.tr/bilgi_teknolojileri/elektronik_imza/dosyalar/Elektronik_Imza_Kullanim_Profilleri_Rehberi.pdf
adresinde bulabileceğiniz gibi config/profiller
altında Elektronik_Imza_Kullanim_Profilleri_Rehberi.pdf
dökümanında da bulabilirsiniz.
Örnek kodları tr.gov.tubitak.uekae.esya.api.xades.example.profiles
paketi altında bulabilirsiniz.
Anlık doğrulama gerektiren güvenlik ihtiyacı düşük seviyede olan uygulamalarda kullanılır. İmza doğrulayıcının eline geçtiği an, imza zamanı sayılır. Gelecekte imzayı tekrar doğrulama ihtiyacı olmayacak senaryolarda tercih edilmelidir. Örnek kod P1
sınıfındadır.
// create context with working directory Context context = createContext(); // add resolver to resolve policies context.addExternalResolver(POLICY_RESOLVER); // create signature according to context, // with default type (XADES_BES) XMLSignature signature = new XMLSignature(context); // add document as reference, but do not embed it // into the signature (embed=false) signature.addDocument("./sample.txt", "text/plain", false); signature.getSignedInfo().setSignatureMethod(SignatureMethod.RSA_SHA256); // false-true gets non-qualified certificates while true-false gets qualified ones X509Certificate cert = JSmartCardManager.getInstance().getSignatureCertificate(true, false); // add certificate to show who signed the document signature.addKeyInfo(new ECertificate(cert.getEncoded())); // set time now signature.setSigningTime(Calendar.getInstance()); // now sign it by using smart card signature.sign(JSmartCardManager.getInstance().getSigner(PIN, cert)); signature.write(new FileOutputStream(BASE_DIR + SIGNATURE_FILENAME));
Bu imza profili tanımlanmış bir imza politikasına referans vermemektedir.
Kısa süreli kullanım ömrü olan imzalarda, ÇiSDuP erişimi bulunmayan ortamlarda tercih edilmelidir. ÇisDuP erişimi olan ortamlarda P4 profili kullanılmalıdır. Kodu P2
sınıfında inceleyebilirsiniz.
// create context with working directory Context context = createContext(); // add resolver to resolve policies context.addExternalResolver(POLICY_RESOLVER); // create signature according to context, // with default type (XADES_BES) XMLSignature signature = new XMLSignature(context); // add document as reference, but do not embed it // into the signature (embed=false) signature.addDocument("./sample.txt", "text/plain", false); signature.getSignedInfo().setSignatureMethod(SignatureMethod.RSA_SHA256); // false-true gets non-qualified certificates while true-false gets qualified ones X509Certificate cert = JSmartCardManager.getInstance().getSignatureCertificate(true, false); // add certificate to show who signed the document signature.addKeyInfo(new ECertificate(cert.getEncoded())); // set time now signature.setSigningTime(Calendar.getInstance()); // set policy info defined and required by profile signature.setPolicyIdentifier(OID_POLICY_P2, "Kısa Dönemli ve SİL Kontrollü Güvenli Elektronik İmza Politikası", "http://www.tk.gov.tr/bilgi_teknolojileri/elektronik_imza/dosyalar/Elektronik_Imza_Kullanim_Profilleri_Rehberi.pdf" ); // now sign it by using smart card signature.sign(JSmartCardManager.getInstance().getSigner(PIN, cert)); // upgrade to T signature.upgrade(SignatureType.ES_T); signature.write(new FileOutputStream(BASE_DIR + SIGNATURE_FILENAME));
ÇiSDuP erişimi olmayan ortamlarda kullanılabilir. Aksi durumda P3 profilinin, P4 profiline tercih edilebilecek herhangi bir avantajı yoktur, SİL boyutları ve imzadan sonra SİL yayınlanmasını bekleme gerekliliği gibi sebeplerle mecbur kalmadıkça tercih edilmemelidir. Örnek kod P3
sınıfındadır.
// create context with working directory Context context = createContext(); // add resolver to resolve policies context.addExternalResolver(POLICY_RESOLVER); // create signature according to context, // with default type (XADES_BES) XMLSignature signature = new XMLSignature(context); // add document as reference, but do not embed it // into the signature (embed=false) signature.addDocument("./sample.txt", "text/plain", false); signature.getSignedInfo().setSignatureMethod(SignatureMethod.RSA_SHA256); // false-true gets non-qualified certificates while true-false gets qualified ones X509Certificate cert = JSmartCardManager.getInstance().getSignatureCertificate(true, false); // add certificate to show who signed the document signature.addKeyInfo(new ECertificate(cert.getEncoded())); // set time now signature.setSigningTime(Calendar.getInstance()); // set policy info defined and required by profile signature.setPolicyIdentifier(OID_POLICY_P3, "Uzun Dönemli ve SİL Kontrollü Güvenli Elektronik İmza Politikası", "http://www.tk.gov.tr/bilgi_teknolojileri/elektronik_imza/dosyalar/Elektronik_Imza_Kullanim_Profilleri_Rehberi.pdf" ); // now sign it by using smart card signature.sign(JSmartCardManager.getInstance().getSigner(PIN, cert)); // upgrade to T signature.upgrade(SignatureType.ES_T); signature.write(new FileOutputStream(BASE_DIR + "p3_temp.xml"));
İkinci kod yeni bir SİL yayınlandıktan sonra çalıştırılmalıdır.
// create context with working directory Context context = createContext(); // set policy such that it only works with CRL CertValidationPolicies policies = new CertValidationPolicies(); policies.register(null, PolicyReader.readValidationPolicy(POLICY_FILE_CRL)); context.getConfig().getValidationConfig().setCertValidationPolicies(policies); // add resolver to resolve policies context.addExternalResolver(POLICY_RESOLVER); // read temporary signature XMLSignature signature = XMLSignature.parse(new FileDocument(new File(BASE_DIR + "p3_temp.xml")),context); // upgrade to XL signature.upgrade(SignatureType.ES_XL); signature.write(new FileOutputStream(BASE_DIR + SIGNATURE_FILENAME));
En güvenilir, uzun ömürlü ve sorunsuz imza profilidir. Doğrulama verisi imza içinde yer alır. Örnek kod P4
sınıfındadır.
// create context with working directory Context context = createContext(); // add resolver to resolve policies context.addExternalResolver(POLICY_RESOLVER); // create signature according to context, // with default type (XADES_BES) XMLSignature signature = new XMLSignature(context); // add document as reference, but do not embed it // into the signature (embed=false) signature.addDocument("./sample.txt", "text/plain", false); signature.getSignedInfo().setSignatureMethod(SignatureMethod.RSA_SHA256); // false-true gets non-qualified certificates while true-false gets qualified ones X509Certificate cert = JSmartCardManager.getInstance().getSignatureCertificate(true, false); // add certificate to show who signed the document signature.addKeyInfo(new ECertificate(cert.getEncoded())); // set time now signature.setSigningTime(Calendar.getInstance()); // set policy info defined and required by profile signature.setPolicyIdentifier(OID_POLICY_P4, "Uzun Dönemli ve ÇİSDuP Kontrollü Güvenli Elektronik İmza Politikası", "http://www.tk.gov.tr/bilgi_teknolojileri/elektronik_imza/dosyalar/Elektronik_Imza_Kullanim_Profilleri_Rehberi.pdf" ); // now sign it by using smart card signature.sign(JSmartCardManager.getInstance().getSigner(PIN, cert)); // upgrade to XL signature.upgrade(SignatureType.ES_XL); signature.write(new FileOutputStream(BASE_DIR + SIGNATURE_FILENAME));
Uzun süreli imza içindeki son zaman damgasını imzalayan sertifikanın ömrü dolmadan önce, yada imza içinde kullanılan algoritmalar güvenilirlik derecelerini yitirdikçe imza üzerine arşiv zaman damgası eklenmelidir. Arşiv formatına erişmek için X-Long(Profil 4) imza üzerinde
signature.upgradeToXAdES_A();
metodu; halihazırda arşiv tipindeki imzaya her arşiv zaman damgası eklenmek istendiğinde ise
signature.addArchiveTimeStamp();
metodu kullanılır.