সি # শংসাপত্রের ত্রুটি উপেক্ষা করবেন?


159

রিমোট ওয়েব সার্ভিসে ওয়েব পরিষেবা অনুরোধের সময় আমি নিম্নলিখিত ত্রুটিটি পাচ্ছি:

এসএসএল / টিএলএস সুরক্ষিত চ্যানেলের জন্য বিশ্বাসের সম্পর্ক স্থাপন করতে পারেনি। ---> সিস্টেম.সিকিউরিটি.অথেন্টিফিকেশন.অথেন্টিফিকেশন এক্সেপশন: রিমোট শংসাপত্র বৈধকরণ পদ্ধতি অনুসারে অবৈধ।

যাইহোক এই ত্রুটি উপেক্ষা, এবং অবিরত আছে?

দেখে মনে হচ্ছে দূরবর্তী শংসাপত্রটি স্বাক্ষরিত নয়।

আমি যে সাইটের সাথে সংযোগ করছি সেটি হ'ল www.czebox.cz- তাই সাইটটি পরিদর্শন করতে নির্দ্বিধায় এবং ব্রাউজারগুলি সুরক্ষা ব্যতিক্রম ছুঁড়ে ফেলা লক্ষ্য করুন notice

উত্তর:


341

একটি শংসাপত্রের বৈধতা হ্যান্ডলার যুক্ত করুন। প্রত্যাবর্তন trueবৈধতা ত্রুটি উপেক্ষা করার অনুমতি দেবে:

ServicePointManager
    .ServerCertificateValidationCallback += 
    (sender, cert, chain, sslPolicyErrors) => true;

6
এটি প্রথমে প্রদর্শিত হতে পারে তার চেয়েও বেশি দরকারী। পরিচালিত এক্সচেঞ্জড ওয়েব সার্ভিসেস (ইডাব্লুএস) ব্যবহার করার সময় আমি ওপি-র সমস্যার মধ্যে পড়েছিলাম। আমি ভেবেছিলাম যে এই পরিচালিত লাইব্রেরি দ্বারা করা নিম্ন-স্তরের এসওএপি কলগুলিতে আমার অ্যাক্সেস নেই বলে আমি এই উত্তরটি ব্যবহার করতে পারব না। কিন্তু যখন আমি এটির দিকে আরেকবার নজর রাখলাম তখন বুঝতে পারি সার্ভিসপয়েন্ট ম্যানেজারটি তার নিজেরাই দাঁড়িয়ে আছে। সুতরাং, আমি এক্সচেঞ্জ সার্ভিস শুরু করার আগে উপরের কলব্যাকটি যুক্ত করেছি এবং এটি একটি কবজির মতো কাজ করেছে।
মার্ক মিউয়ার

2
বিশ্বব্যাপী বাইপাস কীভাবে প্রয়োগ করা যায় তার একটি উদাহরণ এখানে। আমাদের সবার খারাপ অভ্যাসের জন্য। (কখনও কখনও আপনার কোনও বিকল্প নেই) jasig.275507.n4.nabble.com/…
স্নোইয়েটিস

1
একটি বড় আপনাকে ধন্যবাদ সাময়িকভাবে সমস্যার সমাধান করে। ওয়েব এপি
শিবলিঙ্গামূর্তি 17'16

2
@ মার্কমিউয়ার আমার ইডব্লিউএস এপিআই সমস্যার জন্য এই সমাধানটি প্রায় ছেড়ে দিতে যাচ্ছিল, কিন্তু তারপরে আমি আপনার মন্তব্যটি দেখেছি।
মাহেন

7
@ মিগুয়েলওলোসো আপনি কোর্সটি কমিয়ে আনতে নির্দ্বিধায় রয়েছেন, তবে মনে রাখবেন, প্রশ্ন বা উত্তর কেউই এর সুরক্ষা দিক নিয়ে আলোচনা করবেন না। বিষয়টি স্পষ্টভাবে "কীভাবে বৈধতা ত্রুটি উপেক্ষা করবেন", এটি "কেন আমাদের এটি করা উচিত / করা উচিত নয়" নয়, যা সামগ্রিকভাবে একটি ভিন্ন বিষয়। কেন ওপি এটি করবে না তা নিয়ে আলোচনায় যাওয়ার ফলে কেবল জলাবদ্ধতা হবে, মন্তব্যকারীরা উল্লেখ করেছেন যে যুক্তিযুক্ত ক্ষেত্রে রয়েছে যেখানে আপনি আসলে এটি করবেন। সুতরাং আমরা বিষয়টির সাথে লেগে থাকি এবং সমস্যার সমাধান করি।
পিটার লিলভল্ড

40

সমস্ত শংসাপত্রের অনুমতি দেওয়া খুব শক্তিশালী তবে এটি বিপজ্জনকও হতে পারে। আপনি যদি কেবল বৈধ শংসাপত্রের সাথে কিছু নির্দিষ্ট শংসাপত্রের মঞ্জুরি দিতে চান তবে এটি এটি করা যেতে পারে।

। নেট কোর:

using (var httpClientHandler = new HttpClientHandler())
{
    httpClientHandler.ServerCertificateCustomValidationCallback = (message, cert, chain, sslPolicyErrors) => {
        if (sslPolicyErrors == SslPolicyErrors.None)
        {
            return true;   //Is valid
        }

        if (cert.GetCertHashString() == "99E92D8447AEF30483B1D7527812C9B7B3A915A7")
        {
            return true;
        }
        return false;
    };
    using (var httpClient = new HttpClient(httpClientHandler))
    {
        var httpResponse = httpClient.GetAsync("https://example.com").Result;
    }
}

। নেট ফ্রেমওয়ার্ক:

System.Net.ServicePointManager.ServerCertificateValidationCallback += delegate (
    object sender,
    X509Certificate cert,
    X509Chain chain,
    SslPolicyErrors sslPolicyErrors)
{
    if (sslPolicyErrors == SslPolicyErrors.None)
    {
        return true;   //Is valid
    }

    if (cert.GetCertHashString() == "99E92D8447AEF30483B1D7527812C9B7B3A915A7")
    {
        return true;
    }

    return false;
};

হালনাগাদ:

কীভাবে cert.GetCertHashString()Chrome এ মান পাবেন :

ঠিকানা বারে Secureবা ক্লিক করুন Not Securein

এখানে চিত্র বর্ণনা লিখুন

এখানে চিত্র বর্ণনা লিখুন

তারপরে শংসাপত্র -> বিশদ -> থাম্বপ্রিন্টে ক্লিক করুন এবং মানটি অনুলিপি করুন। মনে আছে cert.GetCertHashString().ToLower()

এখানে চিত্র বর্ণনা লিখুন


3
@ মিগুয়েলওলোসো সম্পূর্ণরূপে একমত। এটি সম্পূর্ণরূপে সুরক্ষার সাথে আপস না করে এক বা দুটি শংসাপত্রগুলি (আশাবাদী) চেকিং এড়িয়ে যেতে অনুমতি দেয়।
কেমুয়েল সানচেজ

আমি Hash Stringকীভাবে সার্টিফিকেট থেকে পেতে পারি ?
কুইকিনেট

@Kiquenet হয় কোড এবং চালানোর ডিবাগ cert.GetCertHashString()থেকে Immediate windowবা চেক Cert Thumbprintআপনার ব্রাউজারে বা MMCযদি এটি স্থানীয়ভাবে ইনস্টল করা হয়।
ওগ্লাস

সার্ভারটি আমাদের নিয়ন্ত্রণে আছে, এখনও কি ওডগ্লাসের উত্পাদনের কোড ব্যবহার করা নিরাপদ? টিএলএস / এসএসএল ব্যবহার করে, মধ্য-মধ্য-মাঝারিদের মতো বন্ধ করা যেতে পারে?
পিংপং

আপনাকে অনেক বড় সাহায্য ধন্যবাদ।
ওয়াওও ওট

30

উপেক্ষা করুন ব্যাড সার্টিফিকেট পদ্ধতি:

//I use a method to ignore bad certs caused by misc errors
IgnoreBadCertificates();

// after the Ignore call i can do what ever i want...
HttpWebRequest request_data = System.Net.WebRequest.Create(urlquerystring) as HttpWebRequest;

/*
and below the Methods we are using...
*/

/// <summary>
/// Together with the AcceptAllCertifications method right
/// below this causes to bypass errors caused by SLL-Errors.
/// </summary>
public static void IgnoreBadCertificates()
{
    System.Net.ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(AcceptAllCertifications);
}  

/// <summary>
/// In Short: the Method solves the Problem of broken Certificates.
/// Sometime when requesting Data and the sending Webserverconnection
/// is based on a SSL Connection, an Error is caused by Servers whoes
/// Certificate(s) have Errors. Like when the Cert is out of date
/// and much more... So at this point when calling the method,
/// this behaviour is prevented
/// </summary>
/// <param name="sender"></param>
/// <param name="certification"></param>
/// <param name="chain"></param>
/// <param name="sslPolicyErrors"></param>
/// <returns>true</returns>
private static bool AcceptAllCertifications(object sender, System.Security.Cryptography.X509Certificates.X509Certificate certification, System.Security.Cryptography.X509Certificates.X509Chain chain, System.Net.Security.SslPolicyErrors sslPolicyErrors)
{
    return true;
} 

2
আমার কোডটি দিয়ে কাজ করার জন্য আমাকে আরও একটি লাইন যুক্ত করতে হয়েছিল (আমি ওয়েবসকেট 4 নেট ব্যবহার করছি)। System.Net.ServicePointManager.CheckCerર્ટateRevocationList = মিথ্যা; সার্ভারের শংসাপত্রের বৈধতা কলব্যাক সেট করার ঠিক পরে।
কল্যাণস্বরূপ

24

এটি ব্যর্থ হওয়ার কারণটি এটি স্বাক্ষরিত নয় কারণ এটির শংসাপত্রটি আপনার ক্লায়েন্টের দ্বারা বিশ্বাসযোগ্য নয়। এসএসএল যাচাইকরণ বন্ধ করার পরিবর্তে, বিকল্প অ্যাপ্লিকেশন হ'ল আপনার অ্যাপ্লিকেশন ট্রাস্টের সিএ তালিকাতে রুট সিএ সার্টিটি যুক্ত করা হবে।

এটি বর্তমানে মূল অ্যাপ্লিকেশন যা আপনার অ্যাপ্লিকেশনটিতে বিশ্বাস করে না:

-----BEGIN CERTIFICATE-----
MIIFnDCCBISgAwIBAgIBZDANBgkqhkiG9w0BAQsFADBbMQswCQYDVQQGEwJDWjEs
MCoGA1UECgwjxIxlc2vDoSBwb8WhdGEsIHMucC4gW0nEjCA0NzExNDk4M10xHjAc
BgNVBAMTFVBvc3RTaWdudW0gUm9vdCBRQ0EgMjAeFw0xMDAxMTkwODA0MzFaFw0y
NTAxMTkwODA0MzFaMFsxCzAJBgNVBAYTAkNaMSwwKgYDVQQKDCPEjGVza8OhIHBv
xaF0YSwgcy5wLiBbScSMIDQ3MTE0OTgzXTEeMBwGA1UEAxMVUG9zdFNpZ251bSBS
b290IFFDQSAyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoFz8yBxf
2gf1uN0GGXknvGHwurpp4Lw3ZPWZB6nEBDGjSGIXK0Or6Xa3ZT+tVDTeUUjT133G
7Vs51D6z/ShWy+9T7a1f6XInakewyFj8PT0EdZ4tAybNYdEUO/dShg2WvUyfZfXH
0jmmZm6qUDy0VfKQfiyWchQRi/Ax6zXaU2+X3hXBfvRMr5l6zgxYVATEyxCfOLM9
a5U6lhpyCDf2Gg6dPc5Cy6QwYGGpYER1fzLGsN9stdutkwlP13DHU1Sp6W5ywtfL
owYaV1bqOOdARbAoJ7q8LO6EBjyIVr03mFusPaMCOzcEn3zL5XafknM36Vqtdmqz
iWR+3URAUgqE0wIDAQABo4ICaTCCAmUwgaUGA1UdHwSBnTCBmjAxoC+gLYYraHR0
cDovL3d3dy5wb3N0c2lnbnVtLmN6L2NybC9wc3Jvb3RxY2EyLmNybDAyoDCgLoYs
aHR0cDovL3d3dzIucG9zdHNpZ251bS5jei9jcmwvcHNyb290cWNhMi5jcmwwMaAv
oC2GK2h0dHA6Ly9wb3N0c2lnbnVtLnR0Yy5jei9jcmwvcHNyb290cWNhMi5jcmww
gfEGA1UdIASB6TCB5jCB4wYEVR0gADCB2jCB1wYIKwYBBQUHAgIwgcoagcdUZW50
byBrdmFsaWZpa292YW55IHN5c3RlbW92eSBjZXJ0aWZpa2F0IGJ5bCB2eWRhbiBw
b2RsZSB6YWtvbmEgMjI3LzIwMDBTYi4gYSBuYXZhem55Y2ggcHJlZHBpc3UvVGhp
cyBxdWFsaWZpZWQgc3lzdGVtIGNlcnRpZmljYXRlIHdhcyBpc3N1ZWQgYWNjb3Jk
aW5nIHRvIExhdyBObyAyMjcvMjAwMENvbGwuIGFuZCByZWxhdGVkIHJlZ3VsYXRp
b25zMBIGA1UdEwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQW
BBQVKYzFRWmruLPD6v5LuDHY3PDndjCBgwYDVR0jBHwweoAUFSmMxUVpq7izw+r+
S7gx2Nzw53ahX6RdMFsxCzAJBgNVBAYTAkNaMSwwKgYDVQQKDCPEjGVza8OhIHBv
xaF0YSwgcy5wLiBbScSMIDQ3MTE0OTgzXTEeMBwGA1UEAxMVUG9zdFNpZ251bSBS
b290IFFDQSAyggFkMA0GCSqGSIb3DQEBCwUAA4IBAQBeKtoLQKFqWJEgLNxPbQNN
5OTjbpOTEEkq2jFI0tUhtRx//6zwuqJCzfO/KqggUrHBca+GV/qXcNzNAlytyM71
fMv/VwgL9gBHTN/IFIw100JbciI23yFQTdF/UoEfK/m+IFfirxSRi8LRERdXHTEb
vwxMXIzZVXloWvX64UwWtf4Tvw5bAoPj0O1Z2ly4aMTAT2a+y+z184UhuZ/oGyMw
eIakmFM7M7RrNki507jiSLTzuaFMCpyWOX7ULIhzY6xKdm5iQLjTvExn2JTvVChF
Y+jUu/G0zAdLyeU4vaXdQm1A8AEiJPTd0Z9LAxL6Sq2iraLNN36+NyEK/ts3mPLL

-----END CERTIFICATE-----

আপনি এই শংসাপত্রটি ব্যবহার করে ডিকোড এবং দেখতে পারেন

এই শংসাপত্রের ডিকোডার বা অন্য কোনও শংসাপত্রের ডিকোডার


হ্যাঁ! এটি আমার ক্ষেত্রে, তবে আমি ভিএম না করে কীভাবে আজুরের শংসাপত্রটি যুক্ত করতে পারি? আমি কি কেবল এক্স509 স্টোর এপিআই ব্যবহার করতে পারি? আমি আগামীকাল চেষ্টা করতে যাচ্ছি তবে যে কোনও তথ্য এখানে স্বাগত
জোও আন্তোনেস

7

ক্লায়েন্ট কনফিগারেশনে এসএসএল শংসাপত্রের বৈধতা অক্ষম করতে।

<behaviors>
   <endpointBehaviors>
      <behavior name="DisableSSLCertificateValidation">
         <clientCredentials>
             <serviceCertificate>
                <sslCertificateAuthentication certificateValidationMode="None" />
              </serviceCertificate>
           </clientCredentials>
        </behavior>

এই ওয়েবকনফিগ ? এএসপি.নেট কোরের কোনও বিকল্প?
শিমি ওয়েইটস্যান্ডলার

5

এই কোডটি আমার পক্ষে কাজ করেছিল। আমাকে টিএলএস 2 যুক্ত করতে হয়েছিল কারণ এটিই আমি আগ্রহী ইউআরএলটি ব্যবহার করছিলাম।

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
ServicePointManager.ServerCertificateValidationCallback +=
    (sender, cert, chain, sslPolicyErrors) => { return true; };
using (var client = new HttpClient())
{
    client.BaseAddress = new Uri(UserDataUrl);
    client.DefaultRequestHeaders.Accept.Clear();
    client.DefaultRequestHeaders.Accept.Add(new
      MediaTypeWithQualityHeaderValue("application/json"));
    Task<string> response = client.GetStringAsync(UserDataUrl);
    response.Wait();

    if (response.Exception != null)
    {
         return null;
    }

    return JsonConvert.DeserializeObject<UserData>(response.Result);
}

3

বাইপাস এসএসএল শংসাপত্র ....

        HttpClientHandler clientHandler = new HttpClientHandler();
        clientHandler.ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) => { return true; };

        // Pass the handler to httpclient(from you are calling api)
        var client = new HttpClient(clientHandler)

2

আপনি যদি সরাসরি সকেট ব্যবহার করছেন এবং ক্লায়েন্ট হিসাবে প্রমাণীকরণ করছেন তবে পরিষেবা পয়েন্ট ম্যানেজার কলব্যাক পদ্ধতিটি কাজ করবে না। আমার জন্য কি কাজ করেছে তা এখানে। শুধুমাত্র পরীক্ষার উদ্দেশ্যগুলির জন্য দয়া করে ব্যবহার করুন

var activeStream = new SslStream(networkStream, false, (a, b, c, d) => { return true; });
await activeStream.AuthenticateAsClientAsync("computer.local");

এখানে কীটি হ'ল এসএসএল স্ট্রিমের নির্মাত্রে সরাসরি রিমোট শংসাপত্রের বৈধতা কলব্যাক সরবরাহ করা।


1

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

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

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

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


1

এটি নেট কোরের জন্য কাজ করে। আপনার সাবান ক্লায়েন্টকে কল করুন:

client.ClientCredentials.ServiceCertificate.SslCertificateAuthentication =
                new X509ServiceCertificateAuthentication()
                {
                    CertificateValidationMode = X509CertificateValidationMode.None,
                    RevocationMode = X509RevocationMode.NoCheck
                };  
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.