ESYAE-imza Kütüphaneleri

User Tools

Site Tools


esya:smartcard:karta-erisim

Akıllı Karta Erişim

SmartCard sınıfı akıllı kart ile ilgili işlemlerden sorumlu sınıftır. SmartCard sınfının çalıştırılabilmesi için hangi akıllı kartın kullanıldığının bilinmesi gerekmektedir. Çünkü akıllı kart işlemleri akıllı kartın sürücüsü üzerinden yapılmaktadır. Java 6 ile java kütüphaneleri kullanılarak kart bilgilerine erişilip hangi kart olduğu belirlenebilmektedir. Java 5 ve .NET'te ise hangi akıllı kartın kullanıldığı bilinmelidir.

Java 6 için SmartOp sınıfının findCardTypeAndSlot() fonksiyonu ile kartın slot numarası ve kart tipi bulunabilmektedir. Eğer bilgisayara bir akıllı kart takılı ise fonksiyon doğrudan bu kartın bilgilerini dönecektir. Eğer birden fazla akıllı kart takılı ise javax.swing.JOptionPane ile kullanıcıya akıllı kartlardan biri seçtirilecektir.

Pair<Long, CardType> slotAndCardType = SmartOp.findCardTypeAndSlot();
Long slot = slotAndCardType.getObject1();
SmartCard smartCard = new SmartCard(slotAndCardType.getObject2());
longsession = smartCard.openSession(slot);

Eğer görsel bir arayüzün API tarafından gösterilmesini istemiyorsanız; SmartOp sınıfının getCardTerminals() fonksiyonu ile akıllı kart okuyucularının isimlerini alabilirsiniz. Bu isimler ile kartı kullanıcıya seçtirdikten sonra getSlotAndCardType(String terminal) fonksiyonuyla kullanıcının seçtiği kartın slot numarası ve kart tipi alınabilir.

Eğer kullanıcıya kart tipine göre akıllı kartı seçtirmek isteniyorsa, SmartOp sınıfının findCardTypesAndSlots() ile bağlı olan bütün kartların slot numaralarını ve kart tiplerini alabilirsiniz.

Java 5 ve .NET'te ise akıllı kartın türü bilinmelidir. Aşağıdaki örnek kodda herhangi bir seçim yapılmadan birinci karta oturum açılmaktadır. SmartCard sınıfının getSlotInfo(Long slot) fonksiyonu ile slot hakkındaki bilgiler edinilebilir, buradaki slot tanımlamasıyla kullanıcıdan kart seçmesi istenebilir.

Akıllı kart ile işlem yapmaya başlamak için openSession() fonksiyonu ile oturum açılmalıdır. Karttan sertifika okumak için login olmaya gerek yoktur. Yalnız imza atma veya şifre çözme işlemi yapılacaksa karta login olunmalıdır.

SmartCard sc = new SmartCard(CardType.AKIS);
long [] slots = sc.getSlotList();
//sc.getSlotInfo(slots[0]).slotDescription;
long session = sc.openSession(slots[0]);
sc.login(session, "12345")

Akis Kartlara Erişim

Java 6 kullanıldığında akis kartlara, Akis'in java kütüphanesi kullanılarak komut (APDU) gönderilebilmektedir. Sistemde akis sürücüsü yüklü olmasa bile AkisCIF.x.x.x.jar oldugunda karta erişilmektedir. AkisCIF üzerinden akıllı karta erişmek, akıllı kart işlemlerinin süresini dolayısıyla imza süresini kısaltmaktadır. Yalnız AkisCIF üzerinden karta erişildiğinde diğer programlar karta erişememektedir. Yeni sürüm akis kart kullanmaya başladığınızda AkisCIF'i de yenilemeniz gerekecektir.

Akıllı karta APDU komutları ile AkisCIF.x.x.x.jar üzerinden erişilmesinden APDUSmartCard sınıfı sorumludur. Örnek bir kullanım aşağıdaki gibidir.

 
APDUSmartCard sc = new APDUSmartCard();
long [] slots = sc.getSlotList();
sc.openSession(slots[0]);
List<byte []> certs = sc.getSignatureCertificates();
CertificateFactory cf = CertificateFactory.getInstance("X.509"); 
X509Certificate cert = (X509Certificate)cf.generateCertificate(new ByteArrayInputStream(certs.get(0)));

BaseSignersigner = sc.getSigner(cert, Algorithms.SIGNATURE_RSA_SHA1);

Yukarıda da belirtildiği gibi AkisCIF arayüzü bütün kartları desteklemeyebilir. AkisCIF desteklendiğinde AkisCIF ile desteklenmediğinde dll ile işlemlerinizi yapmak için aşağıdaki şekilde kullanabilirsiniz.

BaseSmartCard bsc = null;
int index = 0;
String [] terminals = SmartOp.getCardTerminals();
String selectedTerminal = terminals[index];
long slot;

if(APDUSmartCard.isSupported(selectedTerminal))
{
	bsc = new APDUSmartCard();
	slot = index + 1;
}
else
{
	Pair<Long, CardType> slotAndCardType = SmartOp.getSlotAndCardType(selectedTerminal);
	slot = slotAndCardType.getObject1();
	bsc = new P11SmartCard(slotAndCardType.getObject2());
}
bsc.openSession(slot);

esya/smartcard/karta-erisim.txt · Son değiştirilme: 2013/08/29 05:15 Değiştiren: Beytullah Yiğit