কার্ল: স্থির সিআরএল (51) এসএসএল ত্রুটি: কোনও বিকল্প শংসাপত্রের নামের সাথে মেলে না


88

আমি উইন্ডোজ +। নেট ডোমেন থেকে এসে সিআরএল বিশ্বে নতুন।

Http://www.evercam.io/docs/api/v1/authentication এ বেসিক প্রমাণীকরণের জন্য রেস্ট এপিআই অ্যাক্সেস করার চেষ্টা করা হচ্ছে ।

curl -X GET https://api.evercam.io/v1/... \
-u {username}

সিআরএল সফলভাবে সেটআপ করার পরে উইন্ডোজ কমান্ড প্রম্পটে কীভাবে এই কমান্ডটি ব্যবহার করবেন তা জানেন না। নিম্নলিখিত হিসাবে সিআরএল পরীক্ষিত:

C:\>curl --version
curl 7.33.0 (x86_64-pc-win32) libcurl/7.33.0 OpenSSL/0.9.8y zlib/1.2.8 libssh2/1.4.3
Protocols: dict file ftp ftps gopher http https imap imaps pop3 pop3s rtsp scp s
ftp smtp smtps telnet tftp
Features: AsynchDNS GSS-Negotiate Largefile NTLM SSL SSPI libz

এখন আমি এই সঙ্গে শেষ করছি

C:\>curl -u myuser:mypassword -X GET https://api.evercam.io/v1/
curl: (51) SSL: no alternative certificate subject name matches target host name 'api.evercam.io'

আমি কীভাবে এই এসএসএল 51 টির ত্রুটিটি ঠিক করতে পারি?

উত্তর:


113

এটি সাধারণত ঘটে যখন শংসাপত্রটি হোস্টের নামের সাথে মেলে না।

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

আরও এখানে পাওয়া যাবে: http://curl.haxx.se/docs/sslcerts.html


10
চেক বন্ধ করতে বলার উত্তরগুলি, এর পরিণতিগুলি কী তা হাইলাইট করা উচিত। এটা বিপজ্জনক!
DrP3pp3r

4
যে বিষয়টি আমি অনুভব করেছি সেটি সার্টিফিকেটের বিষয়বস্তুর নাম *.my-domain.comযা প্রযোজ্য নয় dev.subdomain.my-domain.com। কিন্তু জন্য কাজ করে dev-subdomain.my-domain.com। তাই একাধিক সাব-ডোমেন কাজ করার জন্য আপনার এই নিবন্ধটি যা বলেছে তা প্রয়োজন - sslshopper.com/…
دعاগাপড

77

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


আমি জানি এটি একটি (খুব) পুরানো প্রশ্ন এবং এটি কমান্ড লাইন সম্পর্কে, তবে যখন আমি "এসএসএল: কোনও বিকল্প শংসাপত্রের বিষয়ের সাথে লক্ষ্য হোস্টের নাম মেলে না" এর জন্য গুগল অনুসন্ধান করেছি, এটিই প্রথম হিট hit

উত্তরটি বের করতে আমার বেশ ভাল লাগল তাই আশা করি এটি কারও অনেক সময় সাশ্রয় করে! পিএইচপি-তে এটি আপনার সিআরএল সেটআপগুলিতে যুক্ত করুন:

curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);

PS: এটি একটি অস্থায়ী সমাধান হওয়া উচিত। যেহেতু এটি একটি শংসাপত্রের ত্রুটি, তাই সার্টিফিকেটটি অবশ্যই অবশ্যই স্থির করা ভাল!


30
ঠিক আছে, পিএইচপি-তে আমার যে সমস্যাটি ছিল তার জন্য এটি আমার গুগল অনুসন্ধানে এসেছে, সুতরাং এটি আমার জন্য সহায়ক was
গুজামিন

4
আমি একই অনুসন্ধান করেছি এবং আপনার উত্তর এখানে পেয়ে আমি আনন্দিত। ধন্যবাদ!
CptMisery

4
CURLOPT_SSL_VERIFYHOSTআমার ক্ষেত্রে যথেষ্ট ছিল
1234ru

ধন্যবাদ যদি আপনার শংসাপত্রগুলি এখনও অবধি না থাকে তবে পরীক্ষার উদ্দেশ্যে দরকারী।
অ্যান্ড্রু

20

Certicate সাধারণ নামের জন্য api.evercam.ioজন্য *.herokuapp.comএবং সেখানে শংসাপত্রে কোন বিকল্প বিষয় নাম। এর অর্থ, এর জন্য শংসাপত্রটি api.evercam.ioহোস্টনামের সাথে মেলে না এবং তাই শংসাপত্র যাচাইকরণ ব্যর্থ হয়। সত্য হিসাবে একই www.evercam.io, উদাহরণস্বরূপ https://www.evercam.io একটি ব্রাউজার দিয়ে চেষ্টা করুন এবং আপনি ত্রুটি বার্তাটি পান, শংসাপত্রের নামটি হোস্টের নামের সাথে মেলে না।

সুতরাং এটি এমন একটি সমস্যা যা চিরস্থায়ী.ওটি দ্বারা ঠিক করা দরকার। আপনি যদি সুরক্ষা, মনুষ্য-মধ্যবর্তী আক্রমণ ইত্যাদির বিষয়ে চিন্তা না করেন curl --insecureতবে আপনি শংসাপত্রের যাচাইকরণ অক্ষম করতে পারেন ( ) তবে তারপরে আপনার নিজের জিজ্ঞাসা করা উচিত কেন আপনি কোনও পোস্টের পরিবর্তে https ব্যবহার করেন।


4

এটি কারওর জন্য কিছু সময় সাশ্রয় করতে পারে।

যদি আপনি গুজলএইচটিপি ব্যবহার করেন এবং আপনি এই ত্রুটি বার্তার সাথে মুখোমুখি হন সিআরএল ত্রুটি :০: এসএসএল: কোনও বিকল্প শংসাপত্রের নাম লক্ষ্য হোস্টের নামের সাথে মেলে না এবং আপনি 'অনিরাপদ' সমাধান (উত্পাদনের প্রস্তাবিত নয়) দিয়ে ভাল আছেন তবে আপনাকে \GuzzleHttp\RequestOptions::VERIFY => falseক্লায়েন্টে যুক্ত করতে হবে কনফিগারেশন:

$this->client = new \GuzzleHttp\Client([
    'base_uri'                          => 'someAccessPoint',
    \GuzzleHttp\RequestOptions::HEADERS => [
        'User-Agent' => 'some-special-agent',
    ],
    'defaults'                          => [
        \GuzzleHttp\RequestOptions::CONNECT_TIMEOUT => 5,
        \GuzzleHttp\RequestOptions::ALLOW_REDIRECTS => true,
    ],
    \GuzzleHttp\RequestOptions::VERIFY  => false,
]);

যা CURLOPT_SSL_VERIFYHOST0 তে নির্ধারণ করে এবং পদ্ধতিতে CURLOPT_SSL_VERIFYPEERমিথ্যাCurlFactory::applyHandlerOptions()

$conf[CURLOPT_SSL_VERIFYHOST] = 0;
$conf[CURLOPT_SSL_VERIFYPEER] = false;

থেকে GuzzleHttp ডকুমেন্টেশন

যাচাই করুন

একটি অনুরোধের SSL শংসাপত্র যাচাই আচরণ বর্ণনা করে।

  • এসএসএল শংসাপত্র যাচাইকরণ সক্ষম করতে সত্যতে সেট করুন এবং অপারেটিং সিস্টেমের দ্বারা সরবরাহিত ডিফল্ট সিএ বান্ডিল ব্যবহার করুন।
  • শংসাপত্র যাচাইকরণ অক্ষম করতে মিথ্যাতে সেট করুন (এটি নিরাপত্তাহীন!)।
  • কাস্টম শংসাপত্র ব্যবহার করে যাচাইকরণ সক্ষম করতে একটি CA বান্ডেলে পথ সরবরাহ করতে একটি স্ট্রিংয়ে সেট করুন।

0

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

শংসাপত্রটিতে সান অন্তর্ভুক্ত করা উচিত, এবং কেবল সান ব্যবহৃত হবে। কিছু ব্রাউজার অবহেলিত সাধারণ নামটিকে উপেক্ষা করে।

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


0

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

আমার example.app ডোমেন কনফিগার

    server {
    listen 7000 default_server;
    listen [::]:7000 default_server;

     listen 443 ssl default_server;
     listen [::]:443 ssl default_server;

    root /srv/nodejs/echantillonnage1;

    # Add index.php to the list if you are using PHP
    index index.html index.htm index.nginx-debian.html;

    server_name echantillonnage.app;
    ssl_certificate /srv/nodejs/certificatSsl/widcardcertificate/echantillonnage.app.chained.crt;
    ssl_certificate_key /srv/nodejs/certificatSsl/widcardcertificate/echantillonnage.app.key;

    location / {
            # First attempt to serve request as file, then
            # as directory, then fall back to displaying a 404.
            proxy_pass http://127.0.0.1:8090;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
    #try_files $uri $uri/ =404;
    }
 }

আমার dev.example.app

   server {
    listen 7000 default_server;
    listen [::]:7000 default_server;

     listen 444 ssl default_server;
     listen [::]:444 ssl default_server;

    root /srv/nodejs/echantillonnage1;

    # Add index.php to the list if you are using PHP
    index index.html index.htm index.nginx-debian.html;

    server_name dev.echantillonnage.app;
    ssl_certificate /srv/nodejs/certificatSsl/dev/dev.echantillonnage.app.chained.crt;
    ssl_certificate_key /srv/nodejs/certificatSsl/dev/dev.echantillonnage.app.key;

    location / {
            # First attempt to serve request as file, then
            # as directory, then fall back to displaying a 404.
            proxy_pass http://127.0.0.1:8091;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
    #try_files $uri $uri/ =404;
    }
 }

আমি যখন https://dev.echantillonnage.app চালু করছিলাম তখন আমি পাচ্ছিলাম

    Fix CURL (51) SSL error: no alternative certificate subject name matches

আমার ভুলটি ছিল দুটি লাইন বেলো

    listen 444 ssl default_server;
     listen [::]:444 ssl default_server;

আমাকে এটিতে পরিবর্তন করতে হয়েছিল:

     listen 443 ssl;
     listen [::]:443 ssl;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.