Bu, dökümanın eski bir sürümüdür!
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<byte []> certs = smartCard.getSignatureCertificates(session); for (byte[] bs : certs) { ECertificate cert = new ECertificate(bs); if(cert.isQualifiedCertificate()) System.out.println(cert.getSubject().stringValue()); }
List<byte[]> 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<byte []> 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ı 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.