Ws veya başka bir komut kullanarak , ssl sertifikasını https://www.google.com adresinden indirmek istiyorum . Herhangi bir unix komut satırı? wget veya openssl?
Ws veya başka bir komut kullanarak , ssl sertifikasını https://www.google.com adresinden indirmek istiyorum . Herhangi bir unix komut satırı? wget veya openssl?
Yanıtlar:
Sertifikayı indirmek için openssl içine yerleştirilmiş istemciyi şu şekilde kullanmanız gerekir:
echo -n | openssl s_client -connect HOST:PORTNUMBER \
| sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /tmp/$SERVERNAME.cert
Bu sertifikaya kaydedecek /tmp/$SERVERNAME.cert.
-showcertsZincirdeki tüm sertifikaları indirmek istiyorsanız kullanabilirsiniz . 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ı hakkındaki bilgileri siler. Sertifikayı diğer anahtar depolara aktarmak için tercih edilen biçim budur.
-showcertsçok sunucu / yaprak sertifika göstermek? Sadece bu anahtar dahil edildiğinde ara ürün gösterdiğini sanıyordum.
s_clienther zaman sunucu sertifikasını gösterir (varsa, yani sunucu merhaba cevap verir ve anonim bir paket seçmez). -showcertsgösterir tüm sertifikalarını ilk önce ara maddeler ve / veya kök sertifika, sunucu aldı.
Cevabı buldum. Openssl bunu sağlar.
openssl s_client -connect $ {REMHOST}: $ {REMPORT}
openssl x509 -text <<EOF cert-text EOFsertifikanın detaylarını görmek için
sudo rm -f cert.pem && sudo echo -n | openssl s_client -connect localhost:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ./cert.pemserverfault.com/questions/139728/…
GnuTLS istemci aracı, gnutls-cliaynı zamanda bu kolay yapabilirsiniz:
gnutls-cli --print-cert www.example.com \
< /dev/null \
> www.example.com.certs
Program, siteye etkileşimli bir istemci sağlamak üzere tasarlanmıştır, bu nedenle /dev/nulletkileşimli oturumu sonlandırmak için boş bir giriş yapmanız gerekir (bu örnekte ).
@bignose cevabına dayanarak, burada bir şef tarifi uygun bir bağımsız sürüm:
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
true | openssl s_client -connect google.com:443 2>/dev/null | openssl x509
openssl'ın bu modu stdin'i bekler, bu yüzden bunu sağlıyoruz true |, bu, -connect parametresinde belirtilen sunucuya bağlanır. 2>/dev/nullhataları susturur (isteğe bağlı), tüm çıktıyı x509 ayrıştırıcısına aktarabiliriz, /dev/stdinböylece kabuk borusunu girdi dosyası olarak kullanacağız. Ve bu irade çıkışı sadece -----BEGIN CERTIFICATE-----kadar -----END CERTIFICATE-----kısmı s_clientçıkışı. > google.com.pemKomutun sonuna ekleyerek bunu bir dosyaya yönlendirebilirsiniz .
En iyi söyleyebileceğim gibi, bu sertifika zincirini doğrulamaz, yalnızca son sunucunun sağladığı hangi ssl kimliğini söyleyebilir.
x509varsayılan olarak stdin okuyor -in /dev/stdin, bu nedenle gereksiz (3) s_client, sunucu sertifikalarının yerel güven bağına (kök) doğru şekilde zincirlendiğini doğruladı; bunu gösterecek bilgiyi bastırdı (4) iptal etmediğini kontrol etmiyor (5) sunucu sertifikasındaki ismi sadece 1.0.2'de kontrol ediyor ve ardından varsayılan olarak kontrol etmiyor (fakat sertifikaya bakarak kolayca kendiniz kontrol edebilirsiniz) daha sonra)