Provayder tomonidan amalga oshirish qanday so'raladi va ta'minlanadi
APIdagi har bir dvigatel klassi uchun dastur namunasi so‘raladi va vosita sinfidagi getInstance usullaridan birini chaqirish orqali kerakli algoritm nomini va ixtiyoriy ravishda provayder (yoki Provayder klassi) nomini ko‘rsatish orqali amalga oshiriladi. amalga oshirish istaydi.
static EngineClassName getInstance(String algorithm)
throws NoSuchAlgorithmException
static EngineClassName getInstance(String algorithm, String provider)
throws NoSuchAlgorithmException, NoSuchProviderException
static EngineClassName getInstance(String algorithm, Provider provider)
throws NoSuchAlgorithmException
bu erda EngineClassName - kerakli vosita turi (MessageDigest/Cipher/etc). Masalan:
MessageDigest md = MessageDigest.getInstance("SHA-256");
KeyAgreement ka = KeyAgreement.getInstance("DH", "SunJCE");
mos ravishda "SHA-256" MessageDigest va "DH" KeyAgreement obyektlarining namunasini qaytaring.
A ilovasida Java muhitida foydalanish uchun standartlashtirilgan nomlar ro'yxati mavjud. Ba'zi provayderlar bir xil algoritmga tegishli taxallus nomlarini ham qo'shishni tanlashi mumkin. Masalan, "SHA256" algoritmini "SHA-256" deb atash mumkin. Ilovalar taxallus o'rniga standart nomlardan foydalanishi kerak, chunki barcha provayderlar algoritm nomlarini bir xil tarzda qo'yishi mumkin emas.
QAYD: Algoritm nomi katta-kichik harflarga sezgir emas. Masalan, quyidagi barcha qo'ng'iroqlar ekvivalentdir:
MessageDigest.getInstance("SHA256")
MessageDigest.getInstance("sha256")
MessageDigest.getInstance("sHa256")
Agar provayder ko'rsatilmagan bo'lsa, getInstance ro'yxatdan o'tgan provayderlarni nomidagi algoritm bilan bog'langan so'ralgan kriptografik xizmatni amalga oshirish uchun qidiradi. Har qanday Java virtual mashinasida (JVM) provayderlar ma'lum bir imtiyozli tartibda o'rnatiladi, agar ma'lum bir provayder so'ralmasa, provayderlar ro'yxatini qidirish tartibi. Masalan, JVM’da ikkita provayder o‘rnatilgan deylik, PROVIDER_1 va PROVIDER_2. Tasavvur qiling:
PROVIDER_1 SHA-256 va DSEde-ni qo'llaydi.
PROVIDER_1 1-tartibga ega (eng yuqori ustuvorlik).
PROVIDER_2 SHA256-ni DSA, SHA-256, RC5 va RSA bilan amalga oshiradi.
PROVIDER_2 2-sonli imtiyozga ega.
Endi uchta stsenariyni ko'rib chiqamiz:
Agar biz SHA-256 ilovasini qidirayotgan bo'lsak, ikkala provayder ham bunday dasturni taqdim etadi. PROVIDER_1 ilovasi qaytarildi, chunki PROVIDER_1 eng yuqori ustuvorlikka ega va birinchi navbatda qidiriladi.
Agar biz DSA imzo algoritmi bilan SHA256 qidirayotgan bo‘lsak, avvalo PROVIDER_1 uni qidiradi. Hech qanday dastur topilmadi, shuning uchun PROVIDER_2 qidirildi. Amalga oshirish topilganligi sababli, u qaytariladi.
Aytaylik, biz SHA256withRSA imzo algoritmini qidirmoqdamiz. Hech bir o'rnatilgan provayder uni amalga oshirmaganligi sababli, NoSuchAlgorithmException yuboriladi.
Provayder argumentini o'z ichiga olgan getInstance usullari qaysi provayderdan algoritm olishni xohlayotganini aniqlamoqchi bo'lgan ishlab chiquvchilar uchundir. Masalan, federal agentlik federal sertifikat olgan provayder dasturidan foydalanishni xohlaydi. Faraz qilaylik, PROVIDER_1’dan SHA256withDSA ilovasi bunday sertifikatni olmagan, PROVIDER_2’ning DSA ilovasi esa uni olgan.
Federal agentlik dasturida quyidagi qoʻngʻiroq boʻladi, unda PROVIDER_2 koʻrsatiladi, chunki u sertifikatlangan dasturga ega:
Imzo dsa = Signature.getInstance("SHA256withDSA", "PROVIDER_2");
Bunday holda, agar PROVIDER_2 o'rnatilmagan bo'lsa, boshqa o'rnatilgan provayder so'ralgan algoritmni amalga oshirsa ham, NoSuchProviderException yuboriladi.
Dasturda barcha o'rnatilgan provayderlar ro'yxatini olish (Xavfsizlik sinfidagi getProviders usulidan foydalanish) va ro'yxatdan birini tanlash imkoniyati mavjud.
DIQQAT: Umumiy maqsadli ilovalar maxsus provayderlardan kriptografik xizmatlarni so'ramasligi kerak. Aks holda, ilovalar boshqa Java dasturlarida mavjud bo'lmagan maxsus provayderlarga bog'lanadi. Ular, shuningdek, ma'lum bir so'ralgan provayderdan ko'ra yuqoriroq afzallik tartibiga ega bo'lgan mavjud optimallashtirilgan provayderlardan (masalan, PKCS11 orqali apparat tezlatgichlari yoki Microsoft MSCAPI kabi mahalliy operatsion tizim dasturlari) foydalana olmasligi mumkin.
Provayderlarni o'rnatish
Foydalanish uchun avval kriptografik provayder o'rnatilishi, so'ngra statik yoki dinamik tarzda ro'yxatdan o'tkazilishi kerak. Ushbu nashr bilan birga yuborilgan turli xil Sun provayderlari mavjud (SUN, SunJCE, SunJSSE, SunRsaSign va boshqalar) allaqachon o'rnatilgan va ro'yxatdan o'tgan. Quyidagi bo'limlar qo'shimcha provayderlarni qanday o'rnatish va ro'yxatdan o'tkazishni tasvirlaydi.
Provayder sinflarini o'rnatish
Provayder sinflarini o'rnatishning ikki yo'li mavjud:
Oddiy Java sinf yo'lida
Sinf yo'lingizning istalgan joyiga sinflarni o'z ichiga olgan zip yoki JAR faylini joylashtiring. Ba'zi algoritm turlari (Ciphers) provayderdan imzolangan Jar fayli bo'lishini talab qiladi.
O'rnatilgan/jamlangan kengaytma sifatida
Provayder, agar u standart kengaytmalar katalogiga joylashtirilgan bo'lsa, o'rnatilgan kengaytma hisoblanadi. JDKda u quyidagilarda joylashgan bo'ladi:
Solaris, Linux yoki Mac OS X: /lib/ext
Windows: \lib\ext
Bu yerda ish vaqti dasturi oʻrnatilgan katalogga ishora qiladi, bu Java Runtime Environment (JRE) ning yuqori darajadagi katalogi yoki Java JDK dasturiy taʼminotidagi jre katalogidir. Misol uchun, agar sizda JDK 6 Solaris-da /home/user1/JDK1.6.0 nomli katalogda yoki Microsoft Windows-da C:\Java\JDK1.6.0 nomli katalogda o'rnatilgan bo'lsa, JAR faylini o'rnatishingiz kerak. quyidagi katalog:
Solaris, Linux yoki Mac OS X: /home/user1/JDK1.6.0/jre/lib/ext
Windows: C:\JDK1.6.0\jre\lib\ext
Xuddi shunday, agar sizda JRE 6 Solaris-da /home/user1/jre1.6.0 nomli katalogda yoki Microsoft Windows-da C:\jre1.6.0 nomli katalogda o'rnatilgan bo'lsa, JAR faylini quyidagi katalogga o'rnatishingiz kerak. :
Solaris, Linux yoki Mac OS X: /home/user1/jre1.6.0/lib/ext
Windows: C:\jre1.6.0\lib\ext
Kengaytmani qanday joylashtirish haqida ko'proq ma'lumot olish uchun Kengaytma qanday o'rnatiladi?
Provayderni ro'yxatdan o'tkazish
Keyingi qadam provayderni ro'yxatdan o'tgan provayderlar ro'yxatiga qo'shishdir. Provayderlar Java ilovasini ishga tushirishdan oldin xavfsizlik xususiyatlari konfiguratsiya faylini tahrirlash orqali statik tarzda yoki ish vaqtida usulni chaqirish orqali dinamik ravishda roʻyxatdan oʻtishlari mumkin. Ish vaqti muhitiga noto'g'ri provayderlarning o'rnatilishini oldini olish uchun provayderni dinamik ravishda ro'yxatdan o'tkazishga urinayotgan ilovalar tegishli ish vaqti imtiyoziga ega bo'lishi kerak.
Statik ro'yxatga olish
Konfiguratsiya fayli quyidagi manzilda joylashgan:
Solaris, Linux, or Mac OS X: /lib/security/java.security
Windows: \lib\security\java.security
Har bir ro'yxatdan o'tgan provayder uchun ushbu faylda quyidagi shakldagi bayonot bo'lishi kerak:
security.provider.n=masterClassName
Bu provayderni e'lon qiladi va uning afzal ko'rish tartibini belgilaydi. Afzallik tartibi - provayderlar so'ralgan algoritmlarni qidirish tartibi (aniq provayder so'ralmaganda). Buyurtma 1 ga asoslangan: 1 eng ko'p afzal, keyin 2 va hokazo.
Dostları ilə paylaş: |