===== Akıllı Kartan Sertifikanın Okunması ===== Akıllı karttan sertifika ''SmartCard'' sınıfının ''getSignatureCertificates()'' veya ''getEncryptionCertificates()'' fonksiyonları ile okunabilir. Eğer imzalama işlemi yapılacaksa ''getSignatureCertificates()'' fonksiyonu, şifreleme işlemi yapılacaksa ''getEncryptionCertificates()'' fonksiyonu kullanılmalıdır.Bu fonksiyonlar sertifikaların kodlanmış hallerini byte [] olarak dönerler. Eğer ESYA API-ASN modülünü (ma3api-asn-....jar / ma3api-asn.dll) kullanabiliyorsanız, karttan aldığınız byte değerlerini anlamlı hale getirmek için ''ECertificate'' sınıfını kullanabilirsiniz. Atılacak imzanın kanuni yükümlülüklerinin olması için imzalamada kullanılan sertifikanın nitelikli olması gerekmektedir. Bu kontrol ''ECertificate'' sınıfının ''isQualifiedCertificate()'' fonksiyonu ile yapılabilir. ''ECertificate'' sınıfının ''getSubject().stringValue()'' fonksiyonu ile sertifikalar birbirinden ayırt edilebilir. Kullanıcı bu bilgi ile seçim yapabilir. Ayrıca ''ECertificate'' sınıfının ''getSubject().getCommonNameAttribute()'' fonksiyonu, sertifika sahibinin ismini dönmektedir. Karttaki sertifikaların isim bilgisi, tüm sertifikalar için aynı olacağından, karttaki sertifikaları ayırt etmek amacıyla kullanılamaz. İmzayı kimin attığını göstermek için kullanılabilir. Aşağıdaki kod bloğu akıllı kart içinden imzalama sertifikalarını alır ve nitelikli olanların subject alanını ekrana yazar. List certs = smartCard.getSignatureCertificates(session); for (byte[] bs : certs) { ECertificate cert = new ECertificate(bs); if(cert.isQualifiedCertificate()) System.out.println(cert.getSubject().stringValue()); } List certBytes = sc.getSignatureCertificates(session); foreach (byte[] bs in certBytes) { ECertificate cert = new ECertificate(bs); //cert.isQualifiedCertificate() Console.WriteLine(cert.getSubject().getCommonNameAttribute()); } Eğer ESYA API-ASN sınıflarına erişim yoksa, ''ECertificate'' yerine java'nın ''x509Certificate'' sınıfı kullanılabilir. ''ECertificate'' sınıfının ''isQualifiedCertificate()'' fonksiyonu yerine aşağıdaki örnek kodda gösterildiği gibi kontrol yapılabilir. Sertifikaları birbirinden ayırt etmek amacıyla ''x509Certificate'' sınıfının ''getSubjectDN().toString()'' metodu kullanılabilir. Aşağıdaki kod bloğu akıllı kart içinden imzalama sertifikalarını alır ve nitelikli olanların Subject alanını ekrana yazar. List certs = smartCard.getSignatureCertificates(session); CertificateFactory cf = CertificateFactory.getInstance("X.509"); String qcStatement = "1.3.6.1.5.5.7.1.3"; for (byte[] bs : certs) { X509Certificate cert = (X509Certificate)cf.generateCertificate(new ByteArrayInputStream(bs)); if( cert.getExtensionValue(qcStatement) != null) System.out.println(cert.getSubjectDN().toString()); } ==== Akıllı Karttaki Nesne Adlarının Okunması ==== Akıllı kartta bulunan sertifika, açık anahtar ve özel anahtarın her biri nesne olarak adlandırılır. Akıllı karttaki nesnelerin adı ile de işlem yapılabilir. Nesne adları değişken olabileceğinden nesne adları ile işlem yapmak önerilmez. Yalnız bazı durumlarda nesne adları kullanıcıya daha anlamlı gelebilir. ''SmartCard'' sınıfının ''getSignatureKeyLabels(...)'' ve ''getEncryptionKeyLabels(...)'' fonksiyonları ile anahtarların adları okunabilir. Eğer anahtarın, sertifikasının adı anahtarla aynı ise bu ad ile sertifika da okunabilir. Sertifikanın okunması için ''readCertificate(long aSessionID,String aLabel)'' fonksiyonu kullanılabilir.