24.12.2014 Views

Download - Svetlin Nakov

Download - Svetlin Nakov

Download - Svetlin Nakov

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Използване на Sun PKCS#11 Provider без конфигурационен файл<br />

Ако не искаме да използваме външен конфигурационен файл, можем да<br />

зададем настройките на Sun PKCS#11 Provider динамично чрез поток. Ето<br />

пример как може да се направи това:<br />

String pkcs11config =<br />

"name = SmartCard\n" +<br />

"library = c:\\windows\\system32\\pkcs201n.dll";<br />

byte[] pkcs11configBytes = pkcs11config.getBytes();<br />

ByteArrayInputStream configStream = new ByteArrayInputStream(pkcs11configBytes);<br />

Provider pkcs11Provider = new sun.security.pkcs11.SunPKCS11(configStream);<br />

Security.addProvider(pkcs11Provider);<br />

Извличане на KeyStore от смарт карта<br />

След като сме регистрирали и конфигурирали успешно Sun PKCS#11<br />

Provider, можем да го използваме за да извличаме сертификати и ключове от<br />

смарт карта. Това става посредством стандартния в Java клас за достъп до<br />

хранилища java.security.KeyStore.<br />

Ето пример как можем да установим достъп защитено до хранилище за<br />

ключове и сертификати, съхранявано върху смарт карта:<br />

char[] pin = {'1', '2', '3', '4'};<br />

KeyStore smartCardKeyStore = KeyStore.getInstance("PKCS11");<br />

smartCardKeyStore.load(null, pin);<br />

Посоченият сорс код очаква, че Sun PKCS#11 Provider е бил успешно регистриран<br />

и конфигуриран. За прочитането на хранилище от смарт карта е<br />

необходимо да бъде посочен PIN кодът за достъп до картата.<br />

Извличане на сертификат и личен ключ от смарт карта<br />

След като сме установили достъп до хранилището на смарт картата, можем<br />

да извличаме от нея ключове и сертификати, както от обикновено хранилище.<br />

Всички ключове, сертификати и сертификационни вериги са записани<br />

под дадено име (alias) в хранилището. Имената могат да се извличат чрез<br />

итератор.<br />

Ето един пример, в който се извличат и отпечатват всички сертификати от<br />

дадено хранилище заедно с информация за личните им ключове:<br />

KeyStore keyStore = ...;<br />

Enumeration aliasesEnum = keyStore.aliases();<br />

while (aliasesEnum.hasMoreElements()) {<br />

String alias = (String)aliasesEnum.nextElement();<br />

System.out.println("Alias: " + alias);<br />

X509Certificate cert = (X509Certificate) keyStore.getCertificate(alias);<br />

System.out.println("Certificate: " + cert);<br />

PrivateKey privateKey = (PrivateKey) keyStore.getKey(alias, null);<br />

System.out.println("Private key: " + privateKey);<br />

}<br />

60

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!