आप सार्वजनिक / निजी डीएसए कीपर का परीक्षण कैसे करते हैं?


167

क्या यह सत्यापित करने का एक आसान तरीका है कि दी गई निजी कुंजी किसी दी गई सार्वजनिक कुंजी से मेल खाती है? मेरे पास कुछ * .pub, और कुछ * .key फाइलें हैं, और मुझे यह जांचने की आवश्यकता है कि किसके साथ जाना है।

फिर, ये पब / कुंजी फाइलें, डीएसए हैं।

मैं वास्तव में किसी प्रकार का एक-लाइनर पसंद करूंगा ...

जवाबों:


259

मुझे एक ऐसा रास्ता मिला जो मेरे लिए बेहतर काम करता है:

ssh-keygen -y -f <private key file>

वह कमांड दिए गए निजी कुंजी के लिए सार्वजनिक कुंजी का उत्पादन करेगा, इसलिए बस आउटपुट की तुलना प्रत्येक * .pub फ़ाइल से करें।


2
यह वास्तव में क्या करता है? क्यों ssh?
संमईवेई

2
शायद इसलिए कि वह ssh ऑथेंटिकेशन के लिए की-मेल का इस्तेमाल कर रहा है
etarion

2
मेरे मामले में, एक केंद्रीय कार्य सर्वर में कुछ दर्जन id_rsa.pub.blahhostफाइलें हैं और मुझे नहीं पता था कि कौन सी अकेली id_rsaनिजी कुंजी से मेल खाती है और मैं पासवर्डलेस एसपीपी स्थापित कर रहा हूं ताकि मैं पुरानी वेबसाइटों को स्थानांतरित कर सकूं। एक नई कुंजी जोड़ी बनाना एक विकल्प नहीं है; मुझे मेरी चाबी अच्छी तरह से मिल गई है और वह गड़बड़ नहीं करेगा।
क्रिस के

1
यह समाधान सभी प्रकार के SSH- कीज़ के लिए काम करता है। मैं भी इस दृष्टिकोण के साथ एक गलत सार्वजनिक कुंजी को पुनर्प्राप्त करने में कामयाब रहा।
जरी तुर्किया

53

मैं हमेशा इन आदेशों का उपयोग करते हुए मापांक के MD5 हैश की तुलना करता हूं:

Certificate: openssl x509 -noout -modulus -in server.crt | openssl md5
Private Key: openssl rsa -noout -modulus -in server.key | openssl md5
CSR: openssl req -noout -modulus -in server.csr | openssl md5

यदि हैश मैच होता है, तो वे दो फाइलें एक साथ चलती हैं।


48

DSA कुंजियों के लिए, उपयोग करें

 openssl dsa -pubin -in dsa.pub -modulus -noout

सार्वजनिक कुंजी को मुद्रित करने के लिए, तब

 openssl dsa -in dsa.key -modulus -noout

निजी कुंजी के अनुरूप सार्वजनिक कुंजी प्रदर्शित करने के लिए, फिर उनकी तुलना करें।


18

मान लें कि आपके पास सार्वजनिक कुंजी x.509 प्रमाणपत्र के अंदर है, और मान लें कि वे आरएसए कुंजी हैं, तो प्रत्येक सार्वजनिक कुंजी के लिए,

    openssl x509 -in certfile -modulus -noout

प्रत्येक निजी कुंजी के लिए, करें

    openssl rsa -in keyfile -modulus -noout

फिर मापांक से कुंजियों का मिलान करें।


17

चेक को अंतर के साथ आसान बनाया जा सकता है:

diff <(ssh-keygen -y -f <private_key_file>) <public key file>

केवल विचित्र बात यह है कि यदि फाइल समान है, तो अंतर कुछ भी नहीं कहता है, इसलिए आपको केवल यह बताया जाएगा कि क्या सार्वजनिक और निजी मेल नहीं खाते हैं।


3
फ़ाइलों से मेल खाने पर आउटपुट प्राप्त करने के लिए:diff -s
रोलैंड

3
यह एक उत्कृष्ट उत्तर है। (1) diff -qsएक साधारण "समान / समान उत्तर नहीं देता है। (2) आपको अंतर को चलाने से पहले सार्वजनिक कुंजी फ़ाइल में टिप्पणी को हटाना चाहिए।
एमोरी

7

सार्वजनिक कुंजियों को हटाएं और निजी कुंजियों से नए जनरेट करें। उन्हें अलग निर्देशिकाओं में रखें, या उन्हें सीधे रखने के लिए एक नामकरण सम्मेलन का उपयोग करें।


3
सवाल पूछ रहा है कि कैसे सत्यापित किया जाए और जिस डिवाइस पर हम इसे सत्यापित कर रहे हैं, उसमें नया बनाने के लिए सुविधाएं न हों।
आर्मेनबी जूल

5

यह जाँचने के लिए कि कोई निजी कुंजी और सार्वजनिक कुंजी एक मिलान सेट (समान) है या नहीं, एक मिलान सेट (भिन्न) $ USER /। कट कमांड सार्वजनिक कुंजी में लाइन के अंत में टिप्पणी को तुलना करने से रोकता है, जिससे केवल कुंजी की तुलना की जा सकती है।

ssh-keygen -y -f ~/.ssh/id_rsa | diff -s - <(cut -d ' ' -f 1,2 ~/.ssh/id_rsa.pub)

आउटपुट इनमें से किसी एक लाइन की तरह दिखेगा।

Files - and /dev/fd/63 are identical

Files - and /dev/fd/63 differ

मैंने एक शेल स्क्रिप्ट लिखी है जिसका उपयोग उपयोगकर्ता अपनी ~ / .ssh / फ़ाइलों की फ़ाइल अनुमति और मिलान किए गए कुंजी सेट की जांच करने के लिए करते हैं। यह उपयोगकर्ता की घटनाओं के साथ मेरी चुनौतियों को हल करता है। यह आपकी मदद कर सकता है। https://github.com/BradleyA/docker-security-infrastructure/tree/master/ssh

नोट: मेरा पिछला उत्तर (मार्च 2018 में) अब खुलने की नवीनतम रिलीज़ के साथ काम नहीं करता है। पिछला उत्तर: diff -qs <(ssh-keygen -yf ~ / .sh / id_rsa) <(cut -d '' -f 1,2 ~ / / .sh / id_rsa.pub)


मुझे लगता है कि आपको विस्तार से बताना चाहिए, आपकी पोस्ट वास्तव में stackoverflow.com/a/22595408/3102264 के
mpromonet


4

यदि आप विंडोज में हैं और GUI का उपयोग करना चाहते हैं, तो पोटीनजेन के साथ आप इसमें अपनी निजी कुंजी आयात कर सकते हैं:

यहां छवि विवरण दर्ज करें

एक बार आयात होने के बाद, आप इसकी सार्वजनिक कुंजी को सहेज सकते हैं और आपकी तुलना कर सकते हैं।


1

सार्वजनिक कुंजी के साथ कुछ एन्क्रिप्ट करें, और देखें कि कौन सी निजी कुंजी इसे डिक्रिप्ट करती है।

इस कोड परियोजना लेख जेफ Atwood अलावा अन्य कोई नहीं द्वारा नेट क्रिप्टो वर्गों के चारों ओर एक सरलीकृत आवरण लागू करता है। मान लें कि इन कुंजियों को RSA के साथ उपयोग के लिए बनाया गया था, अपनी सार्वजनिक कुंजी को एन्क्रिप्ट करने के लिए असममित वर्ग का उपयोग करें, और डिक्रिप्ट करने के लिए आपकी निजी कुंजी के साथ भी।


मैं कुछ और अधिक सरल के लिए देख रहा हूँ। कहो, एक खोल एक लाइनर या पसंद है। मैं linux पर हूँ, और सामान्य सामान जैसे कि Opensl स्थापित है।
लोकी

3
यह कहना लगभग उतना ही उपयोगी है जितना कि आपके अधिकृत_की फ़ाइल में सार्वजनिक कुंजी जोड़ना और ssh का उपयोग करके यह देखना है कि कौन सी निजी कुंजी काम करती है। विधि काम करती है, लेकिन यह एक दर्द है।
ब्रैडली क्रेडर

0

यदि यह कुछ भी नहीं लौटाता है, तो वे मेल खाते हैं:

cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
ssh -i $HOME/.ssh/id_rsa localhost

-2

बस पोटीन का उपयोग करें और इसमें अपनी निजी कुंजी लोड करें। विभिन्न विकल्पों की पेशकश करता है, उदाहरण के लिए, सार्वजनिक कुंजी को निर्यात करना।


1
यह निजी-सार्वजनिक
कीपर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.