JavaRush /جاوا بلاگ /Random-SD /HTTP کان HTTPS تائين
Viacheslav
سطح

HTTP کان HTTPS تائين

گروپ ۾ شايع ٿيل
HTTP کان HTTPS تائين - 1
مواد:

تعارف

جديد دنيا ۾، توهان ويب ايپليڪيشنن کان بغير نٿا رهي سگهو. ۽ اسان هڪ ننڍڙي تجربي سان شروع ڪنداسين. هڪ ٻار جي حيثيت ۾، مون کي ياد آهي ته ڪيئن سڀني اسٽالن هڪ اخبار "دليل ۽ حقيقت" وانگر وڪرو ڪيو. مون کي اهي ياد اچي ويا ڇو ته، منهنجي ننڍپڻ کان ئي ذاتي خيال موجب، اهي اخبارون هميشه عجيب لڳنديون هيون. ۽ مون فيصلو ڪيو ته ڇا اسان کي انهن جي ويب سائيٽ تي وڃڻ گهرجي:
HTTP کان HTTPS تائين - 2
جيڪڏهن اسان گوگل ڪروم جي مدد تي وڃون ٿا، اسان پڙهي سگهنداسين ته هي سائيٽ محفوظ ڪنيڪشن استعمال نه ڪندي آهي ۽ معلومات جيڪا توهان سائيٽ سان مٽائي سگهو ٿا ٽئين پارٽين تائين رسائي ٿي سگهي ٿي. اچو ته ڪجهه ٻيون خبرون چيڪ ڪريون، مثال طور سينٽ پيٽرسبرگ جون خبرون فونٽنڪا کان، هڪ اليڪٽرانڪ ميڊيا:
HTTP کان HTTPS تائين - 3
جئين توهان ڏسي سگهو ٿا، Fontanka ويب سائيٽ انهن ڊيٽا جي بنياد تي ڪو به سيڪيورٽي مسئلو ناهي. اهو ظاهر ٿئي ٿو ته ويب وسيلن محفوظ ٿي سگهي ٿو يا نه. اسان اهو پڻ ڏسون ٿا ته غير محفوظ وسيلن تائين رسائي HTTP پروٽوڪول ذريعي ٿئي ٿي. ۽ جيڪڏهن وسيلا محفوظ آهي، ته پوء ڊيٽا مٽائي ويندي آهي HTTPS پروٽوڪول استعمال ڪندي، جتي S جي آخر ۾ مطلب آهي "محفوظ". HTTPS پروٽوڪول rfc2818 وضاحت ۾ بيان ڪيو ويو آهي: " HTTP مٿان TLS ". اچو ته اسان جي پنهنجي ويب ايپليڪيشن ٺاهڻ جي ڪوشش ڪريون ۽ پاڻ ڏسو ته اهو ڪيئن ڪم ڪري ٿو. ۽ رستي ۾ اسان شرطن کي سمجھندا سين.
HTTP کان HTTPS تائين - 4

جاوا ۾ ويب ايپليڪيشن

تنهن ڪري، اسان کي جاوا ۾ هڪ تمام سادي ويب ايپليڪيشن ٺاهڻ جي ضرورت آهي. پهرين، اسان کي خود جاوا ايپليڪيشن جي ضرورت آهي. هن کي ڪرڻ لاءِ، اسان استعمال ڪنداسين Gradle پروجيڪٽ جو خودڪار بلڊ سسٽم. اهو اسان کي دستي طور تي ضروري ڊاريڪٽري ڍانچي ٺاهڻ جي اجازت نه ڏيندو + Gradle اسان لاءِ پروجيڪٽ لاءِ ضروري سڀني لائبريرين کي منظم ڪندو ۽ يقيني بڻائيندو ته اهي دستياب آهن جڏهن ڪوڊ تي عمل ڪيو وڃي. توهان هڪ مختصر جائزو ۾ Gradle بابت وڌيڪ پڙهي سگهو ٿا: " گريڊل جو مختصر تعارف ". اچو ته استعمال ڪريون Gradle Init پلگ ان ۽ هلون حڪم:
gradle init --type java-application
ان کان پوء، اچو ته بلڊ اسڪرپٽ کوليو build.gradle، جيڪو بيان ڪري ٿو ته اسان جي پروجيڪٽ ۾ ڪهڙيون لائبريريون شامل آهن، جيڪي Gradle اسان کي فراهم ڪندي. اچو ته اتي ويب سرور تي هڪ انحصار شامل ڪريون جنهن تي اسين تجربا ڪنداسين:
dependencies {
    // Web server
    implementation 'io.undertow:undertow-core:2.0.20.Final'
     // Use JUnit test framework
     testImplementation 'junit:junit:4.12'
}
ھڪڙي ويب ايپليڪيشن لاءِ ڪم ڪرڻ لاءِ، اسان کي ضرور ھڪڙي ويب سرور جي ضرورت آھي جتي اسان جي ايپليڪيشن کي ھوسٽ ڪيو ويندو. ويب سرورز جي هڪ وڏي قسم آهن، پر مکيه آهن: Tomcat، Jetty، Undertow. هن ڀيري اسان چونڊ ڪنداسين Undertow. اهو سمجهڻ لاءِ ته اسان پنهنجي هن ويب سرور سان ڪيئن ڪم ڪري سگهون ٿا، اچو ته وڃون سرڪاري Undertow ويب سائيٽ ۽ وڃو دستاويز سيڪشن . توهان ۽ مون انڊرٽو ڪور تي انحصار سان ڳنڍيو آهي، تنهنڪري اسان هن ئي ڪور بابت سيڪشن ۾ دلچسپي رکون ٿا ، اهو آهي، بنيادي، ويب سرور جو بنياد. انڊرٽو لاءِ بلڊر API استعمال ڪرڻ جو آسان طريقو آهي:
public static void main(String[] args) {
	Undertow server = Undertow.builder()
            .addHttpListener(8080, "localhost")
            .setHandler(new HttpHandler() {
                @Override
                public void handleRequest(final HttpServerExchange exchange) throws Exception {
                    exchange.getResponseHeaders().put(Headers.CONTENT_TYPE, "text/plain");
                    exchange.getResponseSender().send("Hello World");
                }
            }).build();
    server.start();
}
جيڪڏهن اسان ڪوڊ تي عمل ڪريون ٿا، اسان هيٺ ڏنل ويب وسيلن ڏانهن نيويگيٽ ڪري سگهون ٿا:
HTTP کان HTTPS تائين - 5
اهو سادو ڪم ڪري ٿو. Undertow Builder API جي مهرباني، اسان لوڪل هوسٽ ۽ پورٽ 8080 ۾ HTTP ٻڌندڙ کي شامل ڪيو. هي ٻڌندڙ ويب برائوزر کان درخواستون وصول ڪري ٿو ۽ جواب ۾ "هيلو ورلڊ" اسٽرنگ واپس ڪري ٿو. عظيم ويب ايپليڪيشن. پر جيئن اسان ڏسون ٿا، اسان HTTP پروٽوڪول استعمال ڪندا آهيون، يعني. ڊيٽا جي بدلي جي هن قسم جي محفوظ نه آهي. اچو ته ڄاڻون ته ايڇ ٽي پي ايس پروٽوڪول استعمال ڪندي ايڪسچينج ڪيئن ڪيا ويندا آهن.
HTTP کان HTTPS تائين - 6

HTTPS لاءِ گهرجون

سمجھڻ لاءِ ته HTTPS کي ڪيئن چالو ڪجي، اچو ته واپس اچون HTTPS وضاحتن ڏانھن: " RFC-2818: HTTP مٿان TLS ". وضاحت جي مطابق، HTTPS پروٽوڪول ۾ ڊيٽا کي منتقل ڪيو ويو آهي cryptographic پروٽوڪول SSL يا TLS. ماڻهو اڪثر SSL ۽ TLS جي تصور کان گمراهه آهن. حقيقت ۾، ايس ايس ايل ترقي ڪئي ۽ ان جي نسخن کي تبديل ڪيو. بعد ۾، TLS SSL پروٽوڪول جي ترقي ۾ ايندڙ قدم بڻجي ويو. اهو آهي، TLS صرف SSL جو هڪ نئون نسخو آهي. وضاحت ائين چوي ٿو: "SSL، ۽ ان جي جانشين TLS". تنهن ڪري، اسان سکيو ته اتي آهن SSL/TLS cryptographic protocols. SSL Secure Sockets Layer جو مخفف آهي ۽ ترجمو ڪري ٿو ”سيڪيور ساکٽ پرت“. انگريزيءَ مان ترجمو ٿيل ساکٽ هڪ ڪنيڪٽر آهي. نيٽ ورڪ تي ڊيٽا جي منتقلي ۾ حصو وٺندڙ ساکٽ کي پروگرامنگ انٽرفيس جي طور تي استعمال ڪندا آهن (يعني هڪ API) نيٽ ورڪ تي هڪ ٻئي سان رابطو ڪرڻ لاءِ. برائوزر ڪلائنٽ جي طور تي ڪم ڪري ٿو ۽ ڪلائنٽ ساکٽ استعمال ڪري ٿو، ۽ سرور جيڪو درخواست وصول ڪري ٿو ۽ جواب جو مسئلو سرور ساکٽ استعمال ڪري ٿو. ۽ اهو انهن ساکٽس جي وچ ۾ آهي ته ڊيٽا جي بدلي ٿيندي آهي. ان ڪري پروٽوڪول کي اصل ۾ SSL سڏيو ويو. پر وقت گذري ويو ۽ پروٽوڪول ترقي ڪئي. ۽ ھڪڙي نقطي تي، SSL پروٽوڪول TLS پروٽوڪول بڻجي ويو. TLS ٽرانسپورٽ پرت سيڪيورٽي لاء مختصر آهي. TLS پروٽوڪول، موڙ ۾، SSL پروٽوڪول جي وضاحت ورزن 3.0 تي ٻڌل آهي. TLS پروٽوڪول الڳ مضمونن ۽ جائزن جو موضوع آهي، تنهن ڪري مان صرف انهن مواد جي نشاندهي ڪندس جيڪي مون کي دلچسپ لڳي: مختصر ۾، HTTPS جو بنياد آهي TLS هٿ ملائڻ ۽ "سرور جي سڃاڻپ" چيڪ (يعني، سرور جي سڃاڻپ) ان جي ڊجيٽل سرٽيفڪيٽ استعمال ڪندي. اهو ضروري آهي. اچو ته اهو ياد رکون، ڇاڪاڻ ته ... اسان بعد ۾ هن حقيقت ڏانهن موٽنداسين. تنهن ڪري، اڳ ۾ اسان استعمال ڪيو HttpListener سرور کي ٻڌائڻ لاءِ ته HTTP پروٽوڪول کي ڪيئن هلائڻ. جيڪڏهن مٿين مثال ۾ اسان HTTP تي ڪم ڪرڻ لاءِ هڪ HttpListener شامل ڪيو، پوءِ HTTPS تي ڪم ڪرڻ لاءِ اسان کي HttpsListener شامل ڪرڻ جي ضرورت آهي:
HTTP کان HTTPS تائين - 7
پر ان کي شامل ڪرڻ لاءِ اسان کي ضرورت آھي SSLContext. دلچسپ ڳالهه اها آهي ته، SSLContext Undertow کان هڪ ڪلاس نه آهي، پر javax.net.ssl.SSLContext. SSLContext ڪلاس جو حصو آھي نام نہاد " جاوا سيڪيور ساڪٽ ايڪسٽينشن " (JSSE) - انٽرنيٽ ڪنيڪشن سيڪيورٽي کي يقيني بڻائڻ لاءِ جاوا ايڪسٽينشن. هي واڌارو " جاوا سيڪيور ساکٽ ايڪسٽينشن (JSSE) ريفرنس گائيڊ " ۾ بيان ڪيو ويو آهي. جئين توهان دستاويزن جي تعارفي حصي مان ڏسي سگهو ٿا، JSSE SSL ۽ TLS پروٽوڪول جو فريم ورڪ ۽ جاوا عمل درآمد فراهم ڪري ٿو. اسان ڪيئن حاصل ڪريون SSLCcontext؟ JavaDoc SSLContext کوليو ۽ getInstance طريقو ڳوليو . جئين توهان ڏسي سگهو ٿا، SSLC متن حاصل ڪرڻ لاء اسان کي نالو بيان ڪرڻ جي ضرورت آهي "سيڪيور ساکٽ پروٽوڪول". پيرا ميٽرن جي وضاحت مان ظاهر ٿئي ٿو ته اهي نالا ڳولي سگهجن ٿا " جاوا ڪرپٽوگرافي آرڪيٽيڪچر معياري الگورٿم نالو دستاويزن " ۾. تنهن ڪري، اچو ته هدايتن تي عمل ڪريو ۽ دستاويز ڏانهن وڃو. ۽ اسان ڏسون ٿا ته اسان SSL ۽ TLS جي وچ ۾ چونڊ ڪري سگھون ٿا:
HTTP کان HTTPS تائين - 8
ھاڻي اسان سمجھون ٿا ته اسان کي ھيٺ ڏنل SSLCcontext ٺاھڻ جي ضرورت آھي:
public SSLContext getSSLContext() {
	// 1. Получаем контекст, в рамках которого будем работать по TLS протоколу
	SSLContext context = null;
	try {
		context = SSLContext.getInstance("TLS");
	} catch (NoSuchAlgorithmException e) {
		throw new IllegalStateException(e);
	}
	return context;
}
ھڪڙو نئون حوالو ٺاھڻ سان، اسان کي ياد آھي ته SSLContext " جاوا سيڪيور ساکٽ ايڪسٽينشن (JSSE) ريفرنس گائيڊ " ۾ بيان ڪيو ويو آھي. اسان پڙهون ٿا ۽ ڏسون ٿا ته ”هڪ نئون ٺهيل SSLContext init ميٿڊ سڏڻ سان شروع ڪيو وڃي“. اهو آهي، هڪ حوالو ٺاهڻ ڪافي ناهي. ان کي شروع ڪرڻ جي ضرورت آهي. ۽ اهو منطقي آهي، ڇاڪاڻ ته سيڪيورٽي بابت، اسان صرف توهان کي ٻڌايو آهي ته اسان TLS پروٽوڪول استعمال ڪرڻ چاهيون ٿا. SSLCcontext کي شروع ڪرڻ لاءِ اسان کي ٽي شيون مهيا ڪرڻ گهرجن: KeyManager، TrustManager، SecureRandom.
HTTP کان HTTPS تائين - 9

ڪيئي مئنيجر

KeyManager هڪ اهم مينيجر آهي. هو ان لاءِ ذميوار آهي ته ”تصديق جي سند“ ڪنهن کي مهيا ڪرڻ لاءِ جيڪو اسان سان رابطو ڪري ٿو. سند کي سڃاڻپ طور ترجمو ڪري سگهجي ٿو. سڃاڻپ جي ضرورت آهي انهي ڪري ته ڪلائنٽ کي پڪ آهي ته سرور اهو آهي جيڪو هو دعويٰ ڪري ٿو ۽ ڀروسو ڪري سگهجي ٿو. ڇا سڃاڻپ طور استعمال ڪيو ويندو؟ جيئن اسان کي ياد آهي، سرور جي سڃاڻپ سرور جي ڊجيٽل سرٽيفڪيٽ طرفان تصديق ڪئي وئي آهي. هن عمل کي هيٺين ريت بيان ڪري سگهجي ٿو:
HTTP کان HTTPS تائين - 10
اضافي طور تي، " JSSE ريفرنس گائيڊ: ڪيئن SSL ڪم ڪري ٿو " چوي ٿو ته SSL استعمال ڪري ٿو "asymmetric cryptography"، جنهن جو مطلب آهي ته اسان کي هڪ اهم جوڙي جي ضرورت آهي: هڪ عوامي ڪي ۽ هڪ خانگي چاٻي. جيئن ته اسان cryptography بابت ڳالهائي رهيا آهيون، "جاوا ڪرپٽوگرافي آرڪيٽيڪچر" (JCA) راند ۾ اچي ٿو. Oracle هن فن تعمير تي هڪ بهترين دستاويز مهيا ڪري ٿو: " جاوا ڪرپٽوگرافي آرڪيٽيڪچر (JCA) ريفرنس گائيڊ ". اضافي طور تي، توهان JavaRush تي JCA جو مختصر جائزو پڙهي سگهو ٿا: " Java Cryptography Architecture: First acquaintance ." تنهن ڪري، KeyManager کي شروع ڪرڻ لاء، اسان کي هڪ KeyStore جي ضرورت آهي، جيڪو اسان جي سرور جي سرٽيفڪيٽ کي محفوظ ڪندو. هڪ اهم ۽ سرٽيفڪيٽ اسٽور ٺاهڻ جو سڀ کان وڏو طريقو آهي keytool افاديت، جيڪو JDK سان شامل آهي. هڪ مثال JSSE دستاويزن ۾ ڏسي سگھجي ٿو: " JSSE سان استعمال ڪرڻ لاءِ ڪي اسٽور ٺاهڻ ". تنهن ڪري، اسان کي استعمال ڪرڻ جي ضرورت آهي KeyTool افاديت هڪ اهم اسٽور ٺاهڻ ۽ اتي سرٽيفڪيٽ لکڻ لاءِ. دلچسپ ڳالهه اها آهي ته، اهم نسل اڳ ۾ -genkey استعمال ڪندي بيان ڪيو ويو هو، پر هاڻي اهو -genkeypair استعمال ڪرڻ جي سفارش ڪئي وئي آهي. اسان کي هيٺين شين جي وضاحت ڪرڻي پوندي.
  • عرف : عرف يا صرف اهو نالو جنهن جي هيٺان داخل ٿيڻ کي Keystore ۾ محفوظ ڪيو ويندو
  • keyalg : ڪيئي انڪرپشن الگورٿم. اچو ته RSA الگورتھم چونڊيو، جيڪو بنيادي طور تي اسان جي مقصد لاء معياري حل آھي.
  • keysize : اهم سائيز (بٽ ۾). گھٽ ۾ گھٽ تجويز ڪيل سائيز 2048 آهي، ڇاڪاڻ ته ... هڪ ننڍي سائيز اڳ ۾ ئي ٽوڙيو ويو آهي. توھان وڌيڪ پڙھي سگھوٿا ھتي: " 2048 بٽ ۾ ھڪڙو ايس ايس ايل سرٽيفڪيٽ ".
  • نالو : ممتاز نالو، ممتاز نالو.
اهو سمجهڻ ضروري آهي ته گهربل وسيلن (مثال طور، https://localhost) ان جي مقابلي ۾ ڪيو ويندو. ان کي ”موضوع سي اين ملاپ“ چئبو آهي.
  • صحيحيت : ڏينهن ۾ مدت جنهن دوران ٺاهيل سرٽيفڪيٽ صحيح آهي، يعني صحيح.
  • ext : سرٽيفڪيٽ جي توسيع جي وضاحت ڪئي وئي " نامياد واڌارن " ۾.
پاڻمرادو دستخط ٿيل سرٽيفڪيٽن لاءِ (يعني، آزاديءَ سان ٺاهيل سرٽيفڪيٽن لاءِ)، توھان کي ھيٺيون واڌايون بيان ڪرڻ گهرجن:
  • -ext san:critical=dns:localhost,ip:127.0.0.1 > SubjectAlternativeName ذريعي مضمون جي ميلاپ کي انجام ڏيڻ لاءِ
  • -ext bc=ca:false> ظاهر ڪرڻ لاءِ ته هي سرٽيفڪيٽ ٻين سرٽيفڪيٽن تي دستخط ڪرڻ لاءِ استعمال نه ڪيو ويو آهي
اچو ته حڪم هلون (مثال طور ونڊوز او ايس لاءِ):
keytool -genkeypair -alias ssl -keyalg RSA -keysize 2048 -dname "CN=localhost,OU=IT,O=Javarush,L=SaintPetersburg,C=RU,email=contact@email.com" -validity 90 -keystore C:/keystore.jks -storepass passw0rd -keypass passw0rd -ext san:critical=dns:localhost,ip:127.0.0.1 -ext bc=ca:false
ڇاڪاڻ ته فائل ٺاهي ويندي، پڪ ڪريو ته توهان وٽ فائل ٺاهڻ جا سڀئي حق آهن. اضافي طور تي، توهان ممڪن طور تي هن طرح جي صلاح ڏسندا:
HTTP کان HTTPS تائين - 11
هتي اسان کي ٻڌايو ويو آهي ته JKS هڪ ملڪيت جي شڪل آهي. Proprietary جو مطلب آھي اھو ليکڪن جي پرائيويٽ ملڪيت آھي ۽ رڳو جاوا ۾ استعمال لاءِ آھي. جڏهن ٽئين پارٽي جي افاديت سان ڪم ڪندي، هڪ تڪرار پيدا ٿي سگهي ٿو، ڇو ته اسان کي خبردار ڪيو ويو آهي. ان کان علاوه، اسان کي غلطي ملي سگھي ٿي: The destination pkcs12 keystore has different storepass and keypass. هي نقص ان ڪري ٿئي ٿو ڇاڪاڻ ته ڪيسٽور ۾ داخل ٿيڻ لاءِ پاسورڊ ۽ پاڻ ڪيسٽور لاءِ مختلف آهن. جيئن ڪي ٽول دستاويزن ۾ چيو ويو آهي ، "مثال طور، اڪثر ٽئين پارٽي اوزارن کي PKCS #12 ڪي اسٽور ۾ اسٽور پاس ۽ ڪيپاس جي ضرورت هوندي آهي. اسان پاڻ کي ڪيئي وضاحت ڪري سگھون ٿا (مثال طور، -destkeypass entrypassw). پر اهو بهتر ناهي ته ضرورتن جي ڀڃڪڙي نه ڪريو ۽ ساڳيو پاسورڊ قائم ڪريو. تنهنڪري درآمد هن طرح نظر اچي سگهي ٿي:
keytool -importkeystore -srckeystore C:/keystore.jks -destkeystore C:/keystore.jks -deststoretype pkcs12
ڪامياب مثال:
HTTP کان HTTPS تائين - 12
سرٽيفڪيٽ کي فائل ڏانهن برآمد ڪرڻ لاء، توهان هلائي سگهو ٿا:
keytool -export -alias ssl -storepass passw0rd -file C:/server.cer -keystore C:/keystore.jks
اضافي طور تي، اسان هن طرح Keystore مواد حاصل ڪري سگهون ٿا:
keytool -list -v -keystore C:/keystore.jks -storepass passw0rd
چڱو، هاڻي اسان وٽ هڪ ڪي اسٽور آهي جنهن ۾ سرٽيفڪيٽ آهي. هاڻي توهان ان کي ڪوڊ مان حاصل ڪري سگهو ٿا:
public KeyStore getKeyStore() {
	// Согласно https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore
	try(FileInputStream fis = new FileInputStream("C:/keystore.jks")){
		KeyStore keyStore = KeyStore.getInstance("pkcs12");
		keyStore.load(fis, "passw0rd".toCharArray());
		return keyStore;
	} catch (IOException ioe) {
		throw new IllegalStateException(ioe);
	} catch (KeyStoreException | NoSuchAlgorithmException | CertificateException e) {
		throw new IllegalStateException(e);
	}
}
جيڪڏهن اتي هڪ KeyStore آهي، ته پوء اسان کي شروع ڪري سگهون ٿا KeyManager:
public KeyManager[] getKeyManagers(KeyStore keyStore) {
	String keyManagerAlgo = KeyManagerFactory.getDefaultAlgorithm();
	KeyManagerFactory keyManagerFactory = null;
	try {
		keyManagerFactory = KeyManagerFactory.getInstance(keyManagerAlgo);
		keyManagerFactory.init(keyStore, "passw0rd".toCharArray());
		return keyManagerFactory.getKeyManagers();
	} catch (NoSuchAlgorithmException e) {
		throw new IllegalStateException(e);
	} catch (UnrecoverableKeyException | KeyStoreException e) {
		throw new IllegalStateException(e);
	}
}
اسان جو پهريون مقصد حاصل ڪيو ويو آهي. اهو معلوم ڪرڻو آهي ته TrustManager ڇا آهي. TrustManager سيڪشن ۾ JSSE دستاويزن ۾ بيان ڪيو ويو آهي " The TrustManager Interface ". اهو بلڪل KeyManager سان ملندڙ جلندڙ آهي، پر ان جو مقصد اهو چيڪ ڪرڻ آهي ته ڇا ڪنيڪشن جي درخواست ڪندڙ شخص تي ڀروسو ڪري سگهجي ٿو. ان کي واضح طور تي رکڻ لاءِ، هي آهي KeyManager in Reverse =) اسان کي TrustManager جي ضرورت ناهي، تنهنڪري اسان null پاس ڪنداسين. ھڪڙو ڊفالٽ TrustManager وري ٺاھيو ويندو جيڪو اسان جي سرور تي آخري صارف جي درخواستن جي تصديق نٿو ڪري. دستاويز ائين چوي ٿو: "ڊفالٽ عمل درآمد استعمال ڪيو ويندو". ساڳيو SecureRandom سان. جيڪڏهن اسان null جي وضاحت ڪريون ٿا، ڊفالٽ عملدرآمد استعمال ڪيو ويندو. اچو ته صرف ياد رکون ته SecureRandom هڪ JCA ڪلاس آهي ۽ " The SecureRandom Class " سيڪشن ۾ JCA دستاويزن ۾ بيان ڪيو ويو آهي . مجموعي طور تي، مٿي بيان ڪيل سڀني طريقن کي مدنظر رکندي تياري هن طرح ٿي سگهي ٿي:
public static void main(String[] args) {
	// 1. Подготавливаем приложение к работе по HTTPS
	App app = new App();
	SSLContext sslContext = app.getSSLContext();
	KeyStore keyStore = app.getKeyStore();
	KeyManager[] keyManagers = app.getKeyManagers(keyStore);
	try {
		sslContext.init(keyManagers, null, null);
	} catch (KeyManagementException e) {
		throw new IllegalStateException(e);
	}
جيڪو باقي رهي ٿو اهو سرور شروع ڪرڻ آهي:
// 2. Поднимаем server
 	int httpsPort = 443;
	Undertow server = Undertow.builder()
            .addHttpsListener(httpsPort, "localhost", sslContext)
            .setHandler(new HttpHandler() {
                @Override
                public void handleRequest(final HttpServerExchange exchange) throws Exception {
                    exchange.getResponseHeaders().put(Headers.CONTENT_TYPE, "text/plain");
                    exchange.getResponseSender().send("Hello World");
                }
            }).build();
	server.start();
}
هن ڀيري اسان جو سرور هيٺ ڏنل ايڊريس تي موجود هوندو. https://localhost:443 تنهن هوندي به، اسان اڃا تائين هڪ غلطي حاصل ڪنداسين ته هن وسيلن تي اعتبار نه ٿو ڪري سگهجي:
HTTP کان HTTPS تائين - 13
اچو ته ڄاڻون ته سرٽيفڪيٽ سان ڇا غلط آهي ۽ ان بابت ڇا ڪجي.
HTTP کان HTTPS تائين - 14

سرٽيفڪيٽ جو انتظام

تنهن ڪري، اسان جو سرور اڳ ۾ ئي HTTPS ذريعي ڪم ڪرڻ لاء تيار آهي، پر ڪلائنٽ ان تي ڀروسو نٿو ڪري. ڇو؟ اچو ته هڪ نظر وٺو:
HTTP کان HTTPS تائين - 15
ان جو سبب اهو آهي ته هي سرٽيفڪيٽ هڪ خود دستخط ٿيل سرٽيفڪيٽ آهي. هڪ خود دستخط ٿيل SSL سرٽيفڪيٽ هڪ عوامي اهم سرٽيفڪيٽ ڏانهن اشارو ڪري ٿو جيڪو جاري ڪيو ويو آهي ۽ ساڳئي شخص طرفان دستخط ٿيل آهي جيڪو ان جي سڃاڻپ ڪري ٿو. اهو آهي، اهو ڪنهن به معزز سرٽيفڪيشن اٿارٽي (CA، جنهن کي سرٽيفڪيٽ اٿارٽي پڻ سڏيو ويندو آهي) طرفان جاري نه ڪيو ويو آهي. سرٽيفڪيٽ اٿارٽي امانت طور ڪم ڪري ٿي ۽ روزمره جي زندگيءَ ۾ نوٽري وانگر آهي. هو يقين ڏياري ٿو ته هو جاري ڪيل سرٽيفڪيٽ قابل اعتماد آهن. اهڙين CAs پاران سرٽيفڪيٽ جاري ڪرڻ جي خدمت ادا ڪئي ويندي آهي، تنهنڪري ڪنهن کي به اعتماد جي نقصان ۽ شهرت جي خطرن جي ضرورت ناهي. ڊفالٽ طور، اتي ڪيترائي سرٽيفڪيٽ اختيارين آھن جيڪي قابل اعتماد آھن. هي فهرست قابل تدوين آهي. ۽ هر آپريٽنگ سسٽم کي سرٽيفڪيشن اختيارين جي فهرست جو پنهنجو انتظام آهي. مثال طور، ونڊوز ۾ هن لسٽ کي منظم ڪرڻ هتي پڙهي سگهجي ٿو: " Windows ۾ معتبر روٽ سرٽيفڪيٽ کي منظم ڪريو ". اچو ته سرٽيفڪيٽ کي ڀروسي وارن ۾ شامل ڪريون جيئن غلط پيغام ۾ ڏيکاريل آهي. هن کي ڪرڻ لاء، پهرين، سرٽيفڪيٽ ڊائون لوڊ ڪريو:
HTTP کان HTTPS تائين - 16
او ايس ونڊوز ۾، Win + R کي دٻايو ۽ mmcڪنٽرول ڪنسول کي ڪال ڪرڻ لاء عمل ڪريو. اڳيون، دٻايو Ctrl+M موجوده ڪنسول ۾ ”سرٽيفڪيٽ“ سيڪشن کي شامل ڪرڻ لاءِ. اڳيون، ذيلي سيڪشن ۾ "Trusted Root Certification Authorities" اسان عمل ڪنداسين Действия / Все задачи / Импорт. اچو ته ان فائل کي درآمد ڪريون جيڪا اڳ ۾ ڊائون لوڊ ڪئي وئي هئي فائل ۾. براؤزر شايد ياد ڪري چڪو هجي ماضي جي ڀروسي واري حالت سرٽيفڪيٽ جي. تنهن ڪري، صفحي کي کولڻ کان پهريان توهان کي برائوزر کي ٻيهر شروع ڪرڻ جي ضرورت آهي. مثال طور، گوگل ڪروم ۾ ايڊريس بار ۾ توهان کي هلائڻ جي ضرورت آهي chrome://restart. او ايس ونڊوز ۾، توهان پڻ استعمال ڪري سگهو ٿا يوٽيليٽي کي ڏسڻ لاءِ سرٽيفڪيٽ certmgr.msc:
HTTP کان HTTPS تائين - 17
جيڪڏهن اسان سڀ ڪجهه صحيح ڪيو، اسان ڏسنداسين هڪ ڪامياب ڪال اسان جي سرور ڏانهن HTTPS ذريعي:
HTTP کان HTTPS تائين - 18
جئين توهان ڏسي سگهو ٿا، سرٽيفڪيٽ هاڻي صحيح سمجهيو ويندو آهي، وسيلو موجود آهي، ۽ ڪو به غلطيون نه آهن.
HTTP کان HTTPS تائين - 19

هيٺين لائن

تنهن ڪري اسان اهو معلوم ڪيو آهي ته ويب سرور تي HTTPS پروٽوڪول کي چالو ڪرڻ جو منصوبو ڇا آهي ۽ ان لاء ڇا گهربل آهي. مون کي اميد آهي ته هن نقطي تي اهو واضح آهي ته مدد فراهم ڪئي وئي آهي جاوا ڪرپٽوگرافي آرڪيٽيڪچر (JCA) جي رابطي جي ذريعي، جيڪو ڪرپٽوگرافي جو ذميوار آهي، ۽ جاوا سيڪيور ساکٽ ايڪسٽينشن (JSSE)، جيڪو مهيا ڪري ٿو TLS تي عملدرآمد جاوا پاسي. اسان ڏٺو ته JDK ۾ شامل ڪيل ڪيٽول افاديت ڪيئن استعمال ڪئي ويندي آهي ڪم ڪرڻ لاءِ ڪي اسٽور ڪي ۽ سرٽيفڪيٽ اسٽور. اضافي طور تي، اسان محسوس ڪيو ته HTTPS استعمال ڪري ٿو SSL/TLS پروٽوڪول سيڪيورٽي لاءِ. هن کي مضبوط ڪرڻ لاء، مان توهان کي صلاح ڏيان ٿو ته هن موضوع تي بهترين آرٽيڪل پڙهو: اميد آهي ته، هن ننڍڙي جائزي کان پوء، HTTPS ٿورو وڌيڪ شفاف ٿي ويندو. ۽ جيڪڏهن توهان کي HTTPS کي فعال ڪرڻ جي ضرورت آهي، توهان آساني سان سمجهي سگهو ٿا شرطن کي توهان جي ايپليڪيشن سرورز ۽ فريم ورڪ جي دستاويزن مان. #وياچسلاو
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION