Çalışan bir Apache örneğinden bir RSA anahtarı alınıyor mu?


26

SSL sertifikası için bir RSA keypair oluşturdum ve özel anahtarı sakladım /etc/ssl/private/server.key. Maalesef, sahip olduğum özel anahtarın tek kopyası buydu.

Sonra yanlışlıkla diske dosyanın üzerine yazdım (evet, biliyorum).

Apache hala çalışıyor ve hala SSL istekleri sunuyor, bu da özel anahtarı kurtarmada umut olabileceğine inanmamı sağladı. (Belki bir yerde bir yerde sembolik bir bağlantı vardır /proc?)

Bu sunucuda Ubuntu 12.04 LTS çalışıyor.

Yanıtlar:


39

BAŞARI!

Özel anahtarı alabildim. Ama kolay değildi. İşte yapmanız gerekenler:

  1. Yap emin sunucuyu veya Apache yeniden yoktur. Oyun bu noktada bitti. Bu aynı zamanda hiçbir izleme servisinin Apache'yi yeniden başlatmadığından emin olmak anlamına gelir.
  2. Kepçe bu dosyayı kaynak kodunu - bir araç adında paspartu .
  3. Kaynak kodu çıkartın ve 9 satırını Makefile.mainokumak için ayarlayın :

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

    (Bildirim o $(OBJS)ve $(LDFLAGS)sırayla ters çevrilir.)

  4. Run ./build.sh.
  5. Aşağıdakileri kullanarak Apache'nin PID'sini alın:

    service apache2 status
    
  6. passe-partoutKomutu root olarak çalıştırın :

    sudo passe-partout [PID]
    

    ... [PID]5. adımda aldığınız değer nerede .

  7. Program başarılı olursa, geçerli dizininizde bir sürü ek anahtar olacaktır:

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

Eğer her şey yolunda giderse (ve umarım öyle olmuştur), bu anahtarlardan biri ihtiyacınız olandır. Ancak, kullanımda birden fazla sertifika / anahtar dosyası bulunduysa, hangisinin olduğunu bulmanız gerekir. İşte bunu nasıl yapıyorsunuz:

İlk önce imzalı anahtarla eşleşen sertifikanın bir kopyasını alın. Dosyanın adlandırıldığını varsayarak, server.crtaşağıdaki komutu çalıştırın:

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

Bu, her bir tuşa karşı eşleştirmeniz gereken bir değer üretecektir. Her anahtar için aşağıdaki komutu çalıştırın:

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

Bunlardan biri eşleşirse, anahtarı bulmuş olursunuz.


Kredi: Bu yazı beni pasto-partout'a işaret etti.


2
O programı bulmak iyi.
Falcon Momot

3
Yazma için +1 (ve makale yazarı için sanal bir + 1: utanmak ve yazmayı sürdürmek bu durumda başkalarına yardımcı olur).
Joachim Sauer

2
Oh, bu muhteşem ve çok kirli. Onu seviyorum.
Tom O'Connor

8

Büyük olasılıkla anahtarı bellekte saklıyor, çünkü ayrıcalıkları bıraktıktan sonra bir kopyasını saklaması ve / veya verilen bir parola kullanarak şifreyi çözmesi gerekiyor.

Teoride, bir hata ayıklayıcı eklerseniz işlem görüntüsünden çıkartabilirsiniz, ancak en iyi uygulamaları takip ediyorlarsa bellekteki bir şeye karşı şifrelenir.

Bununla birlikte, hala açılmışsa, /proc/${PID}/fd/${SOMETHING}olabilir. Üzerine yazdıysanız, üzerine yazma verileri olacağı için anahtarınız orada olmayacak. Başka bir şeyi yerine kopyaladıysanız (veya sildiyseniz veya bağlantısını kaldıysanız ya da ana dizinini tekrarladıysanız), orada olacak.


Kullandığım cpeskisinin yerine yeni anahtarı kopyalamak için.
Nathan Osman,

Açık dosya tanımlayıcılarına /proc... hiçbir şeyden baktım .
Nathan Osman,

Büyük olasılıkla bir kopyasını açık tutmamış, ki bu özel anahtarları okumak için olağan bir durumdur; tek seçenekiniz kaynağın nasıl ve nerede depolandığını bulmak, bir hata ayıklayıcı kullanarak (sembollerle oluşturduğunuzu varsayarak) çıkartın ve şifresini çözün veya sertifikayı değiştirin.
Falcon Momot

Anladım! Haklıydın - Apache anahtarları bellekte tutuyor ve ben onları alabildim. Lütfen cevabımı gör.
Nathan Osman
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.