Yanıtlar:
http://comments.gmane.org/gmane.comp.encryption.openssl.user/43587 bu bir astarı önerir:
openssl crl2pkcs7 -nocrl -certfile CHAINED.pem | openssl pkcs7 -print_certs -text -noout
Gerçekten benim için çalıştı, ancak ayrıntıları anlamıyorum, bu yüzden herhangi bir uyarı varsa söyleyemem.
/etc/ssl/certs/ca-certificates.crt
ve gotunable to load PKCS7 object
Java keytool
hile yapar:
keytool -printcert -v -file <certs.crt>
Ek Açıklama: Windows doubleclick çalışmıyor. Windows, anahtar deposundaki yalnızca ilk sertifikayı okur ve güven zincirini yerleşik sertifika deposundan otomatik olarak genişletir.
Sonuçlar:
.crt
Dosyadaki ilk sertifikanın ötesinde gösterilmez.crt
. Bu yanlış sonuçlara yol açabilir.Aşağıdaki bu SSS götürdü bu perl programı çok güçlü bir şekilde bana önerir openssl
işlemek için yerleşik desteğe sahip n inci bir paket içinde sertifikası ve bunun yerine her beslemeden önce giriş-ve-zar dilim bazı aracı kullanmak gerekir Sertifikamıza openssl
. Nick Burch'un yukarıda bağlanmış olan senaryosundan serbestçe adapte olan bu perl betiği işi yapıyor gibi görünüyor:
#!/usr/bin/perl
# script for splitting multi-cert input into individual certs
# Artistic Licence
#
# v0.0.1 Nick Burch <nick@tirian.magd.ox.ac.uk>
# v0.0.2 Tom Yates <tyates@gatekeeper.ltd.uk>
#
$filename = shift;
unless($filename) {
die("You must specify a cert file.\n");
}
open INP, "<$filename" or die("Unable to load \"$filename\"\n");
$thisfile = "";
while(<INP>) {
$thisfile .= $_;
if($_ =~ /^\-+END(\s\w+)?\sCERTIFICATE\-+$/) {
print "Found a complete certificate:\n";
print `echo \'$thisfile\' | openssl x509 -noout -text`;
$thisfile = "";
}
}
close INP;
Dosyadaki her sertifikanın bir özetini gösteren Oneliner.
openssl crl2pkcs7 -nocrl -certfile CHAINED.pem | openssl pkcs7 -print_certs -noout
(başka bir cevapta bahsedilen benzer komando, ancak bu - metin seçeneği olmadan daha kısa çıktı verir).
örnek:
$ openssl crl2pkcs7 -nocrl -certfile bundled.crt | openssl pkcs7 -print_certs -noout
subject=/C=NL/postalCode=5705 CN/L=City/street=Example 20/O=Foobar B.V./OU=ICT/OU=Wildcard SSL/CN=*.example.com
issuer=/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO RSA Organization Validation Secure Server CA
subject=/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO RSA Organization Validation Secure Server CA
issuer=/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO RSA Certification Authority
subject=/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO RSA Certification Authority
issuer=/C=SE/O=AddTrust AB/OU=AddTrust External TTP Network/CN=AddTrust External CA Roo
Bu hoş ya da zarif olmayabilir, ancak linux üzerinde bash ve PEM formatlı bir blok dosyasında blokları kullanarak benim için hızlı ve çalıştı.
while read line
do
if [ "${line//END}" != "$line" ]; then
txt="$txt$line\n"
printf -- "$txt" | openssl x509 -subject -issuer -noout
txt=""
else
txt="$txt$line\n"
fi
done < /path/to/bundle/file
Hepsini bir satır koyabilir ve openssl seçeneklerini uygun şekilde ayarlayabilirsiniz. Keşke bunun için daha zarif bir çözüm olsaydı, ama bu durumda daha şık çözümü bulmanın, inelegant'ı kesmekten daha fazla zaman alacağını düşünüyorum.
Awk tabanlı bir çözüm olmadığından:
$ cat ca-bundle | awk '/BEGIN/ { i++; } /BEGIN/, /END/ { print > i ".extracted.crt" }'
$ ls *.extracted.crt | while read cert; do openssl x509 -in $cert -text -noout; done
İlk komut, BEGIN ve END satırlarını arayarak paketi certs içine dağıtır. İkinci komut, çıkarılan cerların arasından geçer ve bunları gösterir.
Doğrudan CLI'ya kopyala / yapıştır yapmanıza olanak tanımak için MadHatter'ın gönderisinde küçük bir değişiklik. Ayrıca, cerlerin doğru olduğundan emin olunmasında yardımcı olan MD5 karma değerini de ekledim. Dönen stdin çizgisi, sertifikaların md5 karmasıdır.
perl -e 'my $thisfile = "";
foreach (<>) {
$thisfile .= $_;
if($_ =~ /^\-+END(\s\w+)?\sCERTIFICATE\-+$/) {
print "Found a complete certificate:\n";
print `echo "$thisfile" | openssl x509 -noout -text`;
print `echo "$thisfile" | openssl x509 -noout -modulus | openssl md5`;
$thisfile = "";
}
}' < my_id_cert_and_ca_bundle.crt
Kısa ve özlü bir çıktı görmek istiyorsanız bu sürümü kullanın. Yalnızca tüm sertifikanızı eklediğinizi kontrol ediyorsanız, ancak sertifikanın / kullanımların gerçekten kontrol edilmediğini kontrol ediyorsanız faydalıdır.
perl -e 'my $thisfile = "";
foreach (<>) {
$thisfile .= $_;
if($_ =~ /^\-+END(\s\w+)?\sCERTIFICATE\-+$/) {
print "Found a complete certificate:\n";
print `echo "$thisfile" | openssl x509 -noout -serial -subject -dates -alias -issuer`;
print `echo "$thisfile" | openssl x509 -noout -modulus | openssl md5` . "\n";
$thisfile = "";
}
}' < my_id_cert_and_ca_bundle.crt
Openssl sürümünüzün tüm bu bayrakları desteklememesi durumunda, kullanabileceğiniz bazı egreplerdir. İlkiyle aynı şey, ama sadece egrep'e yönelt.
perl -e '.....
' < my_id_cert_and_ca_bundle.crt | egrep "Serial|Subject:|Not |Public-Key|^Cert|stdin|ssuer"
Özel anahtarın MD5 karma değerini kontrol etmek için aşağıdakileri yapabilirsiniz.
openssl rsa -noout -modulus -in privateKey.key | openssl md5
İşte orta düzey dosyalara dayanmayan awk tabanlı bir çözüm.
cat bundle.crt | awk '{
if ($0 == "-----BEGIN CERTIFICATE-----") cert=""
else if ($0 == "-----END CERTIFICATE-----") print cert
else cert=cert$0
}' | while read CERT; do
echo "$CERT" | base64 -d | openssl x509 -inform DER -text -noout
done
PEM bloklarını stdin'den okuyarak ve her bloğu tek base64 kodlu satıra birleştirerek çalışır. Daha sonra satırlar okunur, kodu çözülür ve DER kodlu sertifikalar olarak openssl'ye iletilir.
cat bundle.crt | awk -v cmd="openssl x509 -subject -noout" '/-----BEGIN/ { c = $0; next } c { c = c "\n" $0 } /-----END/ { print c|cmd; close(cmd); c = 0 }'
.
Buradaki deyimsel perl komut satırına bakmak istiyorum:
perl -ne "\$n++ if /BEGIN/; print if \$n == 1;" mysite.pem
Metin varsa, o zaman biraz daha sağlam bir ince ayar:
perl -ne "\$n++ if /^-----BEGIN CERTIFICATE-----\$/; print if \$n == 3 && /^-----BEGIN CERTIFICATE-----\$/.../^-----END CERTIFICATE-----\$/;" mysite.pem
Nnth sertifikasını almak için ikinci ifadede n değerinin değerini değiştirmeniz yeterlidir.
Zincirin tamamını görebilmenizin bir yolu (elbette Windows'ta) crt'ye çift tıklayıp Sertifika Yolu sekmesine bakmaktır. Sadece Orta veya Kök Sertifika olsa bile tüm zinciri gösterecektir. Ayrıntılar için aşağıdaki ekran görüntüsüne bakın. Windows'da değilseniz, Unix / Linux değişkenleri konusundaki bilgi eksikliğinden dolayı özür dilerim.
Not: Bu, ara sertifika yerel anahtar deponuzdaysa yanlış sonuçlara neden olabilir, Windows bunu otomatik olarak ekler ve yalnızca pakette ne olduğunu göstermez.
İlk emrini gözden kaçırdım ve senin de bir şeyin yok. Komutunuz şöyle görünmeli:
openssl x509 -in bundle.crt -noout -text
Kaynak: http://manpages.ubuntu.com/manpages/hardy/man1/x509.1ssl.html
openssl
bir sözdizimi hatası verdiğinden şikayet etmedi , ancak yalnızca paketteki ilk sertifikayı listelediğinden şikayet etti . İkincisi, iki çağrı işlevsel olarak aynıdır. Üçüncüsü ve muhtemelen en önemlisi, sizinki de, en azından benim için çalışmıyor; o da, paketteki yalnızca ilk sertifikayı listeler.