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


182

আমি উইজেট বা অন্য কোনও কমান্ড ব্যবহার করে https://www.google.com থেকে এসএসএল শংসাপত্রটি ডাউনলোড করতে চাই । কোন ইউনিক্স কমান্ড লাইন? বাজেট বা ওপেনসেল?

উত্তর:


246

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

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'শংসাপত্র চেইন এবং সংযোগের বিশদ সম্পর্কিত তথ্য সরিয়ে দেয়। অন্যান্য কীস্টোরগুলিতে শংসাপত্রটি আমদানির জন্য এটি পছন্দসই বিন্যাস।


9
প্রশংসা করুন যে আপনি কেবল একটি ভাল উত্তরই দিয়েছেন না, তবে একটি সুনির্দিষ্ট ব্যাখ্যাও দিয়েছেন।
marco.m

-showcertsসার্ভার / পাতার শংসাপত্রও কি দেখায়? আমি ভেবেছিলাম যখন এটি স্যুইচটি অন্তর্ভুক্ত করা হয়েছিল তখনই এটি কেবল মধ্যস্থতাকে প্রদর্শন করবে।
মাইক বি

যেমন উত্তরটি বলেছে, s_clientসর্বদা সার্ভার শংসাপত্র দেখায় (যদি সেখানে থাকে, তবে সার্ভার হ্যালোকে প্রতিক্রিয়া জানায় এবং একটি বেনামী স্যুট পছন্দ করে না)। প্রাপ্ত সমস্ত শংসাপত্র, সার্ভার শংসাপত্র প্রথমে মধ্যস্থতা এবং / অথবা মূল -showcertsদেখায় ।
dave_thompson_085

4
যদিও এটি প্রক্সি প্রিজেসনে কাজ করে না।
ফ্রেডরিক নর্ড

2
এটি এসএনআই (একক আইপি-অ্যাড্রেসে একাধিক শংসাপত্র / ডোমেন) ব্যবহার করে এমন সার্ভারগুলির সাথেও কাজ করে না। সমস্যা এড়াতে ওপেনসেলের সার্ভারনেম প্যারামিটারটি নির্দিষ্ট করুন: ওপেনসেল এস_ক্লিয়েন্ট-সংযোগ HOST: পোর্টটি-সারভিনিম সিএন
ভার্জ

60

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

ওপেনএসএল এস_ক্লিয়েন্ট-সংযোগ $ EM রেমোস্ট}: $ EM স্মরণিকা}


2
এছাড়াও openssl x509 -text <<EOF cert-text EOFশংসাপত্রের বিশদ দেখতে
mpapis

2
sudo rm -f cert.pem && sudo echo -n | openssl s_client -connect localhost:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ./cert.pemসার্ভারফলট.কোশনস
139728

এই একই accomplishes এবং অগ্রাহ্য sedহ্যাক।
পিএইচএস

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

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

22

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

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

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


1
কীভাবে এটি গনটসকে (সিস্টেমের প্রশস্ত কনফিগার করা) https প্রক্সি দিয়ে সংযোগ স্থাপন করবে এবং এটি খোলার শংসাপত্রটি মুদ্রণ করবে?
ফ্রেডরিক নর্ড

9

@ বিগনোজ উত্তরের উপর ভিত্তি করে, এখানে একটি স্ব-অন্তর্ভুক্ত সংস্করণ রয়েছে যা ভালভাবে ফিট করে যেমন একটি শেফ রেসিপি:

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

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

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


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


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

@ dave_thompson_085, প্রশ্ন হল শংসাপত্র কীভাবে ডাউনলোড করবেন তবে চেইনের তথ্য প্রদর্শন করবেন না। আমি ওপেনএসএল x509 পছন্দ করি অন্য উত্তরে সেডের চেয়ে অনেক বেশি ভাল।
ডের_মিস্টার

0

প্রাক্তন এবং প্রক্রিয়া বিকল্প ব্যবহার করে বিকল্প বাক্য গঠন:

ex +'/BEGIN CERTIFICATE/,/END CERTIFICATE/p' <(echo | openssl s_client -showcerts -connect example.com:443) -scq > file.crt
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.