E-Devlet'te 'Elektronik İmza ile Giriş' kısmında Java applet kalktığı için masaüstü uygulamasını indirdim ama 'Uygulama çalışırken beklenmeyen bir hata (NullPointerException)' fırlatıyor
2 Cevap
e-Devlet Kapısı masaüstü e-imza uygulamasında karşılaşılan java.lang.NullPointerException hatası, tarayıcılarda NPAPI eklentilerinin (Java Applet) kaldırılmasından sonra devreye alınan yerel masaüstü istemcisinin, işletim sistemindeki PC/SC (Personal Computer/Smart Card) akıllı kart alt sistemi veya PKCS#11 yerel kütüphaneleriyle (native library) el sıkışırken (handshake) nesne referansını başlatamamasından kaynaklanan kritik bir çalışma zamanı istisnasıdır.
1. Kriptografik Mimari ve Hataya Yol Açan Temel Faktörler:
- PKCS#11 / SunPKCS11 Sağlayıcı Başlatma Hatası: e-Devlet yerel istemcisi, Java tabanlı gömülü bir çalışma zamanı (JRE) kullanır. Kart okuyucuyu sorgularken
TerminalFactory.getDefault().terminals().list()metodunu çağırır. Eğer sistemde yüklü sanal akıllı kart aygıtları (örneğin Windows Hello for Business, TPM Sanal Kartı veya sanallaştırma yazılımlarının sanal CCID okuyucuları) varsa, bu çağrı boş liste veya beklenmeyen birnullreferans döndürebilir ve doğrudanNullPointerExceptionfırlatır. - 32-Bit / 64-Bit Kütüphane Mimarisi Uyuşmazlığı: e-Devlet uygulaması 64-bit Java JVM ile derlenmişse, Windows'un
C:\Windows\System32\akisp11.dllveyaeTPKCS11.dllkütüphanesini yüklemeye çalışır. Şayet bilgisayarınızda yalnızca 32-bit kart sürücüsü (SysWOW64) kuruluysa veya DLL bağımlılıklarından biri (örneğin Visual C++ Redistributablemsvcr100.dll) eksikse, JNI (Java Native Interface) katmanı sürücüyü yükleyemez; başlatılmamış nesne üzerinden çağrı yapıldığında uygulama çöker. - Bozulmuş Önbellek ve Profil Konfigürasyonu: Uygulama, kullanıcının ev dizininde daha önceki oturumlara ait kart ATR (Answer to Reset) ve slot kimliklerini önbelleğe alır. Beklenmeyen bir elektrik kesintisi veya yarım kalan oturum, bu yapılandırma XML/JSON dosyalarını bozar.
2. Adım Adım Kesin Çözüm Yöntemi:
- Bozuk Uygulama Önbelleğini Temizleyin:
KlavyenizdenWin + Rtuşlarına basıp%USERPROFILE%yazarak Enter'a basın. Açılan dizinde yer alan gizli.turkiye.govtr,.turkiyegovtrveyaAppData\Local\e-Devlet Kapisi e-İmza Uygulamasiklasörlerini bulun ve tamamen silin. Bu işlem uygulamanın tüm kart yapılandırma önbelleğini sıfırlar. - Çakışan Sanal Akıllı Kart Okuyucularını Devre Dışı Bırakın:
Aygıt Yöneticisi'ni açın (devmgmt.msc). Akıllı Kart Okuyucular kategorisi altına gidin. Eğer listede fiziksel USB token'ınız haricinde 'Microsoft Usbccid Smartcard Reader (UMDF2)' veya 'TPM Virtual Smart Card' gibi sanal okuyucular varsa, bunlara sağ tıklayıp Aygıtı Devre Dışı Bırak deyin. Yalnızca fiziksel e-imza okuyucunuzu aktif bırakın. - Doğru Mimariye Sahip PKCS#11 Sürücüsünü Yükleyin:
TÜBİTAK Kamu SM veya AKİS kullanıyorsanız resmi web sitesinden en güncel 64-bit AKİS yazılımını indirip kurun.C:\Windows\System32\akisp11.dlldosyasının fiziksel olarak mevcut olduğunu doğrulayın. SafeNet kullanıyorsanız SafeNet Authentication Client (SAC) 10.8 veya üzerini yükleyin. - Windows Akıllı Kart Alt Sistemini Yenileyin:
Komut İstemini (CMD) 'Yönetici olarak' açın ve şu komutları sırasıyla çalıştırarak PC/SC hizmetini yeniden başlatın:
net stop SCardSvr
net start SCardSvr
certutil -scinfokomutunu vererek kartın Windows tarafından kriptografik olarak okunduğunu teyit edin. - Uygulamayı Temiz Başlatın:
Tarayıcınızdan e-Devlet giriş sayfasına dönün. 'Elektronik İmza ile Giriş' butonuna tıklayarak istemcinin yeniden sıfırdan konfigüre olmasını sağlayın. Uygulama ATR bilgisini tazeleyecek ve sertifikanızı listeleyecektir.
Mevzuat ve Standartlar Açısından: 5070 Sayılı Elektronik İmza Kanunu ve Bilgi Teknolojileri ve İletişim Kurumu (BTK) Güvenli Elektronik İmza Standartları gereğince, istemci ortamında çalışan tüm yazılımların FIPS 140-2 Level 3 ve CC EAL 4+ sertifikalı Güvenli İmza Oluşturma Araçları (GİOA) ile PKCS#11 v2.20 standardı üzerinden haberleşmesi zorunludur. Yukarıdaki adımlar, Java sanal makinesi ile bu kriptografik donanım arasındaki köprünün sorunsuz kurulmasını sağlar.
Kurumsal makinelerde bu sorunun en yaygın tetikleyicisi Windows Hello for Business ile gelen TPM sanal akıllı kartıdır. e-Devlet istemcisi ilk bulduğu akıllı kart yuvasına (Slot 0) bağlanmaya çalışır ve TPM boş yanıt verince NullPointerException fırlatır.
Hızlı test için PowerShell'i yönetici olarak açıp şu komutla sanal okuyucuyu geçici olarak kapatabilirsiniz:
Get-PnpDevice -Class 'SmartCardReader' | Where-Object { $_.FriendlyName -like '*TPM*' } | Disable-PnpDevice -Confirm:$false
Ardından USB token'ı çıkarıp takıp e-Devlet uygulamasını tekrar çalıştırdığınızda doğrudan fiziksel USB token taranacaktır.