Apache की चल रही आवृत्ति से RSA कुंजी प्राप्त करना?


26

मैंने एक SSL प्रमाणपत्र के लिए RSA कीपेयर बनाया और निजी कुंजी को इसमें संग्रहीत किया /etc/ssl/private/server.key। दुर्भाग्य से यह निजी कुंजी की एकमात्र प्रति थी जो मेरे पास थी।

तब मैंने गलती से फ़ाइल को डिस्क पर लिखा (हाँ, मुझे पता है)।

अपाचे अभी भी चल रहा है और अभी भी एसएसएल अनुरोधों की सेवा कर रहा है, जिससे मुझे विश्वास है कि निजी कुंजी को पुनर्प्राप्त करने में आशा हो सकती है। (शायद /procया कहीं न कहीं एक प्रतीकात्मक कड़ी है?)

यह सर्वर Ubuntu 12.04 LTS चला रहा है।

जवाबों:


39

सफलता!

मैं निजी कुंजी प्राप्त करने में सक्षम था। लेकिन यह आसान नहीं था। यहाँ आपको क्या करना है:

  1. सुनिश्चित करें कि आप सर्वर या अपाचे को पुनरारंभ नहीं करते हैं। खेल उस बिंदु पर खत्म हो गया है। इसका अर्थ यह भी है कि यह सुनिश्चित करने के लिए कि कोई निगरानी सेवाएँ Apache को पुनरारंभ नहीं करती हैं।
  2. Passe-partout नामक टूल के लिए इस फ़ाइल - स्रोत कोड को पकड़ो ।
  3. स्रोत कोड निकालें और Makefile.mainपढ़ने के लिए लाइन 9 समायोजित करें :

    $(CC) $(CFLAGS) -o $@ $(OBJS) $(LDFLAGS)
    

    (ध्यान दें कि $(OBJS)और $(LDFLAGS)क्रम में उलटे हैं।)

  4. भागो ./build.sh
  5. का उपयोग करके अपाचे के पीआईडी ​​को पकड़ो:

    service apache2 status
    
  6. passe-partoutरूट के रूप में कमांड चलाएँ :

    sudo passe-partout [PID]
    

    ... [PID]चरण # 5 में आपने कहाँ से मान प्राप्त किया है।

  7. यदि कार्यक्रम सफल होता है, तो आपकी वर्तमान निर्देशिका में अतिरिक्त कुंजियों का एक समूह होगा:

    you@server:~# ls
    id_rsa-0.key  id_rsa-1.key  id_rsa-2.key
    

अगर सब ठीक हो गया (और उम्मीद है कि यह किया है), उन चाबियों में से एक वह है जो आपको चाहिए। हालांकि, यदि आपके पास उपयोग में एक से अधिक प्रमाणपत्र / कीफ़ाइल थे, तो आपको यह पता लगाने की आवश्यकता है कि यह कौन सा है। यहां बताया गया है कि आप ऐसा कैसे करते हैं:

पहले उस प्रमाणपत्र की एक प्रति ले लें जो हस्ताक्षरित कुंजी से मेल खाती है। फ़ाइल को नाम दिया गया मानकर server.crt, निम्न आदेश चलाएँ:

openssl x509 -noout -modulus -in server.crt | openssl md5

यह एक मूल्य को आउटपुट करेगा जिसे आपको प्रत्येक कुंजी के साथ मेल खाना होगा। प्रत्येक कुंजी के लिए, निम्न कमांड चलाएँ:

openssl rsa -noout -modulus -in id_rsa-0.key | openssl md5

यदि उनमें से एक मेल खाता है, तो आपको कुंजी मिल गई है।


श्रेय: इस लेख ने मुझे संकेत दिया कि भाग-भाग करना।


2
उस उपयोगिता पर अच्छा लगता है।
फाल्कन मोमेंट

3
राइटअप के लिए +1 (और लेख लेखक के लिए एक वर्चुअल +1: शर्मिंदा होना और अभी भी इसे लिखना उस स्थिति में दूसरों की मदद करता है)।
जोआचिम सॉर

2
ओह, यह शानदार है, और इतना गंदा है। मुझे यह पसंद है।
टॉम ओ'कॉनर

8

सबसे अधिक संभावना है कि यह मेमोरी में कुंजी को संग्रहीत कर रहा है, जो यह करता है क्योंकि यह एक कॉपी रखने की जरूरत है क्योंकि यह विशेषाधिकार छोड़ देता है और / या एक आपूर्ति पासफ़्रेज़ का उपयोग करके कुंजी को डिक्रिप्ट करता है।

सिद्धांत रूप में, यदि आप डिबगर संलग्न करते हैं, तो आप इसे प्रक्रिया छवि से बाहर निकाल सकते हैं, हालांकि यदि वे सर्वोत्तम प्रथाओं का पालन कर रहे हैं, तो यह स्मृति में किसी चीज़ के खिलाफ एन्क्रिप्ट किया जाएगा।

उस ने कहा, अगर ऐसा होता है कि यह अभी भी खुला है, /proc/${PID}/fd/${SOMETHING}तो यह हो सकता है। यदि आप इसे ओवरवोट करते हैं, तो आपकी कुंजी नहीं होगी क्योंकि ओवरराइटिंग डेटा होगा। यदि आपने इसकी जगह पर कुछ और कॉपी किया (या इसे हटा दिया गया या इसे हटा दिया गया, या इसके मूल निर्देशिका को हटा दिया गया), तो यह वहीं होगा।


मैं cpपुराने के स्थान पर नई कुंजी की प्रतिलिपि बनाता था।
नाथन उस्मान

मैंने /proc... खुले फ़ाइल विवरणकों के माध्यम से देखा ... कुछ भी नहीं।
नाथन उस्मान

यह संभावना नहीं है कि एक प्रति फिर खुली रखी जाए, जो निजी कुंजी पढ़ने के लिए सामान्य मामला है; आपके एकमात्र विकल्प यह पता लगाना है कि स्रोत से इसे कैसे और कहां संग्रहीत किया जाता है, इसे डीबगर (प्रतीकों के साथ बनाया गया मानकर) का उपयोग करके बाहर निकालें, और इसे डिक्रिप्ट करें ... या प्रमाणपत्र को प्रतिस्थापित करें।
फाल्कन मोमेंट

मैं समझ गया! आप सही थे - अपाचे यादों की चाबी रखता है और मैं उन्हें पुनः प्राप्त करने में सक्षम था। कृपया मेरा उत्तर देखें।
नाथन उस्मान
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.