কীভাবে সমাধান করবেন "কর্তৃপক্ষের সাথে এসএসএল / টিএলএস সুরক্ষিত চ্যানেলের জন্য বিশ্বাসের সম্পর্ক স্থাপন করতে পারেনি"


135

সত্যই ভেবেছিলাম আমার এই সমস্যাটি ঠিক হয়ে গেছে তবে এটি কেবল আগে ছদ্মবেশ ধারণ করেছিল।

আমার এইচটিটিপিএস ব্যবহার করে আইআইএস 7-তে হোস্ট করা একটি ডাব্লুসিএফ পরিষেবা রয়েছে। আমি যখন ইন্টারনেট এক্সপ্লোরার এই সাইটের ব্রাউজ, এটি একটি যাদুমন্ত্র মত কাজ করে, এই কারণ আমি আছে স্থানীয় মূল শংসাপত্র কর্তৃপক্ষ দোকান থেকে শংসাপত্র এখনো যোগ করেনি।

আমি 1 মেশিনে বিকাশ করছি, তাই ক্লায়েন্ট এবং সার্ভার একই মেশিন। শংসাপত্রটি সরাসরি আইআইএস 7 ম্যানেজমেন্ট স্ন্যাপ ইন থেকে স্ব-স্বাক্ষরিত হয়।

আমি ক্রমাগত এখন এই ত্রুটি পেয়েছি ...

কর্তৃপক্ষের সাথে এসএসএল / টিএলএস সুরক্ষিত চ্যানেলের জন্য বিশ্বাসের সম্পর্ক স্থাপন করতে পারেনি।

... ক্লায়েন্ট কনসোল থেকে কল করা হলে।

আমি ম্যানুয়ালি নিজেকে ব্যবহার findprivatekeyএবং ব্যবহার করে শংসাপত্রটিতে অনুমতি এবং নেটওয়ার্ক পরিষেবা দিয়েছি cacls.exe

আমি SOAPUI ব্যবহার করে পরিষেবাটির সাথে সংযোগ স্থাপনের চেষ্টা করেছি এবং এটি কাজ করে, তাই এটি অবশ্যই আমার ক্লায়েন্ট অ্যাপ্লিকেশনটিতে একটি সমস্যা হতে পারে, যা এইচটিপি-র সাহায্যে কী ব্যবহৃত হবে তার ভিত্তিতে কোড।

আমি আর কোথায় দেখতে পাচ্ছি যে আমি কেন সংযোগ করতে পারছি না এমন সমস্ত সম্ভাবনা আমি শেষ করে দিয়েছি?



আপনার শংসাপত্র তৈরির নিয়ন্ত্রণ যদি আপনার থাকে তবে "বিকল্প বিষয় নাম" সম্পর্কে ভুলবেন না। যেমন আপনি "* .full.domainname.com" এ একটি ওয়াইল্ড কার্ড রাখতে পারেন। Digicert.com/subject-al
বিকল্প-

উত্তর:


198

একটি ওয়ার্কঅ্যারাউন্ড হিসাবে আপনি একটি হ্যান্ডলার যোগ করতে পারিনি ServicePointManager'র ServerCertificateValidationCallbackক্লায়েন্ট সাইড করুন:

System.Net.ServicePointManager.ServerCertificateValidationCallback +=
    (se, cert, chain, sslerror) =>
        {
            return true;
        };

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


9
আমি মনে করি বেশিরভাগ সর্বজনীন সেটআপগুলি একটি ক্রয়কৃত শংসাপত্র ব্যবহার করবে তবে দেবের সময় শর্তসাপেক্ষে # উপরের বিবৃতিতে উপরের কোডটি ব্যবহার করবে। এন্টারপ্রাইজ devs উচিত সাধারণত সেটআপ একটি অভ্যন্তরীণ সিএ সার্ভার >> technet.microsoft.com/en-us/library/cc875810.aspx
লুক Puplett

2
ফিডলার 2 এর সাথে ডিবাগিংয়ের জন্য কীভাবে আমার এসএসএল ডাব্লুসিএফ কল কাজ করতে যায় তা বুঝতে আমাকে সহায়তা করেছে ed
রজার উইলককস

2
@karank Global.asax মধ্যে Application_Start পদ্ধতি (দেখুন এটি নির্বাণ বিবেচনা stackoverflow.com/a/12507094/1175419 )। আমি দৃif়রূপে একটি # আইডিবুগ সংকলক নির্দেশিকা বা লুকের মন্তব্যে উল্লিখিত অনুরূপ কিছু ব্যবহার করার পরামর্শ দেব।
ধনী সি

4
অসাধারণ! আপনি ল্যাম্বডা এক্সপ্রেশনটি সিস্টেম হিসাবে ব্যবহার করতে পারেন et
ধনুকা

কিছুটা অতিরিক্ত ব্যাখ্যা এখানে পাওয়া যাবে: blog.effectivemessaging.com/2015_09_01_archive.html
গ্রানাডা কোডার

40

আমার যখন এই সমস্যা হয় তখন এটি হয় কারণ ক্লায়েন্ট.কনফাইগের এর শেষ পয়েন্টগুলি ছিল:

 https://myserver/myservice.svc 

তবে শংসাপত্রটি আশা করছিল

 https://myserver.mydomain.com/myservice.svc

সার্ভারের এফকিউডিএন মেলে শেষ পয়েন্টগুলি পরিবর্তন করা আমার সমস্যার সমাধান করে। আমি জানি এটি এই সমস্যার একমাত্র কারণ নয়।


আমার কেবল এই সমস্যাটি আবার হয়েছিল এবং এবার এটির সাথে ভুল শংসাপত্রটি ব্যবহার করা উচিত। মনে হচ্ছে এটি উভয় ক্ষেত্রেই সঠিকভাবে নামগুলির সাথে মিলে যাওয়া।
মাইক চিল

3
আমার স্বয়ংক্রিয় কনফিগারেশন ছিল <শেষবিন্দু ঠিকানা = "উত্পন্ন স্থানীয় হোস্ট / myservice.svc " এই জন্য <শেষবিন্দু ঠিকানা = "পরিবর্তন mymachine.mydoman.com/myservice.svc " এই সমাধান।
নাইটচার্জ

এটি একেবারে আমার সমস্যা এবং আপনার উত্তরটি পেতে আমার দু'দিন সময় লেগেছে। +1, আমি পারলে +1000 দেই।
অ্যাসিওয়ে

20

প্রথম দুটি লাম্বদা ব্যবহার করুন, তৃতীয়টি নিয়মিত কোড ব্যবহার করে ... আশা করি আপনি এটি সহায়ক বলে মনে করছেন

            //Trust all certificates
            System.Net.ServicePointManager.ServerCertificateValidationCallback =
                ((sender, certificate, chain, sslPolicyErrors) => true);

            // trust sender
            System.Net.ServicePointManager.ServerCertificateValidationCallback
                = ((sender, cert, chain, errors) => cert.Subject.Contains("YourServerName"));

            // validate cert by calling a function
            ServicePointManager.ServerCertificateValidationCallback += new RemoteCertificateValidationCallback(ValidateRemoteCertificate);

    // callback used to validate the certificate in an SSL conversation
    private static bool ValidateRemoteCertificate(object sender, X509Certificate cert, X509Chain chain, SslPolicyErrors policyErrors)
    {
        bool result = false;
        if (cert.Subject.ToUpper().Contains("YourServerName"))
        {
            result = true;
        }

        return result;
    }

1
// সমস্ত শংসাপত্রগুলিতে বিশ্বাস করুন.নেট.সেবারপয়েন্ট ম্যানেজ.সর্ভারসিয়ার্টিফিটভালিডেশনক্যালব্যাক + = (সে, সার্টি, চেইন, স্লারারার) => {সত্য প্রত্যাবর্তন; }; // ট্রাস্ট প্রেরক সিস্টেম.নেট.সেবারপয়েন্ট ম্যানেজ.সর্ভারসিয়ার্টিফিটভালিডেশনক্যালব্যাক + = (সে, সার্ট, চেইন, স্লারারার) => cer প্রত্যয় প্রত্যয়ন.সুবজেক্ট.স কনটেনস ("ca-l-9wfvrm1.ceridian.ca"); };
ভুডোচিল্ড

1
যে কোনও ক্র্যাকার উপরের সমস্ত পরীক্ষায় পাস করে একটি শংসাপত্র জাল করতে পারে। এটি অনিরাপদ।
বজরতুর থরলেসিয়াস

19

আপনার সমস্যা দেখা দিয়েছে কারণ আপনি স্ব-স্বাক্ষরিত কী ব্যবহার করছেন। ক্লায়েন্টটি এই কীটিকে বিশ্বাস করে না, বা কীটি নিজেই যাচাই করার জন্য একটি শৃঙ্খলা বা শংসাপত্র প্রত্যাহার তালিকা সরবরাহ করে না।

আপনার কাছে কয়েকটি বিকল্প রয়েছে - আপনি পারেন

  1. ক্লায়েন্টের শংসাপত্রের বৈধতা বন্ধ করুন (খারাপ পদক্ষেপ, মাঝারি আক্রমণে প্রচুর লোক)

  2. একটি রুট সিএ তৈরি করতে এবং সেই থেকে শংসাপত্র তৈরি করতে মেকসার্ট ব্যবহার করুন (ঠিক আছে, তবে এখনও কোনও সিআরএল নেই)

  3. উইন্ডোজ শংসাপত্র সার্ভার বা অন্যান্য পিকেআই সমাধান ব্যবহার করে একটি অভ্যন্তরীণ রুট সিএ তৈরি করুন তারপরে সেই রুট সার্টটি বিশ্বাস করুন (পরিচালনা করার জন্য কিছুটা ব্যথা)

  4. কোনও বিশ্বস্ত সিএ থেকে একটি এসএসএল শংসাপত্র কিনুন (ব্যয়বহুল)


3
(4) সম্পর্কিত, স্টার্টএসএল আসলে আপনাকে একটি বিনামূল্যে ক্লাস 1 শংসাপত্র দেয় যা সমস্ত বড় ব্রাউজারগুলিতে কাজ করে। আমার অর্ধ ডজন লো ব্যান্ডউইথ সাইটের জন্য তারা আমার পক্ষে দুর্দান্ত কাজ করে।
মুডবুম

আমি মনে করি এই তালিকায় # 2 ... এই url সাহায্য করতে পারে: ব্লগস.টেকনেট.মাইক্রোসফট.com / jhoward / 2005 / 02 / 02/ … "বিশ্বস্ত রুট সার্টিফিকেশন অথরিটি এবং এসএসএল শংসাপত্র জারি করার জন্য মেককার্ট কীভাবে ব্যবহার করতে হয়"
গ্রানাডা কোডার

1
নোট: StartCom আর বিশ্বস্ত - এবং শুধুমাত্র Chrome থেকে সরিয়ে দেওয়া হয়েছে en.wikipedia.org/wiki/StartCom
Simon_Weaver

16

একটি ওয়ান লাইন সমাধান। ক্লায়েন্ট পক্ষের সার্ভার কল করার আগে এটি যে কোনও জায়গায় যুক্ত করুন:

System.Net.ServicePointManager.ServerCertificateValidationCallback += delegate { return true; };

এটি কেবল পরীক্ষার উদ্দেশ্যে ব্যবহার করা উচিত কারণ ক্লায়েন্টটি এসএসএল / টিএলএস সুরক্ষা চেকগুলি এড়িয়ে যাবে।


2
পরীক্ষার জন্য একটি উজ্জ্বল workaround। আমরা এমন একটি পরিষেবা গ্রাস করছি যার সরবরাহকারীর সুরক্ষা শংসাপত্রগুলির একটি সংশ্লেষিত শৃঙ্খলা দিয়ে সুরক্ষাটিকে একটি জীবন্ত নরক করে তুলেছে এবং যতক্ষণ না আমরা তাদের জাল সনদের এবং সঠিকভাবে কাজ করার জন্য শৃঙ্খলা না পাই, এই কাজটিই কেবল আমাদের বিকাশ চালিয়ে যাওয়ার অনুমতি দেয়।
markaaronky

12

আমি একই সমস্যার মুখোমুখি হয়েছি এবং এটি দুটি সমাধান দিয়ে সমাধান করতে সক্ষম হয়েছি: প্রথমত, আমি "কম্পিউটার অ্যাকাউন্ট" এর জন্য এমএমসি স্ন্যাপ-ইন "শংসাপত্রগুলি" ব্যবহার করে স্ব-স্বাক্ষরিত শংসাপত্রটিকে "বিশ্বস্ত রুট শংসাপত্র কর্তৃপক্ষসমূহ" ফোল্ডারে টেনে আনি । এর অর্থ স্থানীয় কম্পিউটার (যেটি শংসাপত্র তৈরি করেছে) এখন সেই শংসাপত্রকে বিশ্বাস করবে। দ্বিতীয়ত আমি লক্ষ্য করেছি যে শংসাপত্রটি কিছু অভ্যন্তরীণ কম্পিউটার নামের জন্য তৈরি করা হয়েছিল, তবে অন্য নাম ব্যবহার করে ওয়েব পরিষেবা অ্যাক্সেস করা হচ্ছে। শংসাপত্রটি যাচাই করার সময় এটি একটি অমিলের কারণ ঘটেছে। আমরা কম্পিউটার.অপারশন.লোকালের জন্য শংসাপত্র তৈরি করেছি, তবে https://computer.interndomain.companydomain.com ব্যবহার করে ওয়েব পরিষেবা অ্যাক্সেস করেছি । শংসাপত্র উত্পন্ন করার জন্য আমরা যখন ইউআরএল পরিবর্তন করি তখন আমরা আর ত্রুটি পাই নি।

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


11

আপনি যদি নেট কোর ব্যবহার করেন তবে এটি ব্যবহার করে দেখুন:

client.ClientCredentials.ServiceCertificate.SslCertificateAuthentication =
        new X509ServiceCertificateAuthentication()
        {
            CertificateValidationMode = X509CertificateValidationMode.None,
            RevocationMode = System.Security.Cryptography.X509Certificates.X509RevocationMode.NoCheck
        };

1
ধন্যবাদ, এটি কাজ করে। তবে। নেট কোর এর সাথে কিছু করার নেই। এটি একটি সর্বজনীন রেসিপি :)
আলেকজান্ডার

7

নিম্নলিখিত পদক্ষেপগুলি করুন:

  1. আইইতে সার্ভিস লিঙ্কটি খুলুন।

  2. অ্যাড্রেস বারে উল্লিখিত শংসাপত্রের ত্রুটিতে ক্লিক করুন এবং দেখুন শংসাপত্রগুলিতে ক্লিক করুন।

  3. চেক জারি: নাম।

  4. জারি করা নামটি নিন এবং পরিষেবাতে ক্লায়েন্টের এন্ডপয়েন্টের ভিত্তি ঠিকানা ঠিকানার নাম স্থানীয় হস্ট উল্লেখ এবং একটি সম্পূর্ণরূপে যোগ্যতাসম্পন্ন ডোমেন নাম (এফকিউডিএন) এর সাথে প্রতিস্থাপন করুন।

উদাহরণস্বরূপ: https: // লোকালহোস্ট : 203 / নমুনা পরিষেবা: https: // INL-126166-.groupinfra.com : 203 / নমুনা পরিষেবা.সভিসি


দুর্দান্ত, এই উত্তরের জন্য ধন্যবাদ! কোনও কোড পরিবর্তন না করে সমস্যাগুলি সমাধান করুন।
বিপিন দুবে

6

উপরের উত্তরগুলি ছাড়াও, আপনি যদি এই ক্লায়েন্টটি ভুল টিএলএস সংস্করণটি চালাচ্ছেন তবে আপনি এই ত্রুটির মুখোমুখি হতে পারেন, উদাহরণস্বরূপ যদি সার্ভারটি কেবল টিএলএস 1.2 চালিত হয়।

আপনি এটি ব্যবহার করে এটি ঠিক করতে পারেন:

// tested in .NET 4.5:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

আমার ক্ষেত্রে গৃহীত উত্তরটি আমাকে সাহায্য করেনি, তবে
সের্গেই

এটিই একমাত্র উত্তর যা আমার ক্ষেত্রে ত্রুটিটি সংশোধন করেছে।
টোলগা

5

আমারও একই সমস্যা ছিল। আমি স্থানীয় দোকানে সিএ শংসাপত্রগুলিও যুক্ত করেছিলাম, তবে আমি WRONG উপায়ে করেছি।

এমএমসি কনসোল (স্টার্ট -> রান -> মিমিসি ) ব্যবহার করে আপনার সার্ভিস অ্যাকাউন্ট (আইআইএসের পরিষেবা অ্যাকাউন্ট নির্বাচন করে) বা কম্পিউটার অ্যাকাউন্ট হিসাবে শংসাপত্র যুক্ত করা উচিত (এটি মেশিনে প্রতিটি অ্যাকাউন্টের জন্য যোগ করে)

আমি যা বলছি তার একটি চিত্র এখানে image কোনও পরিষেবা অ্যাকাউন্ট বা কম্পিউটার অ্যাকাউন্টের জন্য স্ন্যাপ-ইন যুক্ত করুন

এখান থেকে এখন আপনি সিএ ( বিশ্বস্ত রুট সিএ এবং ইন্টারমিডিয়েট সিএ ) এর শংসাপত্র যুক্ত করতে পারেন এবং সবকিছু ঠিকঠাক কাজ করবে


4

স্ব-স্বাক্ষরিত শংসাপত্রের সাথে আমারও একই সমস্যা ছিল। আমি সার্ভারের এফকিউডিএন এর মতো শংসাপত্রের নামটি ব্যবহার করে এটি সমাধান করতে পারি।

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


3

আমি কেবলমাত্র "বিশ্বস্ত রুট শংসাপত্র কর্তৃপক্ষগুলি" ফোল্ডারে শংসাপত্রটি টেনে নিয়েছি এবং ভয়েলা সবকিছু সুন্দরভাবে কাজ করেছে।

উহু. এবং আমি প্রথমে প্রশাসক কমান্ড প্রম্পট থেকে নিম্নলিখিতগুলি যুক্ত করেছি:

netsh http add urlacl url=https://+:8732/Servicename user=NT-MYNDIGHET\INTERAKTIV

আপনার ব্যবহারকারীর যে নামটি প্রয়োজন তা সম্পর্কে আমি নিশ্চিত নই (আপনি দেখতে দেখতে আমার নরওয়েজিয়ান!) : user=NT-AUTHORITY/INTERACTIVE?

কমান্ড জারি করে আপনি সমস্ত বিদ্যমান urlacl's দেখতে পাবেন: netsh http show urlacl


0

WCF পরিষেবাটির মাধ্যমে সংযোগ দেওয়ার চেষ্টা করার সময় এটি ঘটেছিল। আইপি যেমন https://111.11.111.1:port/MyService.svcকোনও নামের সাথে আবদ্ধ শংসাপত্র ব্যবহার করার সময় যেমন mysite.com।

এটি https://mysite.com:port/MyService.svcসমাধান করা স্যুইচিং ।


0

কেবলমাত্র হোস্ট নাম যেমন https: //host/MyService.svc ব্যবহার করে ডাব্লুসিএফ পরিষেবাটিতে সংযুক্ত করার চেষ্টা করার সময় এই ঘটনাটি ঘটেছিল যেমন নামের সাথে আবদ্ধ শংসাপত্র ব্যবহার করে host

Https://host.mysite.com/MyService.svc এ স্যুইচ করা এবং এটি এটি সমাধান করেছে।


0

সবেমাত্র একটি অনুরূপ ইস্যু ঠিক করা হয়েছে।

আমি বুঝতে পেরেছিলাম যে আমার কাছে এমন একটি অ্যাপ্লিকেশন পুল রয়েছে যা একটি অ্যাকাউন্টের অধীনে চলছিল যা কেবলমাত্র এটি ব্যবহার করা হয়েছিল এমন শংসাপত্রের উপর পড়ার অনুমতি পেয়েছিল।

.NET অ্যাপ্লিকেশনটি শংসাপত্রটি সঠিকভাবে পুনরুদ্ধার করতে পারে তবে এই ব্যতিক্রমটি তখনই ফেলে দেওয়া হয়েছিল যখন getRequestStream () কল করা হয়েছিল was

শংসাপত্রের অনুমতিগুলি এমএমসি কনসোলের মাধ্যমে পরিচালনা করা যায়


0

আপনি যদি নেট নেট ব্যবহার করে থাকেন তবে উন্নয়নের সময় আপনি সংকলক নির্দেশিকা ব্যবহার করে শংসাপত্রের বৈধতাটি বাইপাস করতে পারেন। এই উপায়টি কেবলমাত্র মুক্তির জন্য শংসাপত্রকে বৈধতা দেবে এবং ডিবাগের জন্য নয়:

#if (DEBUG)
        client.ClientCredentials.ServiceCertificate.SslCertificateAuthentication =
                new X509ServiceCertificateAuthentication()
                {
                    CertificateValidationMode = X509CertificateValidationMode.None,
                    RevocationMode = System.Security.Cryptography.X509Certificates.X509RevocationMode.NoCheck
                };   #endif

-6

এটি আপনার ক্লায়েন্ট কোডে যুক্ত করুন:

ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(
    delegate
    {
        return true;
    });

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