Download - Svetlin Nakov
Download - Svetlin Nakov
Download - Svetlin Nakov
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