KasallikKasalliklar haqida sodda tilda gaplashamiz

Sog’liqni saqlash standartlari: xavfsiz rozetka qo’ng’iroqlarini ushlab turish

Transport Layer Security – bu men Cross Enterprise Document Sharing (XDS) birinchi nashridan beri ishlayotgan narsadir. Birinchi Connectathon uchun biz XDS aloqa kanallarini himoya qila olishimizni namoyish qilishimiz kerak edi va men bu qism bilan kurashdim. Shunday qilib, men o’zimning birinchi blogim deb hisoblanishi mumkin bo’lgan narsalarni yozdim, bu ATNA FAQ. O’shandan beri men Java-da […]

0
1

Transport Layer Security - bu men Cross Enterprise Document Sharing (XDS) birinchi nashridan beri ishlayotgan narsadir. Birinchi Connectathon uchun biz XDS aloqa kanallarini himoya qila olishimizni namoyish qilishimiz kerak edi va men bu qism bilan kurashdim. Shunday qilib, men o'zimning birinchi blogim deb hisoblanishi mumkin bo'lgan narsalarni yozdim, bu ATNA FAQ.

O'shandan beri men Java-da TLS dasturlarini amalga oshirish, diagnostika qilish va muammolarni hal qilish bo'yicha ma'lum darajada mutaxassisga aylandim. Mening eng so'nggi muammolarimdan biri ATNA tez-tez so'raladigan savollardagi odatiy usullar ishlamaydigan protokol bilan bog'liq muammolarni tashxislash bilan bog'liq edi, chunki asosiy dastur yoqilgan. Bouncy Castle FIPSva bu odatiy Java -Djavax.net.debug opsiyalariga javob bermaydi Men birinchi marta taxminan 20 yil oldin yozganman. Buning yaxshi sababi bor, lekin nima sodir bo'layotganini ko'ra olmasangiz, disk raskadrovka protokolini amalga oshirishni biroz yirtqich holga keltiradi. Albatta, siz uni wireshark qilishingiz mumkin, lekin siz javob berish xizmatini nazorat qilmasangiz (men bo'lmaganim kabi) bu har doim ham ishlamaydi.

Yechim juda xunuk va u o'z ichiga oladi tutqichlar. Men qilgan narsam mijoz soket fabrikasini qo'lga kiritish, uni o'zimning amalga oshirishim bilan o'rash, Socket yaratish kodiga qo'ng'iroqlarni ushlab turish, ularni qo'ng'iroqlarni qabul qilish uchun kirish va chiqish oqimlarini qabul qiluvchi tutqichlarga o'rash va ularning har birini o'rash edi. chiqishni konsolimga nusxalash uchun kirish yoki chiqish oqimini filtrlaydigan Interceptor.

Bu shafqatsiz zerikarli kod, chunki u ushbu sinflarning HAR amalga oshirilgan umumiy usulini bekor qilishni, asl tutilgan ob'ekt usulini chaqirishni va natijani qaytarishni (yoki juda kam hollarda uni biroz o'zgartirishni) o'z ichiga oladi. Yaxshiyamki, zamonaviy IDElar siz uchun ushbu kodning KO'PROQI yozadi va qidirish va almashtirish uni tugatadi (maxsus holatlar bundan mustasno). Men bu erda har bir qatorni takrorlamayman, lekin men texnikani tushuntiraman.

Birinchidan, men mijozning serverga qo'ng'iroqlari bilan shug'ullanayotganimni tushunib oling va ular HttpsURLConnection-da qurilgan. Java-da dasturlash bilan shug'ullanganlar uchun bu interfeys emas, balki mavhum sinf ekanligini tushunishingiz mumkin va nozik tafsilotlar uning ostida sun.net.www.protocol.http.HttpsURLConnectionImpl ( BTW: Buning uchun manba topishda omad tilaymiz).

Sizning URL ulanishingiz bo'lsa, siz u ishlatayotgan SSL soket zavodini mavjudiga qo'ng'iroqlarni to'xtatib turadigan yangi rozetka zavodi bilan o'rashingiz kerak bo'ladi.

HttpsURLCulanish kong = (HttpsURLConnection)url.openConnection();
agar (disklarni tuzatish) {
kong.setSSLSocketFactory(yangi MySSLSocketFactory(kong.getSSLSocketFactory()));
}

Keyinchalik siz ushbu yangi SSLSocketFactory-ni yaratmoqchisiz:

umumiy sinf MySSLSocketFactory {
xususiy yakuniy SSLSocketFactory bazasi;
MySSLSocketFactory (SSLSocketFactory bazasi) {
this.base = tayanch;
}
...
}

Ushbu sinf ichida siz sinfda amalga oshirilgan har bir usulni bekor qilasiz (Eclipse's Source | Override Implement Methods menyusi buni osonlashtiradi).

Har bir bekor qilish ikkita naqshdan biriga amal qiladi:

@Override
umumiy bekor usuliX (Type0 arg0, Type1 arg1) {
base.methodX(arg0, arg1);
}

Yoki qiymatni qaytarish usullari uchun:

@Override
umumiy TypeR usuliX (Type0 arg0, Type1 arg1) {
return base.methodX(arg0, arg1);
}

CreateSocket usullari uchun siz buni biroz o'zgartirasiz:

@Override
public Socket createSocket(Type0 arg0, Type1 arg1) {
yangi MySocketWrapperni qaytaring (base.methodX(arg0, arg1));
}

Keyinchalik, shunga o'xshash ko'rsatmalarga muvofiq MySocketWrapper yaratasiz. Bu safar siz bekor qilishingiz kerak bo'lgan 60-70 ta usul mavjud (men buni zerikarli deb aytdim, shunday emasmi).

ommaviy sinf MySSLSocketWrapper uzaytiradi SSLSocket {
xususiy final SSLSocket asos;
ommaviy MySSLSocketWrapper(SSLSocket asos) {
bu.asos = asos;
}

@Override
ommaviy InputStream getInputStream() tashlaydi IOException {
qaytish yangi MyInterceptingInputStream(asos.getInputStream());
}

@Override
ommaviy Output Stream getOutputStream() tashlaydi IOException {
qaytish yangi MyInterceptingOutputStream(asos.getOutputStream());
}

// ... Bu yerda xuddi shu nomdagi asosiy usulni chaqirgan holda boshqa bekor qilishlarni qo'shing
}

Nihoyat, avvalgidek MyInterceptingInputStream va MyInterceptingOutputStream sinflarini yarating, kirish yoki chiqishni siz tanlagan boshqa joyga nusxalash uchun o'qish yoki yozish usullarini bekor qiling. Men shunchaki System.err-ga o'qilgan yoki yozilgan narsalarni yozaman, lekin InputStream holatida men konsolimdagi chiqish rangini o'zgartirish uchun oldin va keyin bir nechta qochish ketma-ketligini yozaman, shunda men qaysi oqimni ajrata olaman' ko'ryapman. Mana nima demoqchi ekanligimga misol.

xususiy statik final bayt[] KO‘K = { '\033', '[', '3', '4', 'm' };
  private static final byte[] NORMAL = { '\033', '[', '0', 'm' };
  @Override
  public int read(byte[] b, int o'chirilgan, int len) tashlaydi IOException {
int val = ichida.o'qish(b, o'chirilgan, len);
agar (val > 0) {
harakat qilib ko'ring {
tashqariga.yozmoq(KO‘K);
tashqariga.yozmoq(b, o'chirilgan, val);
tashqariga.yozmoq(NORMAL);
} tutmoq (IOException masalan) {
// Yutib yuboring.
}
}
qaytish val;
}

Endi disk raskadrovkani rost deb belgilaganimda, konsolimda HTTP aloqalari paydo bo'ladi.

Shu hafta oxirida men sizga HttpURLConnection-ni JDK-11-da PATCH-ni qo'llab-quvvatlash uchun amalga oshirgan yana bir hackni ko'rsataman.

#Sogliqni #saqlash #standartlari #xavfsiz #rozetka #qongiroqlarini #ushlab #turish

Javoblar (0 )