.NET 4.5 এ ডিফল্ট সুরক্ষাপ্রোটোকল


253

সমর্থনকারী সার্ভারগুলির সাথে যোগাযোগের জন্য ডিফল্ট সুরক্ষা প্রোটোকল কী TLS 1.2? হবে .NETডিফল্টরূপে, সর্বোচ্চ নিরাপত্তা সার্ভার প্রান্তের সমর্থিত প্রোটোকল চয়ন অথবা আমি স্পষ্টভাবে কোড এই লাইন যোগ করার আছে:

System.Net.ServicePointManager.SecurityProtocol = 
SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;

কোড পরিবর্তন ছাড়াও কি এই ডিফল্টটি পরিবর্তন করার কোনও উপায় আছে?

শেষ .NET 4.0অবধি , কেবল কি সমর্থন করে TLS 1.0? অর্থাত্ আমাকে সমর্থন করার জন্য ক্লায়েন্ট প্রকল্পগুলি 4.5 তে আপগ্রেড করতে হবে TLS 1.2

আমার অনুপ্রেরণা হ'ল SSLv3ক্লায়েন্টের পক্ষে সমর্থন সরিয়ে দেওয়া এমনকি সার্ভার সমর্থন করলেও (মেশিন রেজিস্ট্রিতে এটি অক্ষম করার জন্য ইতিমধ্যে আমার কাছে পাওয়ারশেল স্ক্রিপ্ট রয়েছে) এবং সার্ভারের পক্ষে সর্বাধিক টিএলএস প্রোটোকল সমর্থন করে।

আপডেট:ServicePointManager ক্লাসের দিকে তাকিয়ে .NET 4.0আমি দেখতে পাচ্ছি না TLS 1.0এবং এর জন্য কোনও গণিত মান নেই 1.1। উভয়ই .NET 4.0/4.5, ডিফল্ট হয় SecurityProtocolType.Tls|SecurityProtocolType.Ssl3। আশা করি SSLv3রেজিস্ট্রি অক্ষম করে এই ডিফল্টটি ভাঙ্গবে না ।

তবে, আমি সিদ্ধান্ত নিয়েছি যে আমাকে সমস্ত অ্যাপ্লিকেশনগুলিতে আপগ্রেড করতে হবে .NET 4.5এবং সমস্ত অ্যাপ্লিকেশনগুলির SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;সমস্ত বুটস্ট্র্যাপিং কোডে স্পষ্টভাবে যাইহোক যোগ করতে হবে।

এটি বিভিন্ন এপিআই এবং পরিষেবাগুলিকে ডাউনগ্রেড না করার জন্য আউটবাউন্ড অনুরোধ করবে SSLv3এবং এর সর্বোচ্চ স্তরটি নির্বাচন করা উচিত TLS

এই পদ্ধতিরটি কি যুক্তিসঙ্গত বা অতিমাত্রায় শোনায়? আপডেট করার জন্য আমার কাছে অনেকগুলি অ্যাপ্লিকেশন রয়েছে এবং আমি সেগুলি ভবিষ্যতের প্রমাণ করতে চাই যেহেতু আমি শুনেছি এমনকি TLS 1.0কিছু সরবরাহকারী অদূর ভবিষ্যতে অবহেলিত হতে পারে।

ক্লায়েন্ট হিসাবে এপিআইগুলিতে আউটবাউন্ড অনুরোধ করা, রেজিস্ট্রিতে এসএসএল 3 অক্ষম করা এমনকি .NET ফ্রেমওয়ার্কে কোনও প্রভাব ফেলতে পারে? আমি ডিফল্টরূপে দেখছি, টিএলএস 1.1 এবং 1.2 সক্ষম নয়, আমাদের কি এটি রেজিস্ট্রি দিয়ে সক্ষম করতে হবে? আর http://support.microsoft.com/kb/245030

কিছুটা তদন্তের পরে, আমি বিশ্বাস করি যে তারা আইআইএস (সার্ভার সাবকি) এবং ব্রাউজারগুলিতে (ক্লায়েন্ট সাবকি) প্রয়োগ করে রেজিস্ট্রি সেটিংসে কোনও প্রভাব পড়বে না।

দুঃখিত, এই পোস্টটি একাধিক প্রশ্নে পরিণত হয়েছে, "সম্ভবত" উত্তরগুলির সাথে অনুসরণ করেছে।


এফওয়াইআই: টিএলএসের
ডটনেট

যারা এর সেরা উত্তর দেখতে চান তাদের জন্য, ভোট অনুসারে বাছাই করুন!
নেভুল

1
সংশ্লিষ্ট তাই প্রশ্ন ও উত্তর: stackoverflow.com/questions/41618766/... পাঠকেরা এই প্রশ্নের সচেতন থাকা আবশ্যক পক্বতা করা হয় এবং নতুন সুপারিশ 2020. হিসাবে জায়গা আছে
কোন ফেরত কোন আয়

উত্তর:


280

এই মন্তব্য ত্যাগকারীদের মধ্যে কেউ কেউ উল্লেখ করেছেন যে System.Net.ServicePointManager.SecurityProtocolনির্দিষ্ট মানগুলিতে সেট করার অর্থ আপনার অ্যাপটি ভবিষ্যতের টিএলএস সংস্করণগুলির সুবিধা নিতে সক্ষম হবেনা যা ভবিষ্যতে আপডেটগুলি .NET এ ডিফল্ট মান হতে পারে। প্রোটোকলগুলির একটি নির্দিষ্ট তালিকা নির্দিষ্ট করার পরিবর্তে, আপনি নিজের পরিচিত এবং যত্নশীল প্রোটোকলগুলি চালু বা বন্ধ করতে পারেন, অন্য যেভাবে রয়েছেন সেভাবে রেখে।

অন্যান্য প্রোটোকলগুলিকে প্রভাবিত না করে টিএলএস 1.1 এবং 1.2 চালু করতে:

System.Net.ServicePointManager.SecurityProtocol |= 
    SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;

|=অন্যদের বন্ধ না করে এই পতাকাগুলি চালু করার জন্য ব্যবহারের লক্ষ্য করুন ।

অন্যান্য প্রোটোকলকে প্রভাবিত না করে SSL3 বন্ধ করতে:

System.Net.ServicePointManager.SecurityProtocol &= ~SecurityProtocolType.Ssl3;

6
এটি সত্যই সঠিক উত্তর। গৃহীত উত্তরটি নিশ্চিত করবে যে আপনার অ্যাপটি সর্বদা নতুন টিএলএস সংস্করণ টগল করবে যদি না আপনি ফিরে যান এবং আপনার কোড আপডেট না করেন।
কনার

5
@ গ্রেটসেন না, এটি কিছুটা দিকের বা তাই, এটি বন্ধ থাকলে এটি কেবল উপযুক্ত বিটগুলি চালু করে। যদি এই বিটগুলি ইতিমধ্যে চালু থাকে তবে কোনও পরিবর্তন ঘটে না।
স্কট 17

3
এবং এর পাওয়ারশেলের সমতুল্য হ'ল [Net.ServicePointManager]::SecurityProtocol = ([Net.ServicePointManager]::SecurityProtocol -bor [Net.SecurityProtocolType]::Tls11 -bor [Net.SecurityProtocolType]::Tls12) ইনভোক-রেস্টমথোড একই অন্তর্নিহিত। নেট ফ্রেমওয়ার্ক লাইব্রেরিগুলিতে নির্ভর করে।
মার্টিন হোলিংসওয়ার্থ

15
যেহেতু কেউ এই কোডটি কোথায় রাখবেন সে সম্পর্কে কথা বলছে না, তাই আমি আমার এএসপি.এনইটি এমভিসি অ্যাপ্লিকেশনের জন্য গ্লোবাল.অ্যাসাক্স.সি. এর অ্যাপ্লিকেশন_স্টার্টটিতে সফলভাবে রেখেছি। আমি কীভাবে আমার এসএমটিপি অনুরোধগুলি টিএলএস 1.2 এর মাধ্যমে এবং টিএলএস 1.0 এর চেয়ে বেশি না পাঠানোর জন্য তা খুঁজছিলাম। আমি আরও যোগ করেছি & = ~ সিকিউরিটিপ্রোটোকল
টাইপ.টিএলএস

2
ভিবিতে সমতুল্যNet.ServicePointManager.SecurityProtocol = Net.ServicePointManager.SecurityProtocol OR Net.SecurityProtocolType.Tls12 OR Net.SecurityProtocolType.Tls12
কোডস্পিড

188

ডিফল্ট System.Net.ServicePointManager.SecurityProtocolউভয় .NET মধ্যে 4.0/4.5হয় SecurityProtocolType.Tls|SecurityProtocolType.Ssl3

.NET 4.0সমর্থন করে TLS 1.0যখন .NET 4.5সমর্থন পর্যন্তTLS 1.2

যাইহোক, একটি অ্যাপ্লিকেশন টার্গেটিং একই পরিবেশে ইনস্টল .NET 4.0করা TLS 1.2থাকলে এখনও পর্যন্ত সমর্থন করতে পারে .NET 4.5। প্রতিস্থাপন .NET 4.5করে উপরে ইনস্টল করে ।.NET 4.0System.dll

ট্র্যাফিকের সাথে সঠিক সুরক্ষা প্রোটোকল সেটটি fiddler4একটি .NET 4.0প্রকল্পে স্বীকৃত মানগুলি ম্যানুয়ালি সেট করে পর্যবেক্ষণ করে আমি এটি যাচাই করেছি :

ServicePointManager.SecurityProtocol = (SecurityProtocolType)192 |
(SecurityProtocolType)768 | (SecurityProtocolType)3072;

রেফারেন্স:

namespace System.Net
{
    [System.Flags]
    public enum SecurityProtocolType
    {
       Ssl3 = 48,
       Tls = 192,
       Tls11 = 768,
       Tls12 = 3072,
    }
}

যদি আপনি কেবল .NET 4.0ইনস্টল হওয়া কোনও পরিবেশে হ্যাক করার চেষ্টা করেন তবে আপনি ব্যতিক্রম পাবেন:

আনহানডেল ব্যতিক্রম: সিস্টেম.নোটসপোর্টেড এক্সপশন: অনুরোধ করা সুরক্ষা প্রোটোকল সমর্থিত নয়। সিস্টেম.নেট.সেবা পয়েন্ট ম্যানেজ.আর্টসেসিকিউরিটিপ্রোটোকল (সিকিউরিটিপ্রোটোকল টাইপ বনাম)

তবে, আমি এই "হ্যাক" এর প্রস্তাব দিচ্ছি না কারণ ভবিষ্যতের প্যাচ ইত্যাদি এটি ভেঙে যেতে পারে *

অতএব, আমি সমর্থনটি সরানোর সর্বোত্তম রুটটি স্থির করেছি SSLv3:

  1. এতে সমস্ত অ্যাপ্লিকেশন আপগ্রেড করুন .NET 4.5
  2. ডিফল্ট এবং ভবিষ্যতের প্রমাণটিকে ওভাররাইড করতে বুস্ট্র্যাপিং কোডটিতে নিম্নলিখিতটি যুক্ত করুন:

    System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;

* এই হ্যাকটি ভুল হলে কেউ আমাকে সংশোধন করছেন, তবে প্রাথমিক পরীক্ষাগুলি আমি দেখতে পাই এটি কার্যকর হয়


6
অনুগ্রহ করে ইম্পেরিয়ালিওলেট.অর্গ .২০১৪/২০১২/২০১৮/poodleagain.html দেখুন "এএএডি সাইফার স্যুট সহ টিএলএস ১.২ এর কম যা কিছু আছে তা ক্রিপ্টোগ্রাফিকভাবে ভেঙে গেছে বলে মনে করা ভালো মুহুর্তের মতো মনে হয়।"
নীল

3
@ ম্যাথিউ, ServicePointManager.csদেখুন সূত্রের কোড দেখুন রেফারেন্সসোর্স.মাইক্রোসফটকম
লূক হাটন

12
আমি লোকদের .NET 4.5টিএলএস 12 এর ডিফল্ট দাবি করতে দেখছি - তবে আপনি এখানে যেমন রেখেছেন, তা হয় না। এটি আপনাকে এটির জন্য বিকল্পটি দেয়SecurityProtocol
ডন চ্যাডল

17
আমি এই উত্তরটিকে কমানো করব না কারণ এটি প্রচুর সহায়ক তথ্য সরবরাহ করে, তবে হার্ডকোডযুক্ত প্রোটোকল সংস্করণ প্রয়োগ করা ভাল ধারণা নয় কারণ এটি অ্যাপ্লিকেশনটিকে সর্বোত্তম উপলভ্য এনক্রিপশন ব্যবহার করতে বাধা দেবে এবং এর ফলে রাস্তায় নিরাপত্তাজনিত সমস্যা দেখা দিতে পারে। .NET এর ডিফল্ট আচরণ পরিবর্তন করার জন্য রেজিস্ট্রি পরিবর্তিত হয় প্রকৃতপক্ষে আধুনিক প্রোটোকলগুলিকে সমর্থন করার জন্য নেট অনেক বেশি পছন্দনীয়। (তবে এটি উল্লেখযোগ্য যে রেজিস্ট্রি পরিবর্তনগুলি এসএসএল ভি 3 কেও অক্ষম করে))
এজে হেন্ডারসন

6
ফাঃ 4.6 এবং 4.7 উপর, ডিফল্ট এখন SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12যেমন প্রতি support.microsoft.com/en-us/help/3069494/...
ইয়ান কেম্প

68

আপনি নিম্নলিখিত রেজিস্ট্রিতে ডিফল্ট আচরণকে ওভাররাইড করতে পারেন:

Key  : HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319 
Value: SchUseStrongCrypto
Type: REG_DWORD
Data : 1

এবং

Key  : HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\.NETFramework\v4.0.30319
Value: SchUseStrongCrypto
Type: REG_DWORD
Data : 1

বিশদ জন্য, এর বাস্তবায়নServicePointManager দেখুন ।


ধন্যবাদ, আমি এই সম্পর্কে জানতাম না। আমি এটি পরীক্ষা করব। আমি এটি সেট করার জন্য একটি পাওয়ারশেল স্ক্রিপ্ট তৈরি করেছি: gist.github.com/lukehutton/ab80d207172a923401b1
লূক হাটন

6
রেজিস্ট্রি পরিবর্তন করা ভাল সমাধানের মতো দেখায় না। অ্যাপ্লিকেশনটি যদি টিএলএস 1 সমর্থন করতে চায় তবে অ্যাপ্লিকেশনটি এটি সম্পর্কে ক্যাট নেওয়া উচিত। চলমান পরিবেশ নয়। অন্যথায় এটি অন্যান্য অ্যাপ্লিকেশনগুলিকে ক্ষতি করতে পারে বা আপনার অ্যাপ্লিকেশন মোতায়েন ও আপগ্রেড করতে পারে।
মিখাইল জি

13
@ মিখাইলজি সম্পূর্ণ বিপরীত রেজিস্ট্রি পরিবর্তন পছন্দনীয় পদ্ধতি। স্ক্যানেল অন্তর্নিহিত আলোচনার একটি বিমূর্ততা সরবরাহ করে এবং আপনি সর্বোচ্চ প্রয়োগযোগ্য সুরক্ষা স্তরের যাই হোক না কেন আপনার অ্যাপ্লিকেশনটি ব্যবহার করতে চান। যখন নতুন প্রোটোকল প্রকাশিত হয় এবং আপনার সফ্টওয়্যার সেগুলি ব্যবহার করতে অক্ষম হয় তখন সফ্টওয়্যারটিতে কৃত্রিমভাবে এটি সীমিত করা ভবিষ্যতে সমস্যার মধ্যে আসে। সফ্টওয়্যারটিতে প্রদত্ত প্রোটোকলের চেয়ে কেবল আরও ভাল ব্যবহারের বিকল্প বলার বিকল্প ছিল তবে এটি চমৎকার হবে, তবে ভবিষ্যতের সংস্করণগুলিকে কাজ করা থেকে বিরত না করে তার পক্ষে বিকল্প নেই। যদিও এই পরিবর্তনের সাথে এসএসএল ভি 3 অক্ষম করেছিল ..
এজে হেন্ডারসন

13
কমান্ড-লাইন: reg add HKLM\SOFTWARE\Microsoft\.NETFramework\v4.0.30319 /v SchUseStrongCrypto /t REG_DWORD /d 1 /reg:64(এবং / অথবা /reg:32)
কেভিন স্মিথ

7
@ মিখাইলজি: রেজিস্ট্রি সেট করা অ্যাপ্লিকেশনগুলিকে পুরানো প্রোটোকল সমর্থন করা থেকে বিরত রাখে না। এটি কেবলমাত্র ডিফল্ট পরিবর্তন করে (যার মধ্যে এখন পর্যন্ত tls 1.0 অন্তর্ভুক্ত রয়েছে)। আরও,। নেট 4.6+ এ ডিফল্ট আচরণটি হ'ল শক্তিশালী ক্রিপ্টো ব্যবহার করা; সেক্ষেত্রে এই রেজিস্ট্রি এন্ট্রি কেবল শক্তিশালী ক্রিপ্টো অক্ষম করার উপায় হিসাবে কার্যকর হবে।
ব্রায়ান

51

একটি .regএক্সটেনশান এবং নিম্নলিখিত সামগ্রীগুলি সহ একটি পাঠ্য ফাইল তৈরি করুন :

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319]
"SchUseStrongCrypto"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319]
"SchUseStrongCrypto"=dword:00000001

বা নিম্নলিখিত উত্স থেকে এটি ডাউনলোড করুন:

https://tls1test.salesforce.com/s/NET40-Enable-TLS-1_2.reg

ইনস্টল করতে ডাবল-ক্লিক করুন ...


3
আপনার দেওয়া লিঙ্কটিতে SSL শংসাপত্রের সমস্যা রয়েছে বলে মনে হচ্ছে।
নাথানএলডেনসআর

আমি এই রেজিস্ট্রি কীটি যুক্ত করার পরেও আমার এখনও সেই সমস্যাটি রয়েছে। কোন ধারণা ?
সামিদজো

@ সামিদজো - আপনি কি নেট সংস্করণ ব্যবহার করছেন? লুকের উত্তর আমার চেয়ে অনেক বেশি বিশদে যায় তবে দেখে মনে হচ্ছে আপনার কমপক্ষে .NET 4.5 ইনস্টল থাকা দরকার। এছাড়াও, আপনি যদি কেবল এই পরিবর্তনটি করে থাকেন তবে আপনাকে অ্যাপ পুলটি পুনরায় ব্যবহার করতে হতে পারে। এগুলি অনুমানের ধরণের, সুতরাং আরও বিশদ ছাড়াই আমি আরও অনেক বেশি সাহায্য করতে সক্ষম হতে পারি :)
ডানা

2
একটি সার্ভারে সম্প্রতি প্রয়োগ করা একটি প্যাচ সমর্থন.মাইক্রোসফট / en-us/help/4019114/… এর ফলে আমাদের .net 4.5.2 অ্যাপ্লিকেশনটি https REST অনুরোধগুলিতে ব্যর্থ হয়েছিল। এই কীগুলি আমাদের সমস্যার সমাধান করে।
ক্লেইনাক্স

21

আমি খুঁজে পেয়েছি যে আমি যখন কেবলমাত্র টিএলএস 1.2 নির্দিষ্ট করি তখন এটি নীচে 1.1 এ আলোচনা করবে। System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

আমি আমার। নেট 4.5 ওয়েব অ্যাপ্লিকেশনটির জন্য এটি গ্লোবাল.অ্যাসাক্স স্টার্টআপ পদ্ধতিতে উল্লেখ করেছি।


2
সার্ভারে সমর্থিত সুরক্ষা প্রোটোকল কী? আমি বিশ্বাস করি এটি এখানেও ফ্যাক্টর এবং এটি সার্ভারের সর্বশেষতম 1.1 be www.passionatecoder.ca
এহসান

14
আপভোটেড কারণ এটিই একমাত্র উত্তর যা কোডের লাইন রাখার জন্য যেখানে সমাধান তা সমাধান করে states
জাগারম্যান

1
ক্লায়েন্ট (যেমন আপনার সি # ওয়েবক্লিয়েন্ট) এবং সার্ভার (আপনি যে এপিআই সার্ভারটি কল করছেন) উভয়ই সমর্থন করে এমন সর্বোচ্চ প্রোটোকল ব্যবহার করার জন্য আলোচনা করবেন। সুতরাং যদি আপনার ক্লায়েন্ট টিএলএস ১.২ সমর্থন করে তবে সার্ভারটি কেবল টিএলএস ১.১ ব্যবহার করে - ক্লায়েন্ট টিএলএস ১.১ ব্যবহার করবে (আপনি যদি আপনার ক্লায়েন্টের কাছ থেকে টিএলএস ১.১ সরিয়ে না নেন - তবে তারা পারস্পরিক সমর্থিত প্রোটোকল না পেয়ে এবং ক্লায়েন্ট ত্রুটিযুক্ত হবে)
ডন চেডল

Global.asax.cs মধ্যে System.Net ব্যবহার যোগ করার জন্য ছিল
প্যাট্রিক

16

নিম্নলিখিত কোডটি করবে:

  • সক্ষম প্রোটোকল মুদ্রণ
  • উপলব্ধ প্রোটোকলগুলি মুদ্রণ করুন
  • প্ল্যাটফর্মটি সমর্থন করে এবং এটি শুরু করার জন্য সক্ষম না হলে TLS1.2 সক্ষম করুন
  • এটি সক্ষম থাকলে SSL3 অক্ষম করুন dis
  • মুদ্রণ শেষ ফলাফল

ধ্রুবক:

  • 48 হ'ল এসএসএল 3
  • 192 টিএলএস 1
  • 768 টিএলএস 1.1
  • 3072 টিএলএস 1.2 হয়

অন্যান্য প্রোটোকল প্রভাবিত হবে না। এটি ভবিষ্যতের প্রোটোকলগুলির সাথে এটি উপযুক্ত করে তোলে (Tls1.3, ইত্যাদি)।

কোড

// print initial status
    Console.WriteLine("Runtime: " + System.Diagnostics.FileVersionInfo.GetVersionInfo(typeof(int).Assembly.Location).ProductVersion);
    Console.WriteLine("Enabled protocols:   " + ServicePointManager.SecurityProtocol);
    Console.WriteLine("Available protocols: ");
    Boolean platformSupportsTls12 = false;
    foreach (SecurityProtocolType protocol in Enum.GetValues(typeof(SecurityProtocolType))) {                
        Console.WriteLine(protocol.GetHashCode());
        if (protocol.GetHashCode() == 3072){
            platformSupportsTls12 = true;
        }
    }
    Console.WriteLine("Is Tls12 enabled: " + ServicePointManager.SecurityProtocol.HasFlag((SecurityProtocolType)3072));    


// enable Tls12, if possible
    if (!ServicePointManager.SecurityProtocol.HasFlag((SecurityProtocolType)3072)){
        if (platformSupportsTls12){
            Console.WriteLine("Platform supports Tls12, but it is not enabled. Enabling it now.");
            ServicePointManager.SecurityProtocol |= (SecurityProtocolType)3072;
        } else {
            Console.WriteLine("Platform does not supports Tls12.");
        }
    }

// disable ssl3
   if (ServicePointManager.SecurityProtocol.HasFlag(SecurityProtocolType.Ssl3)) { 
      Console.WriteLine("Ssl3SSL3 is enabled. Disabling it now.");
      // disable SSL3. Has no negative impact if SSL3 is already disabled. The enclosing "if" if just for illustration.
      System.Net.ServicePointManager.SecurityProtocol &= ~SecurityProtocolType.Ssl3;                      
   }
    Console.WriteLine("Enabled protocols:   " + ServicePointManager.SecurityProtocol);

আউটপুট

Runtime: 4.7.2114.0
Enabled protocols:   Ssl3, Tls
Available protocols: 
0
48
192
768
3072
Is Tls12 enabled: False
Platform supports Tls12, but it is not enabled. Enabling it now.
Ssl3 is enabled. Disabling it now.
Enabled protocols:   Tls, Tls12

14

আমার গ্রাহকটি টিএলএসকে 1.0 থেকে 1.2 থেকে আপগ্রেড করার সময় আমি সমস্যাটি পেয়েছি। আমার অ্যাপ্লিকেশন। নেট ফ্রেমওয়ার্ক 3.5 ব্যবহার করে এবং সার্ভারে চালিত হয়। সুতরাং আমি এইভাবে এটি স্থির করেছি:

  1. প্রোগ্রাম ঠিক করুন

HTTPWebRequest.GetResponse () কল করার আগে এই কমান্ডটি যুক্ত করুন:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | SecurityProtocolTypeExtensions.Tls11 | SecurityProtocolTypeExtensions.Tls12;

2 টি নতুন ক্লাস যুক্ত করে 2 ডিএলএল এক্সটেনশনস: সিস্টেম. নেট এবং সিস্টেম.সিকিউরিটি.অথেন্টিকেশন

    namespace System.Net
    {
        using System.Security.Authentication;
        public static class SecurityProtocolTypeExtensions
        {
            public const SecurityProtocolType Tls12 = (SecurityProtocolType)SslProtocolsExtensions.Tls12;
            public const SecurityProtocolType Tls11 = (SecurityProtocolType)SslProtocolsExtensions.Tls11;
            public const SecurityProtocolType SystemDefault = (SecurityProtocolType)0;
        }
    } 

    namespace System.Security.Authentication
    {
        public static class SslProtocolsExtensions
        {
            public const SslProtocols Tls12 = (SslProtocols)0x00000C00;
            public const SslProtocols Tls11 = (SslProtocols)0x00000300;
        }
    } 
  1. মাইক্রোসফ্ট ব্যাচ আপডেট করুন

ব্যাচ ডাউনলোড করুন:

  • উইন্ডোজের জন্য 2008 আর 2: উইন্ডোজ 6.1-কেবি 3154518-x64.msu
  • উইন্ডোজের জন্য 2012 আর 2: উইন্ডোজ 8.1-kb3154520-x64.msu

ডাউনলোড ব্যাচ এবং আরও তথ্যের জন্য আপনি এখানে দেখতে পারেন:

https://support.microsoft.com/en-us/help/3154518/support-for-tls-system-default-versions-included-in-the-.net-framework-3.5.1-on-windows-7 -sp1-এবং-সার্ভার-2008-R2-SP1


1
সোর্স কোড পরিবর্তন না করে সিকিউরিটিপ্রোটোকল পরিবর্তন করা কি সম্ভব? মেশিনকনফিগ বা অ্যাপকনফিগের মতো।
অহান্দেদি

1
কি দারুন. এটা বছরের পুরানো ভুডু .. স্টাফ ... ঠিক আছে। আপনি শহরতলিতে রক!
গ্রানাডা কোডার

14

রেজিস্ট্রি পরিবর্তন প্রক্রিয়া একটি সংগ্রামের পরে আমার পক্ষে কাজ করেছিল। আসলে আমার অ্যাপ্লিকেশনটি 32 বিট হিসাবে চলছিল। সুতরাং আমাকে পথের নীচে মান পরিবর্তন করতে হয়েছিল।

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft.NETFramework\v4.0.30319

মান প্রকারটি DWORD এবং 0 এর উপরে মানের হওয়া দরকার etআর আরও ভাল ব্যবহার 1রেজিস্ট্রি সেটিংস পেতে নেট নেট অ্যাপ্লিকেশন টিএলএস 1.2 ব্যবহার করে 1.2


এটা সঠিক নয়। .NET 4.5.2 এর জন্য, এটি 1 (বা উপরে) সেট করা দরকার; তবে .NET 4.6 এর জন্য এটি 0 তে সেট করা না করাই যথেষ্ট হবে (যা এটি আনসেট করা যায়)।
জিরকা হানিকা

ওহ আমি। নেট 4.6 এ পরীক্ষা করিনি। আমার অনুসন্ধানগুলি সেখানে ব্লগপোস্ট জয়মনসকোড.ব্লগস্পট.কম
জয় জর্জ কুনজিককুরু

আপনি যে রেজিস্ট্রি কীটি উল্লেখ করেছেন তাতে "Wow6432Node" পড়তে হবে। আপনি কোনও কারণে "নোড" অংশটি বাদ দিয়েছেন। আমি আপনার প্রতিক্রিয়াটি সম্পাদনা করার চেষ্টা করেছি কিন্তু আমার পরিবর্তনটি কেবল 4 টি অক্ষর ছিল যাতে এটি আমাকে দেয় না। : \
জেফরি লেকর্সস

এই সেটিংটি ডিফল্ট হিসাবে সক্রিয় করতে আমাকে আইআইএসে বাউন্স করতে হয়েছিল।
জেফ মিচেল

10

আমি .NET 4.5.2 এর অধীনে চলছি, এবং আমি এই উত্তরগুলির সাথে কোনওরকম খুশি নই। যেহেতু আমি এমন একটি সিস্টেমে কথা বলছি যা টিএলএস 1.2 সমর্থন করে এবং এসএসএল 3, টিএলএস 1.0 এবং টিএলএস 1.1 সমস্ত ভাঙ্গা এবং ব্যবহারের জন্য অনিরাপদ, আমি এই প্রোটোকলগুলি সক্ষম করতে চাই না। .NET 4.5.2 এর অধীনে, এসএসএল 3 এবং টিএলএস 1.0 প্রোটোকল উভয়ই ডিফল্টরূপে সক্ষম হয়েছে, যা আমি পরিদর্শন করে কোডটিতে দেখতে পাচ্ছি ServicePointManager.SecurityProtocol। .NET 4.7 এর অধীনে, নতুন আছেSystemDefaultপ্রোটোকল মোড যা স্পষ্টভাবে ওএসের কাছে প্রোটোকল নির্বাচন হস্তান্তর করে, যেখানে আমি বিশ্বাস করি যে রেজিস্ট্রি বা অন্যান্য সিস্টেম কনফিগারেশন সেটিংসের উপর নির্ভর করা উপযুক্ত হবে। এটি নেট .৪.২.২ এর অধীন সমর্থিত বলে মনে হচ্ছে না। ফরওয়ার্ডস-সামঞ্জস্যপূর্ণ কোড লেখার স্বার্থে, ভবিষ্যতে টিএলএস ১.২ অবশ্যম্ভাবীভাবে ভেঙে যাওয়ার পরেও, বা আমি .NET 4.7+ এ আপগ্রেড হয়ে গেলে ওএসে একটি উপযুক্ত প্রোটোকল নির্বাচন করার জন্য আরও বেশি দায়িত্ব হস্তান্তরিত হওয়ার পরেও সঠিক সিদ্ধান্ত গ্রহণ করা যায় will , আমি নিম্নলিখিত কোডটি গ্রহণ করেছি:

SecurityProtocolType securityProtocols = ServicePointManager.SecurityProtocol;
if (securityProtocols.HasFlag(SecurityProtocolType.Ssl3) || securityProtocols.HasFlag(SecurityProtocolType.Tls) || securityProtocols.HasFlag(SecurityProtocolType.Tls11))
{
    securityProtocols &= ~(SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | SecurityProtocolType.Tls11);
    if (securityProtocols == 0)
    {
        securityProtocols |= SecurityProtocolType.Tls12;
    }
    ServicePointManager.SecurityProtocol = securityProtocols;
}

এই কোডটি যখন কোনও পরিচিত নিরাপত্তাহীন প্রোটোকল সক্ষম করা হবে তখন এটি সনাক্ত করবে এবং এই ক্ষেত্রে আমরা এই সুরক্ষিত প্রোটোকলগুলি সরিয়ে ফেলব। যদি অন্য কোনও স্পষ্ট প্রোটোকল না থেকে থাকে তবে আমরা টিএলএস 1.2 সক্ষম করতে বাধ্য করব, সময়মতো এই সময়ে .NET দ্বারা সমর্থিত একমাত্র পরিচিত নিরাপদ প্রোটোকল হিসাবে। এই কোডটি ফরওয়ার্ডস সামঞ্জস্যপূর্ণ, কারণ এটি নতুন প্রোটোকল ধরণের বিবেচনায় নেবে যা ভবিষ্যতে যুক্ত হওয়ার বিষয়ে জানে না এবং এটি নতুনটির সাথেও দুর্দান্ত খেলবে willSystemDefault.NET 4.7 এ স্টেট করুন, মানে ভবিষ্যতে আমাকে এই কোডটি পুনরায় দেখতে হবে না। আমি কোনও বিশেষ সুরক্ষা প্রোটোকলকে নিঃশর্ত অবস্থায় কঠোর কোডিংয়ের পরিবর্তে এই জাতীয় মত গ্রহণের দৃ strongly়তার সাথে সুপারিশ করব, অন্যথায় টিএলএস ১.২ যখন নতুন সুরক্ষা প্রোটোকলে আপগ্রেড করতে আপনাকে নিজের ক্লায়েন্টকে নতুন সংস্করণ দিয়ে পুনর্নির্মাণ এবং প্রতিস্থাপন করতে হবে T অনিবার্যভাবে ভেঙে গেছে, বা সম্ভবত আরও বেশি বছর আপনার সার্ভারে বিদ্যমান অনিরাপদ প্রোটোকলগুলি আপনাকে ছেড়ে যেতে হবে, যা আপনার সংস্থাকে আক্রমণগুলির লক্ষ্য হিসাবে পরিণত করবে making


1
এই উত্তরটি সর্বাধিক চিন্তাভাবনার মতো বলে মনে হচ্ছে, যদিও আমি কিছু মিস করছি না, যখনই টিএলএস ১.২ অবশ্যম্ভাবীভাবে ভেঙে যায় তখন আমি নিশ্চিত নই যে এটি সামঞ্জস্যপূর্ণ হবে। আমার .NET 4.7.2 অ্যাপ্লিকেশনটিতে আমি যা দেখছি তা থেকে SecurityProtocolType.SystemDefaultপতাকাটি মূল্যায়ণ করে 0, তাই if (securityProtocols == 0)টিএলএস ১.২ এর জন্য বিটওয়াইস অন্তর্ভুক্ত বা পতাকাটির সাথে চেক করা সর্বদা টিএলএস ১.২ অন্তর্ভুক্ত করবে, "ব্রেক" হওয়ার পরেও, তাই না? এখানে তীক্ষ্ণ শুটিং নয়। আমি সত্যিকার অর্থে এগিয়ে যাওয়ার সেরা পথটি খুঁজতে চেষ্টা করছি।
গ্রিসওয়াল্ড_911

আমি এই অন্তর্ভুক্ত করা আপনার কোড মডিফাই করে থাকেন এবং এটি কাজ এবং এগিয়ে সামঞ্জস্যপূর্ণ উপস্থিত হতে পারে: if (!Enum.IsDefined(typeof(SecurityProtocolType), 0) && securityProtocols == 0) { securityProtocols |= SecurityProtocolType.Tls12; }
গ্রিসওয়াল্ড_911

@ গ্রিসওয়াল্ড_৯১১, আমার ৪.7.২ কনসোল অ্যাপ্লিকেশনটিতে আমার অনুরূপ কোড রয়েছে এবং আমি এই লাইনটি securityProtocols |= SecurityProtocolType.Tls12;(ব্লক ব্যতীত) সিস্টেমডাফল্ট বজায় রাখে না, সুরক্ষাপ্রোটোকলগুলি কেবলমাত্র পরে TLS2 রয়েছে। সুতরাং আপনার মানে কি যখন মানটি সিস্টেমডাফল্ট হয়, কোনও মান আপডেট করা উচিত নয়? এগিয়ে সামঞ্জস্যপূর্ণ সম্পর্কে, আপনি কি ধরে নিচ্ছেন যে ওএস টিএলএস 1.3 এর মতো আরও নতুন প্রোটোকল সক্ষম করার জন্য যত্ন নেবে?
ইয়াং

@ ইয়াং - সঠিক লাইন securityProtocols |= SecurityProtocolType.Tls12;' will add TLS 1.2, but because the সিকিউরিটিপ্রোটোকল [Flags]টাইপ The এনামের একটি বৈশিষ্ট্য রয়েছে এবং সিস্টেমডেফল্ট গণনা মানটি হ'ল 0, সিস্টেমডিফল্ট মানটি আগেই সেট করা থাকলেও তা ছিনিয়ে নেওয়া হবে। শেষ ফলাফলটি হ'ল আপনি হয় SevicePointManager.SecurityProtocol 0 এ সেট করতে পারেন , বা অন্যান্য গণনা মানগুলির যে কোনও সংমিশ্রণে। যদি আপনি এটিকে সিস্টেমডাফল্টে সেট করেন তবে আপনি মূলত নিজেরাই প্রোটোকলটি নির্দিষ্ট করে বেছে নেবেন এবং ওএসকে সিদ্ধান্ত নিতে দেবেন।
গ্রিসওয়াল্ড_911

1
@ ইয়াং - মুল বক্তব্যটি হ'ল সিস্টেমডাফল্টে মান নির্ধারণের পরে, আপনার অ্যাপ্লিকেশনটি ওএস নির্দিষ্ট করে যা ব্যবহার করতে হবে - যা উইন্ডোজ 10 এর সর্বশেষ সংস্করণে টিএলএস 1.2 রয়েছে। ধারণাটি ভবিষ্যতে যখন টিএলএস 1.3 হয় মানক, সেই কার্যকারিতাটি উত্তরাধিকারী করার জন্য আপনার অ্যাপ্লিকেশনটি পরিবর্তন করতে হবে না। ডকুমেন্টেশনটি এখানে দেখুন , যেখানে সিস্টেমডেফল্ট "অপারেটিং সিস্টেমটিকে ব্যবহারের জন্য সেরা প্রোটোকল চয়ন করতে এবং সুরক্ষিত নয় এমন প্রোটোকলগুলি ব্লক করতে দেয়"।
গ্রিসওয়াল্ড_911

6

মাইক্রোসফ্ট সম্প্রতি এই চারপাশে সেরা অভ্যাস প্রকাশিত। https://docs.microsoft.com/en-us/dotnet/framework/network-programming/tls

সারসংক্ষেপ

টার্গেট। নেট ফ্রেমওয়ার্ক 4.7, সিকিউরিটিপ্রোটোকল সেট করে এমন কোনও কোড সরিয়ে ফেলুন, সুতরাং ওএস আপনাকে সর্বাধিক সুরক্ষিত সমাধান ব্যবহার নিশ্চিত করবে।

নোট: আপনার ওএসে টিএলএসের সর্বশেষতম সংস্করণ সমর্থিত এবং সক্ষম হয়েছে তাও আপনাকে নিশ্চিত করতে হবে।

OS                          TLS 1.2 support

Windows 10                  \_ Supported, and enabled by default.
Windows Server 2016         /   
Windows 8.1                 \_ Supported, and enabled by default.
Windows Server 2012 R2      /
Windows 8.0                 \_ Supported, and enabled by default.
Windows Server 2012         /
Windows 7 SP1               \_ Supported, but not enabled by default*.
Windows Server 2008 R2 SP1  /
Windows Server 2008         -  Support for TLS 1.2 and TLS 1.1 requires an update. See Update to add support for TLS 1.1 and TLS 1.2 in Windows Server 2008 SP2.
Windows Vista               -  Not supported.

* To enable TLS1.2 via the registry see https://docs.microsoft.com/en-us/windows-server/security/tls/tls-registry-settings#tls-12 

    Path: HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS1.2\Server

        Property: Enabled
        Type: REG_DWORD
        Value: 1

        Property: DisabledByDefault 
        Type: REG_DWORD
        Value: 0

    Path: HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS1.2\Client

        Property: Enabled
        Type: REG_DWORD
        Value: 1

        Property: DisabledByDefault 
        Type: REG_DWORD
        Value: 0

আরও তথ্য এবং পুরানো ফ্রেমওয়ার্কগুলির জন্য, দয়া করে এমএস লিঙ্কটি দেখুন।


3
সমস্যাটি হ'ল টিএলএস 1.1 এবং টিএলএস 1.2 উইন্ডোজ 7 এবং সার্ভার 2008 এ কাজ করবে না যদি আপনি গাইডলাইনগুলি অনুসরণ করেন (সিকিউরিটিপ্রোটোকলটাইপ.সিসটেমডাফল্ট রাখছেন) কারণ এগুলি ওএসে 'সক্ষম' করা হয়নি (যার অর্থ যার অর্থ) কোনও রেজিস্ট্রি পরিবর্তন ছাড়াই। এটি বাস্তবে ডিজাইন দ্বারা সিস্টেমডাফল্টকে ভাঙ্গা করে তোলে। মাইক্রোসফ্ট সত্যিই এই এক জগাখিচুড়ি।
osexpert

ভাল লাগল, ধন্যবাদ @ ইজেক্সার্ট, ভাল ক্যাচ। সমর্থিত ওএসএস সম্পর্কিত তথ্য অন্তর্ভুক্ত করার জন্য আমি উত্তরটি সংশোধন করেছি, সুতরাং পুরানো ওএসএস চালানো লোকদের জন্য কোনও বিস্ময়ের কারণ নেই যেখানে কেবলমাত্র 4.7 লক্ষ্যমাত্রা নির্ধারণ করা যথেষ্ট নয়।
জনএলবেভান

1
এনবি: কিছু
ওএসে আরও

1
যদি রেজিস্ট্রি সেটিংস কোনও বিকল্প না হয় তবে আমার কাছে মনে হয় এটি নেট 7.+++ এর জন্য সেরা সমাধান: if (System.Environment.OSVersion.Version < new Version(6, 2) /* Windows 8 */) ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12; else ServicePointManager.SecurityProtocol = SecurityProtocolType.SystemDefault;
osexpert

5

সম্পূর্ণতার জন্য, এখানে একটি পাওয়ারশেল স্ক্রিপ্ট যা পূর্বোক্ত রেজিস্ট্রি কীগুলি সেট করে:

new-itemproperty -path "HKLM:\SOFTWARE\Microsoft\.NETFramework\v4.0.30319" -name "SchUseStrongCrypto" -Value 1 -PropertyType "DWord";
new-itemproperty -path "HKLM:\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319" -name "SchUseStrongCrypto" -Value 1 -PropertyType "DWord"

2

উপরে উল্লিখিত হিসাবে হার্ড-কোডিং ServicePointManager.SecurityProtocolবা সুস্পষ্ট SchUseStrongCrypto কী এর বিকল্প :
আপনি সিস্টেম ডিফল্টটিএলএস ভার্সন কী দ্বারা ডিফল্ট SCHANNEL সেটিংস ব্যবহার করতে .NET বলতে পারেন
:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319] "SystemDefaultTlsVersions"=dword:00000001
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319] "SystemDefaultTlsVersions"=dword:00000001

2

এই সমস্যার সর্বোত্তম সমাধান হ'ল কমপক্ষে .NET 4.6 বা তারপরে আপগ্রেড করা হবে যা স্বয়ংক্রিয়ভাবে শক্তিশালী প্রোটোকল পাশাপাশি শক্তিশালী সিফারগুলি বেছে নেবে।

যদি আপনি .NET 4.6 এ আপগ্রেড করতে না পারেন, সেটিংয়ের পরামর্শ

সিস্টেম.নেট.সেবারপয়েন্ট ম্যানেজ.সেকিউরিপিট্রোকল = সিকিউরিটিপ্রোটোকলটাইপ.টিএসএস 11 | SecurityProtocolType.Tls12;

এবং রেজিস্ট্রি সেটিংস ব্যবহার করে:

HKEY_LOCAL_MACHINE OF সফটওয়্যার \ Microsoft.NETFramework \ v4.0.30319 - SchUseStrongCrypto = 1 HKEY_LOCAL_MACHINE OF সফটওয়্যার ow মাইক্রোসফ্ট এর নেটফ্রেম ওয়ার্ক -৩০ -৩.০৩-৩০ -৩৩০ -৩৩০ -U৩০-এর ওয়ার্ক -৩০ -৩.০৪-ORD৪০ -.0৪ এর

টিএলএস 1.0 এবং একটি শক্তিশালী সাইফার ব্যতীত অন্য কিছু ব্যবহারের ফলাফল।

আমার পরীক্ষায়, কেবলমাত্র Wow6432 নোডের সেটিংটিতে কোনও পার্থক্য হয়েছে, যদিও আমার পরীক্ষার অ্যাপ্লিকেশনটি কোনও সিপিইউতে নির্মিত হয়েছিল।


স্পষ্টকরণ: আপনার কেবল সেভিসপয়েন্ট ম্যানেজ.সিকিউরিটিপ্রোটোকল সেট করতে হবে বা রেজিস্ট্রি সেটিংস সেট করতে হবে। দুটোই করার দরকার নেই। আমার অ্যাপ্লিকেশনটির জন্য, আমি কেবল সার্ভিসপয়েন্ট ম্যানেজ.সিকিউরিটিপ্রোটোকল সেট করতে বেছে নিয়েছি। আমার যুক্তিটি হল যে রেজিস্ট্রি সেট করা পুরো মেশিনকে প্রভাবিত করে এবং আমি অন্য কারও অ্যাপ্লিকেশন ভঙ্গ করতে চাইনি কারণ এটি টিএলএস 1.0 এর উপর নির্ভর করে।
GWC

1

মতে ট্রান্সপোর্ট লেয়ার সিকিউরিটি (TLS) .NET ফ্রেমওয়ার্ক সর্বোত্তম কার্যাভ্যাস : নিশ্চিত করার জন্য .NET ফ্রেমওয়ার্ক অ্যাপ্লিকেশন নিরাপদ থাকা, TLS সংস্করণ উচিত না হার্ডকোডেড হবে না। পরিবর্তে রেজিস্ট্রি কীগুলি সেট করুন: SystemDefaultTlsVersions এবং SchUseStrongCrypto :

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\.NETFramework\v2.0.50727]
"SystemDefaultTlsVersions"=dword:00000001
"SchUseStrongCrypto"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\.NETFramework\v4.0.30319]
"SystemDefaultTlsVersions"=dword:00000001
"SchUseStrongCrypto"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v2.0.50727]
"SystemDefaultTlsVersions"=dword:00000001
"SchUseStrongCrypto"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319]
"SystemDefaultTlsVersions"=dword:00000001
"SchUseStrongCrypto"=dword:00000001

0

যদি আপনি .NET 4.7.1 বা আরও নতুন ব্যবহার করতে পারেন তবে এটি অপারেটিং সিস্টেমের সামর্থ্যের ভিত্তিতে সর্বনিম্ন প্রোটোকল হিসাবে টিএলএস 1.2 ব্যবহার করবে। প্রতি মাইক্রোসফ্ট সুপারিশ:

To ensure .NET Framework applications remain secure, the TLS version should not be hardcoded. .NET Framework applications should use the TLS version the operating system (OS) supports.

-2

কীটির জন্য: HKEY_LOCAL_MACHINE OF সফটওয়্যার \ মাইক্রোসফ্ট. নেট ফ্রেমওয়ার্ক \ v4.0.30319 মান: SchUseStrongCrypto

আপনাকে মানটি সেট করতে হবে 1।


5
আমি মনে করি আপনি হতাশ হয়ে পড়ছেন কারণ এর জবাব মার্সের একই উত্তরটি দেওয়া হয়েছে, তবে কম বিশদ সহ
স্টুয়ার্ট সিগেলার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.