কমান্ড লাইন থেকে সিআরএল ব্যবহার করে https সংযোগ


127

আমি কার্ল এবং কেসার্টস বিশ্বে নতুন এবং একটি সার্ভারের সাথে সংযোগ করার সময় একটি সমস্যার মুখোমুখি। মূলত, আমাকে একটি মেশিন থেকে অন্য মেশিনে https এর মাধ্যমে সংযোগ পরীক্ষা করতে হবে। আমার একটি ইউআরএল আছে যার সাথে আমার কাছে মেশিন এ (একটি লিনাক্স মেশিন) থেকে সংযোগ স্থাপন করতে হবে আমি কমান্ড প্রম্পটে এটি চেষ্টা করেছি

cmd> curl https://[my domain or IP address]

এবং নিম্নলিখিত পেয়েছেন:

curl: (60) SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

ইন্টারনেটে কয়েকটি নিবন্ধের মাধ্যমে আমি এটি করেছি:

openssl s_client -connect <domain name or Ip address>:443

এবং সার্ভার শংসাপত্র সহ কিছু প্রতিক্রিয়া পেয়েছে (ভিতরে -----BEGIN CERTIFICATE----- and -----END CERTIFICATE-----)।

এখান থেকে আমার আর কী করা উচিত। আমি মনে করি, আমাকে কেবল টেক্সটটি ভিতরে paste BEGIN CERTIFICATE & END CERTIFICATEোকাতে হবে এবং এটি একটি ফাইলে সংরক্ষণ করতে হবে। তবে এটি কোন ধরণের ফাইল হওয়া উচিত? .pem, .crt? .. তার পরে আমার কী করা উচিত?

আমি এটি চেষ্টা করেছিলাম - পাঠ্যটি অভ্যন্তরে অনুলিপি করে BEGIN CERTIFICATE & END CERTIFICATEএকটি .crtফাইলে সংরক্ষণ করেছি - এটির নামকরণও করেছেন my-ca.crt( এটি ফাইল হিসাবে নাম রেখে একই জিনিসটি চেষ্টা করেও my-ca.pem) এবং তারপর এটি করেছেন:

cmd>curl --cacert my-ca.crt https://[my domain or IP address]

কিন্তু একই ত্রুটি পেয়েছি।


আপনি যে সমাধানটির পরামর্শ দিচ্ছেন সে সম্পর্কে নিশ্চিত নন, তবে আমি কেবল একই রকম তথ্য খুঁজছিলাম
ব্লগ

1
আপনি --insecureএসএসএল ত্রুটি উপেক্ষা করতে যোগ করতে পারেন।
আলেকজ মাগুরা

কার্লের নতুন সংস্করণগুলি (যেমন 7..64) আরসি ৪-এসএএ-র মতো পুরানো সিফারগুলিকে চিনতে পারে না - কার্ল ( .4.66
প্রশ্নগুলি

উত্তর:


142

আমার একই সমস্যা ছিল - আমি আমার নিজের সাইট থেকে একটি পৃষ্ঠা আনছিলাম, যা এইচটিটিপিএস-এর মাধ্যমে পরিবেশন করা হয়েছিল, তবে কার্ল একই "এসএসএল শংসাপত্রের সমস্যা" বার্তা দিচ্ছিল। -kনিরাপত্তাহীন সংযোগের অনুমতি দেওয়ার জন্য আমি কলটিতে একটি পতাকা যুক্ত করে এর চারপাশে কাজ করেছি ।

curl -k https://whatever.com/script.php

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


5
-কে পতাকা একটি দুর্দান্ত শর্টকাট। আমার জন্য কাজ!
পরিসংখ্যান

45

সহজ সমাধান

এটি আমার প্রতিদিনের লিপি:

curl --insecure -v https://www.google.com 2>&1 | awk 'BEGIN { cert=0 } /^\* Server certificate:/ { cert=1 } /^\*/ { if (cert) print }'

আউটপুট:

* Server certificate:
*    subject: C=US; ST=California; L=Mountain View; O=Google Inc; CN=www.google.com
*    start date: 2016-01-07 11:34:33 GMT
*    expire date: 2016-04-06 00:00:00 GMT
*    issuer: C=US; O=Google Inc; CN=Google Internet Authority G2
*    SSL certificate verify ok.
* Server GFE/2.0 is not blacklisted
* Connection #0 to host www.google.com left intact

11
সুতরাং, আপনি --insecureপ্রতিদিন টিএসএল এর মাধ্যমে কোনও সংযোগের অনুমতি দিচ্ছেন ...
ব্রেথলজ

2
আপনার মন্তব্যের জন্য ধন্যবাদ। তবে, বিষয়টি এমন নয়। বিষয়টি হ'ল সমস্ত প্রকারের শংসাপত্রের থেকে এসএসএল তথ্য পাওয়া।
আন্তোনিও ফিটোসা

30

আপনাকে কার্ল করতে পুরো শংসাপত্র শৃঙ্খলা সরবরাহ করতে হবে, যেহেতু কার্ল আর কোনও সিএ শংসাপত্রের সাথে জাহাজ করে না। যেহেতু ক্যাসর্ট বিকল্পটি কেবল একটি ফাইল ব্যবহার করতে পারে তাই আপনার সম্পূর্ণ চেইনের তথ্যটি 1 টি ফাইলের সাথে সংযুক্ত করতে হবে

শংসাপত্র শৃঙ্খলা (আপনার ব্রাউজার থেকে, উদাহরণস্বরূপ) DER এনকোডেড বাইনারি x.509 (.cer) এ অনুলিপি করুন। প্রতিটি সার্টের জন্য এটি করুন।

শংসাপত্রগুলিকে PEM এ রূপান্তর করুন এবং সেগুলিকে 1 টি ফাইলে রূপান্তর করুন।

openssl x509 -inform DES -in file1.cer -out file1.pem -text
openssl x509 -inform DES -in file2.cer -out file2.pem -text
openssl x509 -inform DES -in file3.cer -out file3.pem -text

cat *.pem > certRepo

curl --cacert certRepo -u user:passwd -X GET -H 'Content-Type: application/json' "https//somesecureserver.com/rest/field"

এটি এখানে কীভাবে করা যায় সে সম্পর্কে আমি একটি ব্লগ লিখেছিলাম: http://javamemento.blogspot.no/2015/10/using-curl-with-ssl-cert-chain.html


1
আপনি দয়া করে ব্যবহারকারী নাম এবং পাসওয়ার্ড পাস করার উদ্দেশ্য ব্যাখ্যা করতে পারেন? আমি যদি জাভা ক্লায়েন্ট লিখছি, তখন কি আমার জিইটি অনুরোধের শিরোনামে ইউজারনেম এবং পাসওয়ার্ডটি পাস করার দরকার আছে?
শুভ 224

@ শুভ ২৪৪ নয় যদি আপনার https সার্ভারের GET অনুরোধগুলির জন্য সাধারণ প্রমাণীকরণের প্রয়োজন না হয়। আমাকে একটি প্রমাণীকরণ ব্যবহার করতে হয়েছিল কারণ এটি একটি রেস্ট কল ছিল যা এটির প্রয়োজন ছিল।
সোমাইয়া কুম্বেরার

এই উত্তরে উল্লিখিত হিসাবে "আপনার কার্লের জন্য পুরো শংসাপত্র শৃঙ্খলা সরবরাহ করা দরকার, যেহেতু কার্ল আর কোনও সিএ শংসাপত্রের সাথে জাহাজ না করে।"
মোহাম্মদ বানানা

16

--cacertএকটি .crtফাইল নির্দিষ্ট করতে ব্যবহার করুন। ca-root-nss.crtউদাহরণ স্বরূপ.


6

আমার আসলে এই ধরণের সমস্যা ছিল এবং আমি এই পদক্ষেপগুলি দিয়ে এটি সমাধান করি:

  1. এখান থেকে মূল সিএ শংসাপত্রগুলির বান্ডিলটি পান: https://curl.haxx.se/ca/cacert.pem এবং এটিকে স্থানীয় সংরক্ষণ করুন

  2. php.iniফাইলটি সন্ধান করুন

  3. curl.cainfoশংসাপত্রগুলির পথ হতে সেট করুন । সুতরাং এটি কিছু হবে:

curl.cainfo = /path/of/the/keys/cacert.pem


4

এখানে আপনি মোজিলা সিএ শংসাপত্রগুলি ডাউনলোড এবং রূপান্তর করতে নির্দেশাবলী সহ সিএ শংসাপত্রগুলি সন্ধান করতে পারেন । আপনি একবার পেলে ca-bundle.crtবা cacert.pemআপনি কেবল ব্যবহার করুন:

curl.exe --cacert cacert.pem https://www.google.com

অথবা

curl.exe --cacert ca-bundle.crt https://www.google.com

1

সমস্যাটি মর্যাদাবোধ করে আমি বিদ্যমান সিস্টেম ডিফল্ট সিএ ফাইলটি ডিবিয়ান 6 এ ব্যবহার করতে সক্ষম হয়েছি এটি হ'ল:

/etc/ssl/certs/ca-certificates.crt

মূল হিসাবে এটি করা যেতে পারে:

echo curl.cainfo=/etc/ssl/certs/ca-certificates.crt >> /etc/php5/mods-available/curl.ini

তারপরে ওয়েব-সার্ভারটি পুনরায় শুরু করুন।



0

আমার জন্য, আমি কেবল একটি ওয়েবসাইট পরীক্ষা করতে চেয়েছিলাম যেখানে একটি স্বয়ংক্রিয় http-> https পুনর্নির্দেশ ছিল। আমি মনে করি আমার ইতিমধ্যে কিছু শংসাপত্র ইনস্টল করা আছে, তাই এটি উবুন্টু 16.04 দৌড়ে আমার একার পক্ষে কাজ করেcurl 7.47.0 (x86_64-pc-linux-gnu) libcurl/7.47.0 GnuTLS/3.4.10 zlib/1.2.8 libidn/1.32 librtmp/2.3

curl --proto-default https <target>


-2

কার্লের আধুনিক সংস্করণগুলির সাহায্যে আপনি --resolve বা --connect-to (ভার্সন .4.৪৯ এর চেয়ে নতুন কার্ল) ব্যবহার করে কোন আইপি-ঠিকানাটি সংযুক্ত করতে হবে তা ওভাররাইড করতে পারেন। এটি এসএসএল / এসএনআইয়ের সাথেও কাজ করে। সমস্ত বিবরণ ম্যান পৃষ্ঠায় হয়।

উদাহরণস্বরূপ, ডিএনএসকে ওভাররাইড করতে এবং একটি নির্দিষ্ট আইপি ঠিকানা ব্যবহার করে এসএসএল দিয়ে www.example.com এর সাথে সংযোগ স্থাপন করতে: (এটি আইপিভি 6 ওভাররাইড করবে)

curl --resolve www.example.com:443:192.168.42.2 https://www.example.com/

অন্য উদাহরণ, 8080 পোর্টে ব্যাকএন্ড 1 নামের একটি নির্দিষ্ট ব্যাকেন্ড সার্ভারের সাথে সংযোগ স্থাপন করতে

curl --connect-to www.example.com:80:backend1.example.com:8080 http://www.example.com/

হোস্ট শিরোনামটি যুক্ত করতে ভুলবেন না যদি সার্ভারের এটির সঠিক উত্তর দেওয়ার প্রয়োজন হয়:

-H 'Host:www.example.com' 

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