인증서 번들 .crt 파일이 있습니다.
하고 openssl x509 -in bundle.crt -text -noout
만 것은 루트 인증서를 보여줍니다.
다른 모든 인증서는 어떻게 볼 수 있습니까?
답변
http://comments.gmane.org/gmane.comp.encryption.openssl.user/43587 은이 단일 라이너를 제안합니다.
openssl crl2pkcs7 -nocrl -certfile CHAINED.pem | openssl pkcs7 -print_certs -text -noout
그것은 실제로 나를 위해 일했지만 세부 사항을 이해하지 못하므로주의 사항이 있는지 말할 수 없습니다.
답변
자바 keytool
는 트릭을 수행합니다.
keytool -printcert -v -file <certs.crt>
주석 :
Windows 더블 클릭이 작동하지 않습니다. Windows는 키 저장소에서 첫 번째 인증서 만 읽고 기본 제공 인증서 저장소에서 신뢰 체인을 자동으로 확장합니다.
결과 :
.crt
파일 의 첫 번째 인증서 이외의 모든 것은 표시되지 않습니다.crt
파일에 있는 것과 다른 신뢰 체인이 표시 될 수 있습니다 . 잘못된 결론으로 이어질 수 있습니다.
답변
다음은 이 FAQ 를 알려준 이 펄 스크립트 매우 강하게 나에게 제안, openssl
취급에 대한 네이티브 지원이없는 N 번째 번들에 인증서를하고, 그 대신 우리는 서로를 공급하기 전에 입력을 -와 – 주사위를 슬라이스 몇 가지 도구를 사용해야합니다 에 인증서 openssl
. 위에 링크 된 Nick Burch의 스크립트에서 자유롭게 수정 된이 펄 스크립트는 다음과 같은 역할을합니다.
#!/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;
답변
파일에있는 모든 인증서의 요약을 표시하는 Oneliner
openssl crl2pkcs7 -nocrl -certfile CHAINED.pem | openssl pkcs7 -print_certs -noout
(다른 답변에서 언급 된 비슷한 특공대이지만 –text 옵션없이 출력이 짧습니다).
예:
$ 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
답변
이것은 예쁘거나 우아하지는 않지만 Linux에서 bash를 사용하고 ca-cert 번들 파일의 PEM 형식 블록을 사용하여 빠르고 효과적이었습니다.
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
한 줄에 모두 넣고 openssl 옵션을 조정하십시오. 나는 이것을 위해 더 우아한 해결책이 있기를 정말로 원하지만,이 경우 더 우아한 해결책을 찾는 것은 우아하지 않은 것을 해킹하는 것보다 더 많은 시간이 걸렸을 것이라고 생각합니다.
답변
awk 기반 솔루션이 없기 때문에 :
$ 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
첫 번째 명령은 BEGIN 및 END 줄을 찾아 번들을 인증서로 분할합니다. 두 번째 명령은 추출 된 인증서를 반복하여 보여줍니다.
답변
bash에서는 일반적으로 한 줄의 코드 만 필요합니다 🙂
tfile=$( mktemp -u ) && \
csplit -z -q -f "$tfile" bundle.crt '/----BEGIN CERTIFICATE-----/' '{*}' && \
find "${tfile%/*}" -name "${tfile##*/}*" -exec openssl x509 -noout -subject -in "{}" \; -delete