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
.
-showcerts
Zincirdeki 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_client
her zaman sunucu sertifikasını gösterir (varsa, yani sunucu merhaba cevap verir ve anonim bir paket seçmez). -showcerts
gö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 EOF
sertifikanı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.pem
serverfault.com/questions/139728/…
GnuTLS istemci aracı, gnutls-cli
aynı 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/null
etkileş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/null
hataları susturur (isteğe bağlı), tüm çıktıyı x509 ayrıştırıcısına aktarabiliriz, /dev/stdin
bö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.pem
Komutun 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.
x509
varsayı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)