Bu sayfanın seçili sürümü ile mevcut sürümü arasındaki farkları gösterir.
esya:xades:kod-imza-profilleri [2013/07/19 10:55] Ahmet Yetgin [P3 -Uzun Süreli - İmza Profili] |
esya:xades:kod-imza-profilleri [2013/08/20 11:47] (mevcut) Dindar Öz |
||
---|---|---|---|
Satır 1: | Satır 1: | ||
====== XAdES İmza Profillerine Göre İmza Atma ====== | ====== XAdES İmza Profillerine Göre İmza Atma ====== | ||
+ | |||
+ | İ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. | ||
===== P1- Anlık- İmza Profili ===== | ===== P1- Anlık- İmza Profili ===== | ||
- | 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. | + | 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. |
<sxh java> | <sxh java> | ||
- | // create signature XMLSignature signature = new XMLSignature(createContext()); | + | // create context with working directory |
- | signature.addDocument("./sample.txt", "text/plain", false); | + | Context context = createContext(); |
- | signature.addKeyInfo(CERTIFICATE); | + | |
- | // set time now It is better to use TimeProvider! | + | // add resolver to resolve policies |
- | signature.setSigningTime(Calendar.getInstance()); | + | context.addExternalResolver(POLICY_RESOLVER); |
- | signature.sign(PRIVATE_KEY); | + | |
- | signature.write(new FileOutputStream(SIGNATURE_FILENAME_P1)); | + | // 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)); | ||
</sxh> | </sxh> | ||
Satır 19: | Satır 45: | ||
===== P2 -Kısa Süreli- İmza Profili ===== | ===== P2 -Kısa Süreli- İmza Profili ===== | ||
- | 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. | + | 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. |
<sxh java> | <sxh java> | ||
- | XMLSignature signature = createSignature(); | + | // create context with working directory |
- | // set policy info defined and required by profile | + | Context context = createContext(); |
- | signature.setPolicyIdentifier(OID_POLICY_P2, "Kısa Dönemli ve SİL Kontrollü Güvenli Elektronik İmza Politikası", "http://www.eimza.gov.tr/EimzaPolitikalari/XML_216792121157511.xml"); | + | |
- | signature.sign(PRIVATE_KEY); | + | |
- | // add timestamp signature.upgradeToXAdES_T(); | + | // add resolver to resolve policies |
- | signature.write(new FileOutputStream(SIGNATURE_FILENAME_P2)); | + | 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)); | ||
</sxh> | </sxh> | ||
+ | |||
===== P3 -Uzun Süreli - İmza Profili ===== | ===== P3 -Uzun Süreli - İmza Profili ===== | ||
- | ÇiSDuP erişimi olmayan ortamlarda kullanılabilir. Aksi durumda P3 profilinin, P4 profiline tercih edilebilecek herhangi bir avantajı yoktur, SİL boyutlaır ve imzadan sonra SİL yayınlanmasını bekme gerekliliği gibi sebeplerle mecbur kalmadıkça tercih edilmemelidir.. | + | Ç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. |
<sxh java> | <sxh java> | ||
- | XMLSignature signature = createSignature(); | + | // create context with working directory |
+ | Context context = createContext(); | ||
- | // set policy info defined and required by profile | + | // add resolver to resolve policies |
- | signature.setPolicyIdentifier(OID_POLICY_P3, "Uzun Dönemli ve SİL Kontrollü Güvenli Elektronik İmza Politikası", "http://www.eimza.gov.tr/EimzaPolitikalari/XML_216792121157521.xml"); | + | context.addExternalResolver(POLICY_RESOLVER); |
- | signature.sign(PRIVATE_KEY); | + | |
- | signature.upgradeToXAdES_T(); | + | |
- | // since P3 requires CRLs as revocation info | + | // create signature according to context, |
- | // below code should be executed after grace period elapses | + | // with default type (XADES_BES) |
- | signature.upgradeToXAdES_C(); | + | XMLSignature signature = new XMLSignature(context); |
- | signature.upgradeToXAdES_X1(); | + | |
- | signature.upgradeToXAdES_XL(); | + | // add document as reference, but do not embed it |
- | signature.write(new FileOutputStream(SIGNATURE_FILENAME_P3)); | + | // 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")); | ||
+ | </sxh> | ||
+ | |||
+ | İkinci kod yeni bir SİL yayınlandıktan sonra çalıştırılmalıdır. | ||
+ | |||
+ | <sxh java> | ||
+ | // 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)); | ||
</sxh> | </sxh> | ||
===== P4 - Uzun Süreli- İmza Profili ===== | ===== P4 - Uzun Süreli- İmza Profili ===== | ||
- | En güvenilir, uzun ömürlü ve sorunsuz imza profilidir. Validasyon verisi imza içinde yer alır. | + | 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. |
<sxh java> | <sxh java> | ||
- | XMLSignature signature = createSignature(); | + | // create context with working directory |
- | // set policy info defined and required by profile | + | Context context = createContext(); |
- | signature.setPolicyIdentifier(OID_POLICY_P4, "Uzun Dönemli ve ÇİSDuP Kontrollü Güvenli Elektronik İmza Politikası", "http://www.eimza.gov.tr/EimzaPolitikalari/XML_216792121157531.xml"); | + | |
- | signature.sign(SIGNER); | + | // 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); | ||
- | // upgrade signature.upgradeToXAdES_T(); | + | signature.write(new FileOutputStream(BASE_DIR + SIGNATURE_FILENAME)); |
- | signature.upgradeToXAdES_C(); | + | |
- | signature.upgradeToXAdES_X1(); | + | |
- | signature.upgradeToXAdES_XL(); | + | |
- | signature.write(new FileOutputStream(SIGNATURE_FILENAME_P4)); | + | |
</sxh> | </sxh> | ||
===== Arşiv İmza ===== | ===== Arşiv İmza ===== | ||
- | 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 | + | 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 |
<sxh java> | <sxh java> |