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.