Https ব্যবহার করে কোনও এসএসএল এনক্রিপ্ট করা সাইট অ্যাক্সেস করার জন্য আমি কীভাবে ওয়েব রিকোয়েস্ট ব্যবহার করব?


116

আমি এমন একটি প্রোগ্রাম লিখছি যা ব্যবহারকারীর সরবরাহিত ইউআরএল থেকে সামগ্রী পড়ে। আমার সমস্যাটি কোডটিতে রয়েছে যা এরকম কিছু করে:

Uri uri = new Uri(url);
WebRequest webRequest = WebRequest.Create(uri);
WebResponse webResponse = webRequest.GetResponse();
ReadFrom(webResponse.GetResponseStream());

প্রদত্ত ইউআরএল যদি একটি "https: //" URL হয় তবে এটি ভঙ্গ হচ্ছে। কেউ এই কোডটি পরিবর্তন করতে আমাকে সহায়তা করতে পারেন যাতে এটি এসএসএল এনক্রিপ্ট করা সামগ্রীর সাথে কাজ করে। ধন্যবাদ।

উত্তর:


175

আপনি এটি সঠিক উপায়ে করছেন তবে ব্যবহারকারীরা এমন সাইটগুলিতে url সরবরাহ করতে পারে যা অবৈধ এসএসএল শংসাপত্রগুলি ইনস্টল করা আছে। আপনি প্রকৃত ওয়েব অনুরোধ করার আগে আপনি যদি এই লাইনটি প্রবেশ করেন তবে আপনি সেই সার্টিফিকেট সমস্যাগুলি উপেক্ষা করতে পারেন:

ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(AcceptAllCertifications);

যেখানে AcceptAllCertificationsহিসাবে সংজ্ঞায়িত করা হয়

public bool AcceptAllCertifications(object sender, System.Security.Cryptography.X509Certificates.X509Certificate certification, System.Security.Cryptography.X509Certificates.X509Chain chain, System.Net.Security.SslPolicyErrors sslPolicyErrors)
{
    return true;
}

41
এই উত্তরের জন্য ধন্যবাদ! কিছু অপ্রয়োজনীয় কোড এড়ানোর জন্য আমি এটি এর মতো ব্যবহার করেছি: সার্ভিসপয়েন্ট ম্যানেজ.সার্ভারকার্টিটিভালিডেশনক্যালব্যাক = (গুলি, সার্ট, চেইন, এসএসএল) => সত্য;
চার্লস ওয়েললেট ২

4
ধন্যবাদ, আপনি আমাকে সাহায্য করেছেন স্যার। এফ # এটি এত সহজ করে তোলে:ServicePointManager.ServerCertificateValidationCallback <- Security.RemoteCertificateValidationCallback (fun _ _ _ _ -> true)
ডেভিড গ্রেনিয়ার

2
@ চারেলস ওয়েললেট আমার ধারণা আমি আপনার চেয়েও বেশি অলস, (ক, খ, সি, ডি) => সত্য
ডেস্পার্টার

24
আমি পছন্দ করি+= delegate { return true; }
vkrzv

2
এই পদ্ধতির সাথে যুক্ত সম্ভাব্য ঝুঁকি সম্পর্কে সচেতন হন। আরও তথ্যের জন্য stackoverflow.com/a/6613434/2969615 দেখুন ।
জো কোয়েল

19

এই লিঙ্কটি আপনার আগ্রহের বিষয়: http://msdn.microsoft.com/en-us/library/ds8bxk2a.aspx

HTTP সংযোগগুলির জন্য, WebRequest এবং WebResponse ক্লাসগুলি SSL টি সমর্থন করে এমন ওয়েব হোস্টের সাথে যোগাযোগের জন্য SSL ব্যবহার করে। এসএসএল ব্যবহারের সিদ্ধান্তটি ইউআরআই-এর ভিত্তিতে দেওয়া হয়েছে ওয়েব রিকুয়েস্ট ক্লাস দ্বারা করা হয়েছে। যদি ইউআরআই "https:" দিয়ে শুরু হয়, এসএসএল ব্যবহৃত হয়; যদি ইউআরআই "http:" দিয়ে শুরু হয়, একটি এনক্রিপ্ট করা সংযোগ ব্যবহৃত হবে।


দুর্দান্ত লিঙ্ক। এটি একটি গুরুত্বপূর্ণ পার্থক্য।
ড্যানএম

1
আপনার উত্তরটি বোঝায় যে প্রশ্নের কোডটি কাজ করা উচিত?
রোল্যান্ড শ

18

এই একজন আমার পক্ষে কাজ করেছেন:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

1
ডিফল্ট মান "এসএসএল 2 | টিএলএস"। আমি আমার সার্ভারে শুধুমাত্র টিএলএস 1.1 এবং 1.2 সক্ষম করেছিলাম। এটি প্রকৃতপক্ষে সমস্যার সমাধান! /Etc/letsencrypt/options-ssl-nginx.conf: nginx লিনাক্স সঙ্গে LetsEncrypt জন্য প্রোটোকল এখানে সংজ্ঞায়িত করা হয়
Jerther

আমি বিশ্বাস করি এটি একটি ভিন্ন সমস্যা নিয়ে কাজ করছে। এটি অবৈধ সার্টস সম্পর্কে নয় তবে একটি উচ্চতর টিএলএস সংস্করণ।
wp78de

আমি পেয়েছিলাম "একটি বিদ্যমান সংযোগটি জোর করে দূরবর্তী হোস্ট দ্বারা বন্ধ করা হয়েছিল" এবং এই সমাধানটি আমার পক্ষে কাজ করেছে
ওমিলকার

নোট করুন যে এটি একটি গ্লোবাল কনফিগারেশন, সুতরাং আপনাকে একবার এটি করতে হবে এবং প্রতিবার আপনি অনুরোধটি সেট আপ করবেন না।
চাদ হেডককক

আমি কি একরকম একক অনুরোধের জন্য এটি করতে পারি? দেখে মনে হচ্ছে সার্ভিসপয়েন্ট
ম্যানেজারটি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.