Soru ssl sertifikasını bir web sitesinden nasıl indirebilirsiniz?


Ssl sertifikasını indirmek istiyorum https://www.google.com, wget veya diğer komutları kullanarak. Herhangi bir unix komut satırı? Wget veya openssl?


162
2018-05-07 21:01


Menşei




Cevaplar:


Sertifikayı indirmek için, openssl içine gömülmüş istemciyi kullanmanız gerekir:

echo -n | openssl s_client -connect HOST:PORTNUMBER \
    | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /tmp/$SERVERNAME.cert

Bu sertifikayu /tmp/$SERVERNAME.cert.

Kullanabilirsiniz -showcerts zincirdeki tüm sertifikaları indirmek isterseniz. Ancak sadece sunucu sertifikasını indirmek istiyorsanız, belirtmeye gerek yoktur. -showcerts

echo -n sunucuya bir yanıt verir, böylece bağlantı serbest bırakılır

sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' sertifika zinciri ve bağlantı detayları ile ilgili bilgileri kaldırır. Sertifikayı diğer anahtar sözcüklere aktarmak için tercih edilen biçim budur.


219
2017-10-19 22:59



Sadece iyi bir cevap vermediğinizi değil, aynı zamanda kesin bir açıklama yaptığını takdir edin. - marco.m
does -showcerts sunucu / yaprak sertifikasını da gösterecek misiniz? Sadece bu anahtarın dahil edildiğinde ara ürün görüntülediğini düşündüm. - Mike B
Cevabın dediği gibi, s_client her zaman sunucu sertifikasını gösterir (eğer varsa, yani sunucu merhaba yanıt verir ve anonim bir paket seçmez). -showcerts gösterileri herşey Alınan sertifikalar, önce sunucu sertifikası, daha sonra ara ve / veya kök. - dave_thompson_085
Bu olsa da, bir vekilin varlığında işe yaramıyor. - Frederick Nord
Bu ayrıca, SNI kullanan sunucularla da çalışmaz (tek bir IP adresindeki birden çok sertifika / etki alanı). Sorunlardan kaçınmak için, openssl servername parametresini belirtin: openssl s_client -connect HOST: PORTNUMBER -servername CN - verhage


Cevabı buldum. Openssl bunu sağlar.

openssl s_client -connect $ {REMHOST}: $ {REMPORT}


54
2018-05-07 21:05



Ayrıca openssl x509 -text <<EOF cert-text EOF sertifikanın detaylarını görmek için - mpapis
sudo rm -f cert.pem && sudo echo -n | openssl s_client -connect localhost:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ./cert.pem nezaket serverfault.com/questions/139728/... - pulkitsinghal
bu aynı şeyi başarır ve atlar sed kesmek. - phs
Bu yalnızca bir sertifikayı kontrol eder, eğer hizmet, her biri farklı bir kök CA tarafından imzalanmış farklı bir sertifikaya sahip, yük dengeli bir sunucu grubunun parçasıysa ne olur? Başka bir deyişle, bir mitm saldırısı bu talebin gerçek alana gitmesine izin verebilir ve ardından diğer isteklerini sunucularına yönlendirebilir. Bunu kontrol etmenin herhangi bir yolu var mı? Ve bir alanın gerçekten sahip olduğu tüm sertifikaların bir listesini almak için? - Jens Timmerman
@JensTimmerman "Ya da başka bir deyişle, bir mitm saldırısı bu talebin gerçek alana gitmesine izin verebilir ve ardından diğer isteklerini sunucularına yönlendirebilir." Bu durumda, ortadaki adam hedef sunucu için geçerli bir sertifika yoksa (veya istemci aptalca sunucu sertifikasını kontrol etmiyorsa) mümkün değildir. Belli ki, eğer sunucu bazen farklı bir sertifika sunuyorsa, büyük olasılıkla bağlantı denemelerini tekrarlayarak muhtemelen hepsini almayı umuyor olabilirsiniz. - David Tonhofer


GnuTLS istemci aracı gnutls-cli, ayrıca bunu kolaylaştırabilir:

gnutls-cli --print-cert www.example.com \
        < /dev/null \
        > www.example.com.certs

Program siteye etkileşimli bir istemci sağlamak için tasarlanmıştır, bu yüzden boş giriş vermeniz gerekir (bu örnekte, /dev/nulletkileşimli oturumu sonlandırmak için.


20
2017-10-07 06:19



nasıl gnutls (sistem geniş yapılandırılmış) https proxy üzerinden bağlanır ve exchages sertifikasını yazdırır? - Frederick Nord


bignose cevabına dayanarak, burada örneğin iyi bir şekilde uyan, kendine yeterli bir versiyon. bir şef tarifi:

sudo apt-get install gnutls-bin 
gnutls-cli --print-cert myserver.com </dev/null| sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > myserver.crt
sudo cp myserver.crt /usr/local/share/ca-certificates/myserver.crt
sudo update-ca-certificates

8
2018-05-27 09:31





true | openssl s_client -connect google.com:443 2>/dev/null | openssl x509

openssl bu modu stdin bekliyor, bu yüzden true |Bu, -connect parametresinde belirtilen sunucuya bağlanır. 2>/dev/null sessizlik hataları (isteğe bağlı), tüm çıktıyı x509 ayrıştırıcısına geçirebiliriz, belirterek /dev/stdin kabuk borusunu giriş dosyası olarak kullanmak. Ve bu sadece çıktı -----BEGIN CERTIFICATE----- için -----END CERTIFICATE----- kısmı s_client çıktı. Ekleyerek bunu bir dosyaya yönlendirebilirsiniz. > google.com.pem Komutun sonuna.


En iyi şekilde anlayabildiğim gibi, bu sertifika zincirini doğrulamaz, yalnızca son sunucunun sağladığı ssl kimliğini size söyler.


6
2018-01-12 10:38



(1) Bu, 6 yıl önceki cevapları gerçekten iyileştirmiyor (2) x509 varsayılan olarak stdin okur -in /dev/stdin gereksizdir (3) s_client sunucu sertifikasını doğru bir şekilde yerel bir güven istasyonuna (kök) doğrular ve beklenmedik bir şekilde doğrular, ancak bunu gösterecek bilgileri bastırırsınız (4) iptal için denetlemez (5); isim sunucuda sadece 1.0.2'de sertifikalandırılır ve sonra varsayılan olarak değil (daha sonra cert'e bakarak kendiniz kolayca kontrol edebilirsiniz) - dave_thompson_085
@ dave_thompson_085, sorunun nasıl sertifika indirileceği, ancak zincir bilgisinin nasıl gösterileceğidir. Openssl x509'u başka bir cevapta sed'den çok daha iyi seviyorum. - Der_Meister


Ex ve proses ikamesini kullanarak alternatif sözdizimi:

ex +'/BEGIN CERTIFICATE/,/END CERTIFICATE/p' <(echo | openssl s_client -showcerts -connect example.com:443) -scq > file.crt

0