Kök CA ve Alt CA'yı Linux'taki bir sertifika zincirinden nasıl çıkarabilirim?


25

Orta ve kök sertifikasına sahip bir son varlık / sunucu sertifikam var. Son catvarlık sertifikasındayken, sadece bir tane BEGINve ENDetiket görüyorum . Tek nihai varlık sertifikasıdır.

Orta ve kök sertifika içeriğini görebilmemin bir yolu var mı? Sadece içeriğine BEGINve ENDetiketine ihtiyacım var.

Windows'ta tam sertifika zincirini "Sertifika Yolu" ndan görebiliyorum. Aşağıda Stack Exchange sertifikası örneği verilmiştir.

görüntü tanımını buraya girin

Oradan bir Görünüm Sertifikası gerçekleştirebilir ve bunları dışa aktarabilirim. Bunu hem kök hem de Windows için orta düzeyde yapabilirim. Linux'ta da aynı yöntemi arıyorum.

görüntü tanımını buraya girin


Lütfen bu sertifikayı size kimin verdiğini söyleyin.
Rui F Ribeiro

@RuiFRibeiro Herkese diyelim ... Elinizde yalnızca birincil sertifika ile yığın değişimi için sertifika zincirini görmek istiyorum.
Anirban Nag 'tintinmj'

Yanıtlar:


25

Bir web sitesinden şunları yapabilirsiniz:

openssl s_client -showcerts -verify 5 -connect stackexchange.com:443 < /dev/null

Bu, sertifika zincirini ve sunucunun sunduğu tüm sertifikaları gösterecektir.

Şimdi, bu iki sertifikayı dosyalara kaydedersem, şunu kullanabilirim openssl verify:

$ openssl verify -show_chain -untrusted dc-sha2.crt se.crt 
se.crt: OK
Chain:
depth=0: C = US, ST = NY, L = New York, O = "Stack Exchange, Inc.", CN = *.stackexchange.com (untrusted)
depth=1: C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert SHA2 High Assurance Server CA (untrusted)
depth=2: C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert High Assurance EV Root CA

Bu -untrustedseçenek ara sertifikaları / sertifikaları vermek için kullanılır; se.crtdoğrulamak için sertifika. Derinlik = 2 sonuç sistem güvenilir CA deposundan geldi.

Ara sertifikalarınız yoksa, doğrulama işlemini gerçekleştiremezsiniz. Bu sadece X.509’un işleyiş şekli.

Sertifikaya bağlı olarak, ara ürünü almak için bir URI içerebilir. Örnek olarak openssl x509 -in se.crt -noout -textşunları içerir:

        Authority Information Access: 
            OCSP - URI:http://ocsp.digicert.com
            CA Issuers - URI:http://cacerts.digicert.com/DigiCertSHA2HighAssuranceServerCA.crt

“CA İhraççıları” URI'sının ara sertifikaya işaret ettiğini (DER biçiminde, bu yüzden openssl x509 -inform der -in DigiCertSHA2HighAssuranceServerCA.crt -out DigiCertSHA2HighAssuranceServerCA.pemOpenSSL tarafından daha fazla kullanmak üzere kullanmanız gerekir ).

Eğer kaçarsan openssl x509 -in /tmp/DigiCertSHA2HighAssuranceServerCA.pem -noout -issuer_hashalmak 244b5494en sistem kök CA deposunda bulabileceği, /etc/ssl/certs/244b5494.0(sadece ekleme .0isme).

Bunları sizin için yapmanın kolay ve kolay bir OpenSSL komutu olduğunu sanmıyorum.


Asıl sorun bu. Yanımda URL yok. Sadece sertifika dosyam var. Ve etiketli ( BEGINve ENDsadece cat
.crt

@ AnirbanNag'tintinmj 'Eğer sadece sertifikayı çözmek istiyorsan, deneopenssl x509 -in file.crt -noout -text
derobert

Ben arasındadır kök sertifika de ara içeriğini istiyorum BEGINve ENDetiketi.
Anirban Nag 'tintinmj'

Ya da orta ve kök sertifikayı birincil sertifikadan çıkaracak ve bir dosyaya kaydedecek bir komut verebilirseniz ... Bununla da yaşayabilirim.
Anirban Nag 'tintinmj'

@ AnirbanNag'tintinmj 'Eğer openssl x509komut görünmüyorsa, ara sertifikanın orada olduğunu sanmıyorum. (Bir hata yapmadıysanız openssl x509).
derobert

12

tl; dr - zincirdeki tüm döküntüleri atmak için bir liner bash magic

openssl s_client -showcerts -verify 5 -connect de.wikipedia.org:443 < /dev/null | awk '/BEGIN/,/END/{ if(/BEGIN/){a++}; out="cert"a".crt"; print >out}' && for cert in *.crt; do newname=$(openssl x509 -noout -subject -in $cert | sed -n 's/^.*CN=\(.*\)$/\1/; s/[ ,.*]/_/g; s/__/_/g; s/^_//g;p').pem; mv $cert $newname; done

2 adımda açıklama

Zincirdeki bütün parçaları şu andaki dirse dökmek için cert${chain_number}.pem:

openssl s_client -showcerts -verify 5 -connect your_host:443 < /dev/null | awk '/BEGIN/,/END/{ if(/BEGIN/){a++}; out="cert"a".pem"; print >out}' 

Bunları ortak adlarıyla yeniden adlandırmak için bonus-track:

for cert in *.pem; do newname=$(openssl x509 -noout -subject -in $cert | sed -n 's/^.*CN=\(.*\)$/\1/; s/[ ,.*]/_/g; s/__/_/g; s/^_//g;p').pem; mv $cert $newname; done

Uzantı olarak yalnızca.
Kaptan Adam,

Hayır gerçek değil. ".pem" formattır (DER'nin temeli64) ".crt" bir sertifika anlamına gelir ancak kodlama hakkında hiçbir şey söylemez. Daha tutarlı hale getirmek ve tüm pem isimlerini yapmak üzereydim ... Ama sertifikanın nereden indirildiğini (crt) anlamak ve Linux dünyasında (pem) kullandığım şeyi bitirmek için bir linerde okumak daha kolay. . Umarım bu işleri biraz açıklığa kavuşturur ...
estani

1
Evet öyle, PEM'in bir format olduğunun farkındayım ama sıklıkla crt görüyorum ve format olup olmadığından emin değildim. Bu aslında neden "crt" nin bu kadar sık ​​kullanıldığını gördüğümü açıklamaya yardımcı oluyor. Thanks :)
Captain Man

Bu, yalnızca kaynağa zaten güveniyorsanız çalışıyor gibi görünüyor. Özel bir CA indirmeye çalışıyorum, ancak zinciri değil sadece ilk sertifikayı indiriyor.
mjaggard

@mjaggard garipti çünkü tam da bu dava için kullandım. Olduğu söyleniyor, sunucu kök CA'yı hiç göndermiyor olabilir, örneğime bakarsanız, şimdi sadece 3 indirme indirmek için kullanılır, sadece 2 indiriliyordur. gelin, eğer sende yoksa, yine de güvenmeyeceksin ...). Daha önce de böyle olmadığından eminim.
estani
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.