Eimza (elektronik imza) nedir ? Yazılım şirketleri kendi Eimza Applet lerini nasıl yazabilir?
Burada özellikle eimza nın DYS-Dokuman Yönetimi Sistemi veya EBYS-Elektronik Bilgi Yönetim Sistemi ile ilgili olanı anlatılacaktır. Efatura gibi olan uygulamalar çok çok daha kolaydır. Ve internette bir çok örneğini bulabilirsiniz. Efatura ile ilgili sertifikasyon 2017 yılından itibaren Tubitak tarafından yapılmaktadır. (Efatura ile ilgili olanları xmlsignature-config diye aratın hemen bulabileceksiniz !)
5070 sayılı Elektronik İmza Kanunu uyarınca elektronik imzalı veri oluşturma ve bu veriler üzerindeki imzaların doğrulanması işlemlerinin yürütülebilmesi için, ilgili yazılım bileşenlerinin mevcut uygulama yazılımlarına entegre edilerek, elektronik imza kullanım özelliğinin sağlanması gerekmektedir.
Yazılım sektöründesiniz ve bir doküman yönetim sistemi (EBYS – Elektronik Belge Yönetim Sistemi) yazmak istediniz. İşiniz biraz zor !. Tabii kolay mı zor mu anlatmaya başlayalım siz karar verin.
Özellikle kamu başta olmak üzere bir çok kurum ve kuruluş EBYS nin TS 13298 sertifikasına sahip olmasını şart koşar. Bu uzun ve ince bir yol. Bu konuda önce bir veya daha fazla dışarıdan paralı danışman tutmanız gerekiyor. Hatta bunların TSE den bağlantılı olması da muhtemel. Bu kişiler o standartlara göre yazılımınızın her kısmını test edip kurallara uygunluğuna bakar. En sonunda sertifika alır ya da almazsınız.
İkinci önemli konu Eimza konusudur.
Eimza tamamen küçük gibi görünen ama çok zor yazılabilen bir yazılımdır. Bileşenleri yazmak sizi çok zorlar. Web tabanlı bir ERP ya da EBYS yazılımınız varsa bu eimza programcığı (java için applet , .NET için ActiveX diyelim öyle anlayın) kullanıcının browser ın da elektronik imzalama anında çalışacak ve makinanın usb sine vb erişebilecek vs vs. Normalde hiçbir browser güvenlik açısından buna izin vermez. Hatta client side çalışan javascriptler bile bunu yapamaz yapmamalı. Ama konu eimza ise o zaman bir applet yazacaksınız mutlaka. Bu applet çalıştığı an kullanıcıdan o makinada işlem yapması için izin isteyecek (ya da ayarlara göre istemeyecek) ve işlerini yapacak.
Burada size böyle bir applet yazmanın biraz mimarisinden ve biraz da kodlamasından bahsedeceğim. Zaten işin en büyük ipucu kısmı var ve bunu da belirteceğim. Gerisi size kalıyor. Bu eimza yı bir şirkete yazdırırsanız size oldukça güzel bir paraya mal olur. Olmasına olur da kaynak kodunu verir mi bilinmez. Ayrıca yazmakla bitmiyor KAMUSM den bunu onaylatmanız gerekiyor ki tam 150-200 kurala uyup uymadığı hem de bir yazılım üzerinde test ile onaylanıyor. Hakikaten bu da zor iş aynen EBYS için alınacak TS 13298 sertifikası gibi. Ayrıca bu onay ve sertifikalar öyle ömür boyu değil bildiğim en fazla 2 sene !. Yani 2 sene sonra tekrar aynı işlemler ve onay süreci başlar. Arada SHA vb algoritma değişiklikleri olur ise KAMUSM size buna göre tekrar yapm diyebilir ona göre..
Şimdi bu eimza yı nasıl kodlarız ilk anda neler gerekli ona bakalım..
KAMUSM bir devlet kuruluşu ve bu tür yazılımları onaylıyor. Ancak bu işi yapacak kütüphanelerin yazılmasını da onaylı firmalara veriyor. Kendisinde de benzer kütüphaneler var ki onları da kullanabilirsiniz. Ancak destek almanız zor olabilir. Yani siz kendi applet ve kütüphanenizi buna göre yazacaksınız. Gidip bu 3. Firmadan kütüphane alacaksınız ve kendi yazacağınız yazılımlar bunun içindeki kodları çağırıp gerekli kontrolleri yapar. Bizim tarafımız elektronik imza kartı veya USB deki kullanıcı elektronik imzasının şifre vb kontrollerini yapar. Ve sonrasında bu 3. Parti kütüphaneyi kendi yazdığımız kütüphane fonksiyonları içinden çağırırız. (Çünkü bu eimzanın applet yazılımının kamusm den onayı için bu işin böyle olması şart) Bu tür bir 3. Firma örneğin Turktrust olabilir ve onunda ARNICA isimli böyle bir DLL kütüphanesi var. Onu edinebilirsiniz.
EBYS veya ERP nizin .NET ile yazıldığını varsayarak java, C++ ve .NET gibi 3 değişik yazılım teknolojisine göre anlatmaya çalışacağım ki en karmaşık durumda dahi çözüm bulabilesiniz.
Kullanıcı EBYS ile dokumanı ekrana getirecek, USB ye eimza sını içeren bir USB takar, web de dokuman ekranda iken imzala butonuna tıklanır, kullanıcı şifresini girer, şifre applet ile test edilir, ve OK ise gerekli kontroller bizim applet tarafından (applet java) bizim diğer .NET kütühanemizi çağırır ve .NET kütüphanesi de TURKTRUST dan ARNICA yazılımının metodlarını çağırır ve bu da OK ise dokuman elektronik olarak imzalanır. Yalnız burada şart olan bu imzalanacak dokumanın imzalama öncesinde mutlaka kullanıcının lokal bilgisayarında olması gerekir !. Applet diskten alıp işlemleri üzerinde yapar sonra tekrar aynı dosyanın üzerine kaydeder.
O zaman başlayalım : Eimza Applet uygulaması,online projelerde kullanılmak üzere geliştirilmiş applet uygulaması olacaktır.Uygulama 3 katmanlı mimari gibi düşünülebilir. En üst katman java applet,ara katman c++ ile yazılmış köprü katmanı (işte ipucu bu),en alt katmanda ise imzalama işini gerçekleştiren .net ile kütüphanesidir. Ara katmanımız sadece köprü görevini görmekte java ile .net’in haberleşmesini sağlamaktadır.Sistem javascript fonksiyonlarının java applet fonksiyonlarını çağırıp,.net kütüphanesine işlemi yaptırdıktan sonra ekran cıktısını vermektedir.Kullanıcı arayüzü applet ile değil,temel html elemanları ile oluşturulmalıdır.
C++ katmanı ve .NET fonksiyonlarının çağrılması ve yaptığı işin daha fazla detayını yazalım:
Bu katman işlevi java applet ile .net kütüphanesi arasında köprü görevidir.Bu katmanda iki tane fonksiyon tanımlayacaksınız Java_OurLibraryJavaEntegration_runFunction ve Java_OurLibraryJavaEntegration_getFunctionInfo’dır.Katman .net interface’ini baz alarak parametreleri .net kütüphanesine taşır,sonuçları tekrar java applet’e iletilir.
Anlayanlar anladı. Böyle bir bridge katmanın örnek kodlarını internetten arayıp bulma işi de size ait. Ben tekniği yazarım siz de neyi araştırıp öğrenmeniz gerektiğini bilerek ararsınız !.
Şimdi de Java Applet fonksiyonları ve yüklenirken gerçekleşen işlemler nedir onu yazalım
Java applet sadece C++ katmanına method çağrısı göndermek için tasarlanmıştır. Arayüzsel hiçbir işlem yapmayacaktır. Applet çalışmaya başlarken test için koyduğumuz http://IPadresiburaya/OurLibraryApplet/appletlibs.zip URL inden gerekli zipli dosyaları açılan browser’un kurulum dosyalarının(startup) bulunduğu klasöre indirir ve örneğin AppletLibs diye bir klasöre açar. Bu klasörün içinde EImza ve ZamanDamgasi diye iki tane daha klasör ile gerekli dll ve tlb (bu da ne diye soranlar arasın bulsun) dosyaları olmalı.
Not:EImza klasöründeki .crt uzantılı kök dosyaları,kartın imzalanmış olduğu sertifikaya göre değişebilir ona göre.
Şimdi daha ilginç bir duruma geldik. Bazı DLL leri otomatik olarak register etmesi gerekecek bu java applet inin:
AppletLibs klasörü altında calistir.bat adında bir bat dosyası olmalı. Bu bat çalıştığında system32 folderına gerekli dll dosyalarını kopyalar, path e .net frameworkü ve system32 yi ekler ve OurLibraryCs.dll ve OurLibraryCs.tlb dosyalarını ve ActiveX_IMZA_API.dll (Bu bize Turktrust dan gelen ARNICA kütüphanesinde var.) i register eder.
copy msvcp71.dll %SystemRoot%\system32\msvcp71.dll
copy msvcr71.dll %SystemRoot%\system32\msvcr71.dll
path C:\Windows\Microsoft.NET\Framework\v2.0.50727
RegAsm.exe OurLibraryCs.dll /tlb:OurLibraryCs.tlb /codebase
path C:\Windows\System32
regsvr32 ActiveX_IMZA_API.dll
calistir.bat applet içinde aşağıdaki şekilde çalıştırılmalıdır.
Runtime rt = Runtime.getRuntime() ;
String[] cmdArray = new String[]{path +”\\AppletLibs\\calistir.bat”};
File dir = new File(path +”\\AppletLibs”);
Process p = rt.exec(cmdArray, null, dir);
Daha sonra bu klasör içinde bulunan OurLibraryCp.dll dosyasını native olarak yükler. Bu kütüphane yükleme işlemi izin gerektirdiği için aşağıdaki gibi yapılmalıdır.
AccessController.doPrivileged(new PrivilegedAction() {
public Object run() {
try { System.load(System.getProperty(“user.dir”)+”\\appletlibs\\OurLibraryCp.dll”);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
});
Başarılı bir şekilde kütüphane yüklendikten sonra gelen metod çağrıları C++ tarafına iletilir.
Normalde appletler client tarafında bu işleri yapamazlar. Bu işlemleri yapabilmesi için appletin imzalanmış olması (Privileged applets) gerekmektedir. Aşağıdaki işlemlerle adım adım key oluşturup applet in jar dosyası imzalanır. (Applet jarı her export edildiğinde imzalama işlemi tekrarlanmalıdır.)
keytool -genkey -keystore OurLib -alias ourl
keytool -selfcert -keystore OurLib -alias ourl
jarsigner -keystore OurLib OurLib.jar ourl
NOT : Web projelerinde kullanılan,applet Ourlibrary kütüphanesini indirip dll’i otomatik register eder/etmeli yani ona göre düşünün.
Şimdi yukarıdaki yazımızı için kısa bir derleme ve özetleme yazalım ki daha iyi anlaşılsın
İmza süreci kısaca şu şekildedir.Kullanıcı,İmzala butonuna tıkladıgında karttaki (veya USB deki ) sertifikalar listelenir,kullanılacak sertifika seçilip pin girişi yapılarak imzalama işlemi başlatılır.Imza tipine göre(Pdf veya Cms) imzalama yapılıp uygulamaya geri dönüş yapılır.
Uygulamalar,Eimza uygulamasını kullanırken 6 temel fonksiyonu çağırmaktadır.Bu fonksiyonlar EImzaGeneralFunction(Pdf Imzalama), EImzaCMS, EImzaVerify, EImzaCreateArchiveStructure(Cms imzalamada) EImzaGetallCertsinCardFunction, EImzaShowCertificationFunction.
Kütüphanenin .net ortamında C# ile yazıldığını varsayıyorum..Kütüphanenin bircok yerden çağrılabilmesi için(Oracle Forms,Applet,.Net uygulamaları) .net com dll olarak tasarlanmıştır..Com dll’in diğer platformlarla haberleşebilmesi için C++ ile bridge görevini üstlenecek OurLibraryCp.dll’i yazılmıştır.
Şimdi de yukarıda hazırladığımız bileşenlerle bir test yazılımı hazırlayıp bir dokümanı nasıl imzalarız ona bakalım:
Test uygulamasına dll aşağıdaki gibi eklenir. Yani bir C# projesi açıyoruz ve örneğin OurTest.CS oluşturup içine aşağıdaki kodları yazıyoruz.
[DllImport(“OurLibraryCp.dll”, EntryPoint = “runFunction”, SetLastError = true)]
private extern static string runFunction(string functionCode, string parameters);
[DllImport(“OurLibraryCp.dll”, EntryPoint = “getFunctionInfo”, SetLastError = true)]
private extern static string getFunctionInfo(string functionCode);
Aşağıda fonksiyonların çağrılması ile bir örneği görebilirsiniz(OurTest.CS)
if (!string.IsNullOrEmpty(txtZamanDamgasiUrl.Text) && !string.IsNullOrEmpty(txtZamanDamgasıUsername.Text) && !string.IsNullOrEmpty(txtZamanDamgasiSifre.Text))
{
string result = runFunction(“EImzaCMS”,
txtPin.Text + “*” + file + “*” + fileresult + “\\” +
Guid.NewGuid().ToString() + “.sia” +
“*” + txtZamanDamgasiUrl.Text
/* Ornegin : “http://zdsa1.test.kamusm.gov.tr/”*/+
“*” + txtZamanDamgasıUsername.Text /*”85″ */+
“*” + txtZamanDamgasiSifre.Text /*”,xyzsifre..”*/+
“*” + “0” +
“*” + “64” +
“*” + “0”
);
MessageBox.Show(result);
}
Şimdi OurLibraryCS isimli kütüphane yazılımımızda yukarıda anlattığımıza göre neler var ona bakalım:
OurLibrary projesi com kütüphanesidir.Bu kütüphanede imzalama fonksiyonlarının dışında döküman yönetim sistemleri işini yapan fonksiyonlar(WriteDoc,ReadDoc,Update vs) ve Stratejik Planlama işlemlerini yapan fonksiyonlar bulunmalı. Bu kütüphanede Factory Method patterni kullanabilirsiniz. .EImzaFunctionEnum class’ında yer alan enum değerlere göre ilgili işlemin objesi yaratılır-oluşturulur.
public static FunctionBase getFunction(EImzaFunctionEnum functionCode, string parameterString)
{
switch (functionCode)
{
case EImzaFunctionEnum.EImzaPlugin:
return new EImzaPluginFunction(parameterString);
break;
case EImzaFunctionEnum.EImza:
return new EImzaFunction(parameterString);
break;
case EImzaFunctionEnum.EImzaGeneral:
return new EImzaGeneralFunction(parameterString);
break;
case EImzaFunctionEnum.EImzaShowCertification:
return new EImzaShowCertFunction(parameterString);
break;
case EImzaFunctionEnum.EimzaGetAllCertsinCardFunction:
return new EImzaGetAllCertsinCardFunction(parameterString);
break;
.
.
.
.
}
return null;
}
Yaratılan obje üzerinden örneğin imza işlemi ise ilgili parametreler oluşturularak OurLibraryCS kütüphanesi içindeki ilgili metod içinde örneğin singleton bir obje oluşturularak ona aktarılır.
ESignBase signBase = ESignFactory.GetESignTypeInstance(ESignTypeEnum.Pdf);
SingletonObject.SignParams.Pin = pin;
SingletonObject.SignParams.EkBilgi = ekbilgi;
SingletonObject.SignParams.ImzaGenislik = width;
SingletonObject.SignParams.OrijinalDosya = imzalanacakPdfDosya;
SingletonObject.SignParams.ImzalanmisDosya = imzalanacakPdfDosya;
SingletonObject.SignParams.KokSertifikalari = kokSertifikalari;
SingletonObject.SignParams.Kutuphane = kutuphane;
SingletonObject.SignParams.ImzaLogo = imzaLogo;
SingletonObject.SignParams.ImzaHavale = imzaHavale;
SingletonObject.SignParams.ImzaSayfaNo = pageNo;
SingletonObject.SignParams.ImzaX = xCoordinate;
SingletonObject.SignParams.ImzaY = yCoordinate;
SingletonObject.SignParams.LogoAdres = “”;
SingletonObject.SignParams.ImzaYukseklik = height;
SingletonObject.SignParams.ImzaZamanDamgasi = true;
SingletonObject.SignParams.SertifikaIndeks = sertIndeks;
SingletonObject.SignParams.ZamanDamgasiKullanici = timeStampKullanici;
SingletonObject.SignParams.ZamanDamgasiSifre = timeStampSifre;
SingletonObject.SignParams.ZamanDamgasiUrl = timeStampURL;
SingletonObject.SignParams.LogoByte = logoBytes;
_result = signBase.SignStart();
Ayrıca yukarıdaki koda göre bir de enum tanımlarsınız ki PDF için mi CMS için mi imzalama isteniyor..
public enum ESignTypeEnum
{
Pdf,
Cms
}
Cms imzalama kısaca elektronik imzanın dosya tipi farketmeksizin bütün belgelere imza atabilme özelliğine denir bunu da belirtelim.(Örn:.jpg,tiff,word,txt,exe,avi..vs )
OurLibraryCs kutuphanesinde yer alan EimzaGeneralFunction,bizim web veya windows formlarımızdan gelen parametrelere göe pdf belgeye elektronik imza atma işlemini yapar.İmzalama işleminde,TurkTrust apisi olan ArnicaPdf’I ve Cms imza için ArnicaCs kütüphanelerini kullanmaktayız
Yani PDF imzalama için kütüphanede bir PDF nesnemiz ve property leri vb olmalı. CMS içinde aynısı geçerli. PDF için örneğin şu adımlar takip edilmeli :
- Bu nesneden bir obje create etmeliyiz (instance). Örnek:
pdfin = new PDFImzaNesnesi(); - Akıllı kart Firma Kütüphanesinin yüklenmesi. Örnek
short s = pdfin.akilliKartFirmaKutuphanesiYukle(firmaKutuphanesiDosyaAdi);
.. Error control vb
- Akıllı kart slot sayısının alınması
Sistem imzalama işlemi için slot açar..
Örnek Kod Bloğu
short slotSayisi = pdfin.slotSayisiAl();
- Akıllı kart Oturum açılması.
Akıllın kartın oturumunun açılması adımıdır.Parametre olarak slot sayısını alır. EImzaConfig dosyasına bakarak kartı açmaya çalışır
- Kök sertifikaların yüklenmesi.
Sistem iki tip kök sertifikaları yükler.Bunlar Root kökler ve Alt köklerdir.EImzaConfig.xml dosyasında tanımlanmıs Root kökü yükler,daha sonra otomatik olarak internet üzerinden ilgili alt kökü yükler
- İmzalama işlemi yapılmadan önce sertifikanın doğrulanması işlemini yapar.Parametre olarak slot sayısı(default 0 gönderiyoruz) ve karttaki hangi sertifika seçildiyse onun indeksi gönderilir.Dönüş olarak web veya windows formunuza olumlu veya olumsuz mesaj gönderilir.
Örnek kod bloğu :
s = pdfin.karttakiSertifikayiDogrula(0, sertIndeks);
- Karttaki Sertifikanın Nitelilik kontrolünü yapar.Parametre olarak slotsayısı ve sertifika indeksini alır.
Örnek kod bloğu :
int resp = pdfin.karttakiSertifikaNitelikKontroluYap(0, sertIndeks);
- Karttaki sertifikanın,sertifika ilke kontrolünü yapar.Eğer sorun ile karşılaşılırsa hata mesajını döndererek imzalama işlemini sonlandırır.Parametre olarak slot sayısı ve sertifika indeksini alır.
Örnek kod bloğu :
resp = pdfin.karttakiSertifikaIlkeKontroluYap(0, sertIndeks);
- Karttaki sertifikanın anahtar kullanım kontrolünü yapar. Eğer sorun ile karşılaşılırsa hata mesajını döndererek imzalama işlemini sonlandırır.Parametre olarak slot sayısı ve sertifika indeksini alır.
Örnek kod bloğu:
resp = pdfin.karttakiSertifikaAnahtarKullanimKontroluYap(0, sertIndeks)
- Karttaki sertifikanın OCSP sorgusunu yapar.Bu adımda sistem online OCSP sunucunu Eğer sorun ile karşılaşılırsa hata mesajını döndererek imzalama işlemini sonlandırır.Parametre olarak slot sayısı ve sertifika indeksini alır.
Örnek kod bloğu:
s = pdfin.karttakiSertifikaOCSPSorgusuYap(0, sertIndeks);
- Karttaki sertifikanın SİL kontrolünü yapar.Bu adımda sistem bir önceki adımda eğer hata mesajı olarak OCSP_ADRESI_BULUNAMADI veya OCSP_BAGLANTISI_KURULAMADI alırsa sistem sil kontrolü yapar.Sil kontrolü çevrimdışı sertifikanın geçerliliğini bir dosyaya bakarak otomatik olarak yapar. Parametre olarak slot sayısı ve sertifika indeksini alır.
Örnek kod bloğu :
pdfin.karttakiSertifikaCRLKontroluYap(0, sertIndeks);
- Karttaki sertifikanın kök-alt kök kontrolleri yapılır. Eğer sorun ile karşılaşılırsa hata mesajını döndererek imzalama işlemini sonlandırır.
Örnek kod bloğu :
s = pdfin.eshsZinciriGecerlilikKontroluYap();
- Bu adımda kart ile ilgili nitelilik vs kontrolleri başarı ile gerçekleştiyse imzalama işleminden önce karta login olunur.Parametre olarak slot sayısı ve pin alır. Eğer sorun ile karşılaşılırsa,pin yanlış veya bloke hata mesajlarını döndererek imzalama işlemini sonlandırır.
Örnek kod bloğu :
s = pdfin.akilliKartLogin(0, pin);
- Bu adımda imzalama işlemi yapılır.
pdfin.karttaPDFDosyasiImzala(parametreler…….)
Benzer işlemler CMS için de KAMUSM ve ARNICA ya göre yapılmalı, ilgili metodlar CMS için de oluşturulmalı.
Yani imza doğrulama işlemleri, sertifikaları getir vb için de metodlar yazılmalıdır. Doğrulama için PDF ve CMS farklı işlemler gerektirir. Sertifikaları getirme için PDF ve CMS metodları benzerdir. Sertifika göster işlemi yine ikisi için de benzerdir.
Son önemli nokta ise Arşiv oluşturma işlemidir. Elektronik imza ile imzalanmış belgelerin uzun süreli geçerli olmasını sağlamak için belgelerin arşiv zaman damgası ile arşivlenmesi gerekmektedir ve arşivlenmiş belgenin belirli dönemlerde kontrol edip gerekiyorsa arşivlenmenin yapılması gerekmektedir. Bunun için zaman damgasi metodlarının da yazılması gerekmektedir.
Hepsi bu kadar !. Sonuçta size tam bir yazılım vereceğimi düşünmediğinize sevindim. Bundan daha ötesi size balığın nasıl tutulacağını göstermiş oldum.
Peki testlerde ne gibi problemler olabilir ve bu problemleri nasıl çözebiliriz diye bakalım ister misiniz?
- Karttaki ( veya Eimzanız USB de olabilir) sertifikaların getirilememesi.
Bu sorun sorun yüksek ihtimal kurulumdan kaynaklanmaktadır.Kütüphanenin,driverin vs. kuruldugundan,config dosyaların doğru ayarlanğından,gerekirse kartın kendi uygulamasından çalışmasının kontrol edildiginden,calistir.bat ‘ın çalışıtırıldığından vs durumlardan emin olunmalıdır.
- Hata Mesajı: Zaman damgasi eklenemedi.Hata kodu = 4 Zaman damgası talebi sunucu tarafından reddedilmiştir.
Eğer böyle bir hata ile karşılaşılırsa ve zaman damgasi bilgileri veritabanında ise o zaman veritabanından zaman damgası ile ilgili alanlar kontrol edilmelidir.Eksikler giderilmeli,url browserda açılıp test edilmelidir.Gerekirse,KamuSm aranıp bilgiler teyit edilmelidir.
- Hata Mesajı :Eimza işleminin aktif olabilmesi için kartı takıp, uygulamayı yeniden başlatınız.
Bu standart bir kütüphane hatasıdır.Herhangi bir durumda beklenmedik bir problemle karşılaşılırsa bu hatayı alırsınız,bu durumda uygulamayı kapatıp,açmanız sorunu giderecektir.
- Hata Mesajı : Sertifika güvenilir ESHS sertifikaları ile doğrulanamamıştır.
- Eimza sürecinde böyle bir karşılaşırsanız,sorun muhtemelen EImzaConfig dosyasında belirttiğiniz kök dosyaları ile ilgilidir.
Karttaki sertifikayı görüntülediğinizde (böyle bir görüntüleme ekranınız da olmalı) sertifika yoluna bakılır.Orada bazı sertifikaların sürümleri farklı olabiliyor.Bunu değiştirmeniz gerekmektedir.
Örneğin; EImzaConfig.xml dosyamızdaki aşağıdaki satır eğer farklı bir sürüm ise değiştirilmesi gerekir.
<KOKCERT_1>KOKSHS.crt</KOKCERT_1> à<KOKCERT_1>kokshsxyz.v4.crt</KOKCERT_1>
Not : Ayrıca imzala işleminin türktrust ile mi,kamusm ile mi yapılacağı bilinmelidir.Çünkü config dosyaları değişebilir.Bir başka önemli nokta ise bazı kurumlar hem kamusm hem de turktrust kullanabiliyor.Eğer aynı client üzerinde her ikisinde de çalışılması isteniyorsa TurkTrust için EImzaConfig.xml ,kamusm için EImzaConfigKamuSm.xml olarak iki tane config dosyası ayarlanmalıdır.Tek bir kart ile çalışılacaksa hangisi oldugu farketmez config dosyası EImzaConfig.xml olmalıdır.
Sağlıcakla kalın..
Selcuk Celik
Sayın hocam verdiğiniz bilgiler gerçekten çok değerli. Her zaman devamını beklerim. Size bir sorum var. MEB in kullandığı DYS sistemi java güncellemesi olduğu zaman çalışmıyor. java 6 ile çalışması gerekiyor. Bana çok saçma geldi. yeni sürümler paralımı ki güncel javalarla çalışmıyor.
Merhaba, verdiğiniz bilgiler için teşekkürler. Php için E-imza ile girişi araştırıyorum bununla alakalı bir bilginiz veya öneriniz var mı? Teşekkürler.
Eger altyapiyi php ile dusunuyorsan maalesef olmaz.. cunku yazilim derlenmis bir dll vb ile hash benzeri yapi ile onaylama otoritesi tarafindan kayda aliniyor.. c++, java veya c# gibi dillerle yapilmali..