প্রশ্ন কিভাবে একটি ওয়েবসাইট থেকে এসএসএল সার্টিফিকেট ডাউনলোড করতে?


আমি এসএসএল সার্টিফিকেট ডাউনলোড করতে চাই, বলুন https://www.google.com, wget বা অন্য কোন কমান্ড ব্যবহার করে। কোন ইউনিক্স কমান্ড লাইন? wget বা openssl?


162
2018-05-07 21:01


উত্স




উত্তর:


শংসাপত্রটি ডাউনলোড করার জন্য, আপনাকে opensl এ নির্মিত ক্লায়েন্টটি ব্যবহার করতে হবে:

echo -n | openssl s_client -connect HOST:PORTNUMBER \
    | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /tmp/$SERVERNAME.cert

যে সার্টিফিকেট সংরক্ষণ করতে হবে /tmp/$SERVERNAME.cert

তুমি ব্যবহার করতে পার -showcerts যদি আপনি চেইন সব সার্টিফিকেট ডাউনলোড করতে চান। কিন্তু আপনি যদি কেবল সার্ভার শংসাপত্রটি ডাউনলোড করতে চান তবে নির্দিষ্ট করার প্রয়োজন নেই -showcerts

echo -n সার্ভারে একটি প্রতিক্রিয়া দেয়, যাতে সংযোগটি মুক্তি পায়

sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' সার্টিফিকেট চেন এবং সংযোগ বিবরণ সম্পর্কে তথ্য মুছে ফেলা। অন্যান্য keystores মধ্যে সার্টিফিকেট আমদানি পছন্দসই বিন্যাস।


219
2017-10-19 22:59



আপনি শুধুমাত্র একটি ভাল উত্তর দেওয়া না প্রশংসা, কিন্তু একটি সুনির্দিষ্ট ব্যাখ্যা। - marco.m
কি -showcerts সার্ভার / পাতা সার্টিফিকেট খুব প্রদর্শন? আমি যে সুইচ অন্তর্ভুক্ত ছিল যখন এটি শুধুমাত্র মধ্যবর্তী প্রদর্শিত। - Mike B
উত্তরে বললেন, s_client সর্বদা সার্ভার শংসাপত্র দেখায় (যদি সেখানে থাকে তবে সার্ভার হ্যালো প্রতিক্রিয়া জানায় এবং একটি বেনামী স্যুট পছন্দ করে না)। -showcerts শো সব Certs প্রাপ্ত, সার্ভার সার্টিফিকেট তারপর প্রথম মধ্যবর্তী এবং / অথবা রুট। - dave_thompson_085
এই যদিও একটি প্রক্সি presents কাজ করে না। - Frederick Nord
এটি সার্ভারগুলির সাথে কাজ করে না যা SNI ব্যবহার করে (একক আইপি-অ্যাড্রেসে একাধিক শংসাপত্র / ডোমেন)। সমস্যাগুলি এড়াতে, openssl এর সার্ভারনামের প্যারামিটার উল্লেখ করুন: openssl s_client -connect HOST: PORTNUMBER -servername CN - verhage


আমি উত্তর খুঁজে পেয়েছি। Openssl এটা উপলব্ধ করা হয়।

openssl s_client -connect $ {REMHOST}: $ {REMPORT}


54
2018-05-07 21:05



এছাড়াও openssl x509 -text <<EOF cert-text EOF সার্টিফিকেট বিস্তারিত দেখতে - mpapis
sudo rm -f cert.pem && sudo echo -n | openssl s_client -connect localhost:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ./cert.pem সৌজন্যে serverfault.com/questions/139728/... - pulkitsinghal
এই একই accomplishes এবং skips sed হ্যাক। - phs
এটি কেবল একটি শংসাপত্র পরীক্ষা করে, সেটি যদি সার্ভারের লোড সুষম গোষ্ঠীর অংশ হয়, যার প্রতিটির একটি পৃথক শংসাপত্র থাকে, সম্ভবত একটি ভিন্ন রুট CA দ্বারা স্বাক্ষরিত হয়? অথবা অন্য কথায়, একটি mitm আক্রমণটি এই অনুরোধটি বাস্তব সাইটে খালি যেতে পারে এবং তারপরে তার সার্ভারগুলিতে অন্য অনুরোধগুলি নির্দেশ করতে পারে। এই চেক করার কোন উপায় আছে? এবং একটি ডোমেইন সত্যিই আছে একটি সার্টিফিকেটের একটি তালিকা পেতে? - Jens Timmerman
@JensTimmerman "অথবা অন্য কথায়, একটি মাইটম আক্রমণটি এই অনুরোধটিকে প্রকৃত সাইটটিতে প্রবেশ করতে দেয় এবং তারপর তার সার্ভারগুলিতে অন্য অনুরোধগুলি নির্দেশ করতে পারে।" যেহেতু ম্যান-ইন-দ্য-মিডলটি লক্ষ্য সার্ভারের জন্য বৈধ শংসাপত্র না থাকা পর্যন্ত এটি সম্ভব নয় (অথবা ক্লায়েন্ট নিষ্ঠুরভাবে সার্ভার শংসাপত্রটি পরীক্ষা করে না)। স্পষ্টতই, সার্ভার কখনও কখনও একটি পৃথক শংসাপত্র প্রস্তাব করে তবে আপনি কেবল সম্ভবত সংযোগ প্রচেষ্টা পুনরাবৃত্তি করে তাদের সব পেতে সম্ভবত আশা করতে পারেন। - David Tonhofer


দ্য GNUTLS ক্লায়েন্ট টুল, gnutls-cli, এই সহজ করতে পারেন:

gnutls-cli --print-cert www.example.com \
        < /dev/null \
        > www.example.com.certs

প্রোগ্রামটি সাইটে একটি ইন্টারেক্টিভ ক্লায়েন্ট সরবরাহ করার জন্য ডিজাইন করা হয়েছে, তাই আপনাকে এটি খালি ইনপুট দিতে হবে (এই উদাহরণে, থেকে /dev/null) ইন্টারেক্টিভ অধিবেশন শেষ।


20
2017-10-07 06:19



এটি gntls কীভাবে HTTPS প্রক্সি (সিস্টেমটি কনফিগার করা) HTTPS প্রক্সি দিয়ে সংযোগ করবে এবং এটি এক্সচেঞ্জ করা শংসাপত্রটি প্রিন্ট করবে? - Frederick Nord


@bignose উত্তরের উপর ভিত্তি করে, এখানে একটি স্বনির্ধারিত সংস্করণ যা ভালভাবে ফিট করে। একটি শেফ রেসিপি:

sudo apt-get install gnutls-bin 
gnutls-cli --print-cert myserver.com </dev/null| sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > myserver.crt
sudo cp myserver.crt /usr/local/share/ca-certificates/myserver.crt
sudo update-ca-certificates

8
2018-05-27 09:31





true | openssl s_client -connect google.com:443 2>/dev/null | openssl x509

openssl এই মোড stdin আশা, তাই আমরা এটি মাধ্যমে প্রদান true |, এই সংযোগ বিন্যাসে নির্দিষ্ট সার্ভারে সংযোগ করে। 2>/dev/null silences ত্রুটি (ঐচ্ছিক), আমরা x509 প্যাসারার মধ্যে পুরো আউটপুট পাস, নির্দিষ্ট করতে পারেন /dev/stdin ইনপুট ফাইল হিসাবে শেল পাইপ ব্যবহার করতে। এবং যে শুধু আউটপুট হবে -----BEGIN CERTIFICATE----- থেকে -----END CERTIFICATE----- অংশ s_client আউটপুট। আপনি যোগ করে একটি ফাইল যে পুনঃনির্দেশিত করতে পারেন > google.com.pem কমান্ড শেষে।


যতটা ভাল আমি বলতে পারি, এটি শংসাপত্র শৃঙ্খলা যাচাই করে না, এটি কেবল আপনাকে বলতে পারে যে শেষ সার্ভারটি কোন ssl পরিচয় সরবরাহ করে।


6
2018-01-12 10:38



(1) এটি আসলে 6 বছর আগে উত্তরগুলি উন্নত করেনি (2) x509 তাই ডিফল্ট দ্বারা stdin পড়া -in /dev/stdin অকার্যকর (3) s_client সার্ভার সার্টিফিকেটটি স্থানীয় ট্রাস্ট অ্যাঙ্কর (রুট) থেকে সঠিকভাবে শৃঙ্খলা যাচাই করে এবং অপ্রত্যাশিত হয় তবে আপনি যে তথ্যটি দেখিয়েছেন তা দমন করেছেন (4) এটি প্রত্যাহারের জন্য পরীক্ষা করে না (5) এটি চেক করে নাম সার্ভার শংসাপত্রের মধ্যে শুধুমাত্র 1.0.2 এবং তারপরে ডিফল্টরূপে নয় (তবে আপনি পরে সার্টিফিকেটটি দেখতে নিজের সাথে এটি পরীক্ষা করতে পারবেন) - dave_thompson_085
@ dave_thompson_085, প্রশ্নটি কিভাবে সার্টিফিকেট ডাউনলোড করতে হয়, তবে চেইন তথ্য প্রদর্শন করবেন না। আমি opensl x509 অন্য উত্তর মধ্যে sed ​​চেয়ে অনেক ভাল পছন্দ। - Der_Meister


প্রাক এবং প্রক্রিয়া প্রতিস্থাপন ব্যবহার করে বিকল্প সিনট্যাক্স:

ex +'/BEGIN CERTIFICATE/,/END CERTIFICATE/p' <(echo | openssl s_client -showcerts -connect example.com:443) -scq > file.crt

0