লিনাক্সের শংসাপত্র শৃঙ্খল থেকে কীভাবে রুট সিএ এবং অধস্তন সিএ বের করতে হয়?


25

আমার একটি অন্তিম সত্তা / সার্ভার শংসাপত্র রয়েছে যার মধ্যে একটি অন্তর্বর্তী এবং মূল শংসাপত্র রয়েছে। আমি যখন catশেষ সত্তার শংসাপত্রে থাকি তখন আমি কেবল একটি একক BEGINএবং ENDট্যাগ দেখতে পাই । এটি একমাত্র শেষ সত্তার শংসাপত্র।

আমি মধ্যবর্তী এবং রুট শংসাপত্র সামগ্রী দেখতে পাবার কোন উপায় আছে কি? আমার কেবল ট্যাগ BEGINএবং ENDলিখিত সামগ্রী দরকার ।

উইন্ডোজে আমি "শংসাপত্রের পাথ" থেকে সম্পূর্ণ শংসাপত্রের চেইন দেখতে পাই। নীচে স্ট্যাক এক্সচেঞ্জের শংসাপত্রের উদাহরণ রয়েছে।

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

সেখান থেকে আমি একটি ভিউ শংসাপত্র সম্পাদন করতে এবং সেগুলি রফতানি করতে পারি। আমি উইন্ডোজের মূল এবং মধ্যবর্তী উভয়ের জন্যই এটি করতে পারি। আমি লিনাক্স এ একই পদ্ধতি খুঁজছি।

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


কারা আপনাকে সেই সার্টিফিকেট দিয়েছে তা দয়া করে আমাদের বলুন।
রুই এফ রিবেইরো

@ রুইএফরিবিড়ো যেকোনও বলুক ... আমি কেবল প্রাথমিক সার্টিফিকেট হাতে রেখে স্ট্যাকেক্সচেঞ্জের শংসাপত্র দেখতে চাই।
অনির্বাণ নাগ 'tintinmj'

উত্তর:


25

একটি ওয়েব সাইট থেকে, আপনি এটি করতে পারেন:

openssl s_client -showcerts -verify 5 -connect stackexchange.com:443 < /dev/null

এটি শংসাপত্র শৃঙ্খলা এবং সার্ভার উপস্থাপিত সমস্ত শংসাপত্র প্রদর্শন করবে।

এখন, আমি যদি ফাইলগুলিতে এই দুটি শংসাপত্র সংরক্ষণ করি তবে আমি এটি ব্যবহার করতে পারি openssl verify:

$ openssl verify -show_chain -untrusted dc-sha2.crt se.crt 
se.crt: OK
Chain:
depth=0: C = US, ST = NY, L = New York, O = "Stack Exchange, Inc.", CN = *.stackexchange.com (untrusted)
depth=1: C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert SHA2 High Assurance Server CA (untrusted)
depth=2: C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert High Assurance EV Root CA

-untrustedবিকল্প অন্তর্বর্তী শংসাপত্র (গুলি) দিতে ব্যবহার করা হয়; se.crtযাচাই করার শংসাপত্র। গভীরতা = 2 ফলাফলটি সিস্টেম বিশ্বাসযোগ্য সিএ স্টোর থেকে এসেছে।

যদি আপনার মধ্যে অন্তর্বর্তী শংসাপত্র না থাকে তবে আপনি যাচাই করতে পারবেন না। এটি ঠিক কিভাবে X.509 কাজ করে।

শংসাপত্রের উপর নির্ভর করে এর মধ্যবর্তী হতে কোনও ইউআরআই থাকতে পারে। উদাহরণ হিসাবে, openssl x509 -in se.crt -noout -textরয়েছে:

        Authority Information Access: 
            OCSP - URI:http://ocsp.digicert.com
            CA Issuers - URI:http://cacerts.digicert.com/DigiCertSHA2HighAssuranceServerCA.crt

সেই "সিএ ইস্যুয়ার্স" ইউআরআই মধ্যবর্তী সার্টের দিকে নির্দেশ করে (ডিইআর ফর্ম্যাটে, সুতরাং আপনাকে openssl x509 -inform der -in DigiCertSHA2HighAssuranceServerCA.crt -out DigiCertSHA2HighAssuranceServerCA.pemওপেনএসএসএল দ্বারা আরও ব্যবহারের জন্য রূপান্তর করতে ব্যবহার করতে হবে)।

আপনি যদি চালান তবে openssl x509 -in /tmp/DigiCertSHA2HighAssuranceServerCA.pem -noout -issuer_hashতা পাবেন 244b5494যা আপনি সিস্টেমের মূল সিএ /etc/ssl/certs/244b5494.0স্টোরটিতে সন্ধান করতে পারেন (কেবলমাত্র .0নামের সাথে সংযুক্ত করুন)।

আমি মনে করি না যে আপনার পক্ষে এটি করার জন্য একটি দুর্দান্ত, সহজ ওপেনএসএসএল কমান্ড আছে।


এটাই মূল সমস্যা। আমার সাথে ইউআরএল নেই। আমার কাছে কেবল শংসাপত্রের ফাইল রয়েছে। BEGINএবং ENDট্যাগ এবং ট্যাগের মধ্যে আমার এনক্রিপ্ট হওয়া সামগ্রী দরকার (যা আপনি কেবলমাত্র cat.crt ফাইল আইংয়ের পরে পেয়ে যাবেন An
অনির্বাণ নাগ 'tintinmj'

@ অনির্বাণনাগিন্টিনটমজ 'আপনি যদি শংসাপত্রটি ডিকোড করতে openssl x509 -in file.crt -noout -text
চাইছেন তবে

আমি রুট সার্টে ইন্টারমিডিয়েটের সামগ্রী চাই যা যা ট্যাগ BEGINএবং ENDট্যাগের মধ্যে থাকে।
অনির্বাণ নাগ 'tintinmj'

বা যদি আপনি এমন একটি কমান্ড দিতে পারেন যা প্রাথমিক সার্ট থেকে মধ্যবর্তী এবং মূল শংসাপত্রটি বের করে এবং এটি একটি ফাইলের মধ্যে সংরক্ষণ করবে ... আমি এটির সাথেও বেঁচে থাকতে পারি।
অনির্বাণ নাগ 'tintinmj'

@ অনির্বাণনাগিন্টিনটমজ 'যদি এটি openssl x509কমান্ডটি না দেখায় তবে আমি মনে করি না যে মধ্যবর্তী শংসাপত্রটি আছে। (যদি না আপনি কিছু ত্রুটি পান openssl x509)।
ডারোবার্ট

12

tl; dr - সমস্ত শংসাপত্র শৃঙ্খলে ফেলে দেওয়ার জন্য একটি লাইনার বাশ যাদু

openssl s_client -showcerts -verify 5 -connect de.wikipedia.org:443 < /dev/null | awk '/BEGIN/,/END/{ if(/BEGIN/){a++}; out="cert"a".crt"; print >out}' && for cert in *.crt; do newname=$(openssl x509 -noout -subject -in $cert | sed -n 's/^.*CN=\(.*\)$/\1/; s/[ ,.*]/_/g; s/__/_/g; s/^_//g;p').pem; mv $cert $newname; done

2 পদক্ষেপে ব্যাখ্যা

চেইনে সমস্ত শংসাপত্রকে বর্তমান দিরের মতো নিক্ষেপ করতে cert${chain_number}.pem:

openssl s_client -showcerts -verify 5 -connect your_host:443 < /dev/null | awk '/BEGIN/,/END/{ if(/BEGIN/){a++}; out="cert"a".pem"; print >out}' 

তাদের সাধারণ নামটির জন্য পুনরায় নামকরণের জন্য বোনাস ট্র্যাক:

for cert in *.pem; do newname=$(openssl x509 -noout -subject -in $cert | sed -n 's/^.*CN=\(.*\)$/\1/; s/[ ,.*]/_/g; s/__/_/g; s/^_//g;p').pem; mv $cert $newname; done

আপনি কেবলমাত্র নাম পরিবর্তন করছেন, বিন্যাস পরিবর্তন না করেই ".পিএম" বনাম ".সিআরটি" এক্সটেনশন হিসাবে বেছে নেওয়ার কোনও কারণ আছে কি?
ক্যাপ্টেন ম্যান

না সত্যিই না. ".pem" হ'ল বিন্যাস (DER এর বেস 64) ".crt" এর অর্থ এটি একটি শংসাপত্র তবে এনকোডিং সম্পর্কে কিছুই বলে না। আমি এটিকে আরও সামঞ্জস্যপূর্ণ করতে এবং সমস্ত পেমের নামকরণ করতে চলেছি ... তবে শংসাপত্রটি কোথায় ডাউনলোড হচ্ছে (crt) তা বুঝতে এবং লিনাক্স বিশ্বে আমি সাধারণত যা ব্যবহার করি তা শেষ করার জন্য আমি এক লাইনের মধ্যে পড়া সহজ বলে মনে করি (পেম) । আশা করি এটি কিছুটা স্পষ্ট করে দিয়েছে ...
এস্তানি

1
হ্যাঁ এটি করে, আমি বুঝতে পারি পিইএম একটি ফর্ম্যাট তবে আমি প্রায়শই crt দেখতে পাই এবং নিশ্চিত ছিলাম না যে এটি কোনও ফর্ম্যাট কিনা। এটি আসলে আমি কেন "crt" প্রায়শই ব্যবহার করি তা বোঝাতে সহায়তা করে। ধন্যবাদ :)
ক্যাপ্টেন ম্যান

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

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