Genel / özel bir DSA anahtar çiftini nasıl test edersiniz?


168

Belirli bir özel anahtarın belirli bir genel anahtarla eşleştiğini doğrulamanın kolay bir yolu var mı? Birkaç *.pubve birkaç *.keydosyam var ve hangisinin hangisiyle gittiğini kontrol etmem gerekiyor.

Yine, bunlar pub / anahtar dosyaları, DSA.

Gerçekten bir çeşit tek astarı tercih ederim ...

Yanıtlar:


260

Benim için daha iyi işleyen bir yol buldum:

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

bu komut, verilen özel anahtar için ortak anahtarı verir, bu nedenle çıktıyı her * .pub dosyasıyla karşılaştırın.


2
bu tam olarak ne yapıyor? Neden ssh?
sammiwei

2
muhtemelen ssh kimlik doğrulaması için
anahtar çiftleri

2
Benim durumumda, merkezi bir çalışma sunucusunun birkaç düzine id_rsa.pub.blahhostdosyası var ve hangisinin yalnız id_rsaözel anahtarla eşleştiğini bilmiyordum ve eski web sitelerini taşıyabilmem için şifresiz scp ayarlıyorum. Yeni bir anahtar çifti oluşturmak bir seçenek değildir; Anahtarlarımı iyi ayarladım ve bunu karıştırmayacağım.
Chris K

1
Bu çözüm her türlü SSH anahtarı için işe yarıyor gibi görünüyor. Hatta bu yaklaşımla yanlış yerleştirilmiş bir ortak anahtarı kurtarmayı başardım.
Jari Turkia

53

Ben her zaman bu komutları kullanarak modülün bir MD5 karma karşılaştırmak:

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

Karmalar eşleşirse, bu iki dosya birlikte gider.


48

DSA anahtarları için şunu kullanın:

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

ortak anahtarları yazdırmak için

 openssl dsa -in dsa.key -modulus -noout

özel bir anahtara karşılık gelen ortak anahtarları görüntülemek için onları karşılaştırın.


18

X.509 sertifikasında ortak anahtarlara sahip olduğunuzu ve bunların RSA anahtarları olduğunu varsayarsak, her bir ortak anahtar için

    openssl x509 -in certfile -modulus -noout

Her özel anahtar için,

    openssl rsa -in keyfile -modulus -noout

Ardından tuşları modül ile eşleştirin.


17

Fark ile kontrol daha kolay yapılabilir:

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

Tek garip şey fark dosyalar aynı ise hiçbir şey söylemez, bu yüzden sadece kamu ve özel eşleşmiyorsa size söylenecektir .


3
Dosyalar eşleştiğinde çıktı almak için:diff -s
Roland

3
Bu mükemmel bir cevap. (1) diff -qsbasit bir "özdeş / özdeş olmayan bir cevap döndürür. (2) fark çalıştırmadan önce genel anahtar dosyasındaki yorumu silmelisiniz.
emory

7

Ortak anahtarları silin ve özel anahtarlardan yenilerini oluşturun. Bunları ayrı dizinlerde tutun veya düz tutmak için bir adlandırma kuralı kullanın.


3
Soru, nasıl doğrulanacağını sormaktır ve doğrulayacağımız cihazın yeni bir tane oluşturmak için olanakları olmayabilir.
ArmenB

5

Özel bir anahtarın ve ortak anahtarın $ USER / .ssh dizininde eşleşen bir kümeye (özdeş) veya eşleşen küme (farklı) olup olmadığını denetlemek için aşağıdaki komutu girin. Cut komutu, ortak anahtardaki satırın sonundaki yorumun karşılaştırılmasını önler ve yalnızca anahtarın karşılaştırılmasına izin verir.

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

Çıktı bu satırlardan birine benzeyecektir.

Files - and /dev/fd/63 are identical

Files - and /dev/fd/63 differ

Kullanıcıların ~ / .ssh / dosyalarının dosya izinlerini ve eşleşen anahtar kümesini kontrol etmek için kullandıkları bir kabuk komut dosyası yazdım. Ssh kurulumu kullanıcı olayları ile benim zorluklarımı çözer. Size yardımcı olabilir. https://github.com/BradleyA/docker-security-infrastructure/tree/master/ssh

Not: Önceki yanıtım (Mart 2018'de) artık openssh'in en son sürümleriyle çalışmıyor. Önceki cevap: diff -qs <(ssh-keygen -yf ~ / .ssh / id_rsa) <(cut -d '' -f 1,2 ~ / .ssh / id_rsa.pub)


Ayrıntılı bir şekilde düşünmelisiniz, yayınınız gerçekten stackoverflow.com/a/22595408/3102264
mpromonet


4

Windows'daysanız ve bir GUI kullanmak istiyorsanız, puttygen ile özel anahtarınızı içine aktarabilirsiniz:

resim açıklamasını buraya girin

İçe aktarıldıktan sonra, ortak anahtarını kaydedebilir ve kendinizinkilerle karşılaştırabilirsiniz.


1

Ortak anahtarla bir şey şifreleyin ve hangi özel anahtarın şifresini çözdüğünü görün.

Bu kod projesi makalesi Jeff Atwood dışında hiç kimse tarafından .NET kripto sınıfları etrafında basitleştirilmiş bir sarmalayıcı uygular. Bu anahtarların RSA ile kullanılmak üzere oluşturulduğunu varsayarsak, şifrelemek için ortak anahtarınızla asimetrik sınıfı kullanın ve şifresini çözmek için özel anahtarınızla aynı şeyi kullanın.


Biraz daha basit bir şey arıyorum. Diyelim ki bir kabuk bir astar ya da benzeri. Linux'tayım ve openssl gibi normal şeyler yüklü.
Loki

3
Bu, yetkili_anahtarlar dosyanıza genel anahtar ekleyin ve hangi özel anahtarın çalıştığını görmek için ssh kullanın demek kadar yararlıdır. Yöntem işe yarıyor, ama bir acı.
Bradley Kreider

0

Hiçbir şey döndürmezse, eşleşirler:

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

-2

Sadece puttygen kullanın ve özel anahtarınızı içine yükleyin. Farklı seçenekler sunar, örneğin, ortak yazma anahtarını dışa aktarma.


1
bu, özel-genel anahtar çiftinin test edilmesine izin vermez
MatFiz
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.