2017-03-18 4 views
-1

여러 인증서 파일이 제공됩니다. "cert1.crt", "cert2.crt"등 여러 개의 CRL 목록, "list1.crl", "list2.crl"등이 있습니다. rootCA 또는 다른 유형의 파일은 제공되지 않습니다. 내 임무는 취소되지 않은 인증서를 찾는 것입니다. "확인"명령에 대한 광범위한 검색에도 불구하고 나는 적어도 단서를 제공 할 명령이나 절차를 찾지 못했습니다. 결국, 나는 각각다양한 CRL 파일에 대한 SSL 인증서 확인

for((i=1;i<9;i++)) 
do 
echo $i 
fileIn="crl"$i".crl" 
#serial is manually c/p from each .crt file 
serial="1319447396" 
OUTPUT="$(openssl crl -in $fileIn -noout -text | grep $serial)" 
echo $OUTPUT 
done 

내가 수동으로 한 번에 하나를 할 수있는이 방법 파일가 .crt 나를 수동으로 일련 번호를 테스트 할 수 있도록 일부 bash는 스크립트 곡예 비행을 관리하지만, 작은 만 작동합니다 파일 수 (현재 9 개). 수십 개의 파일로 인해 귀찮고 비효율적 일 수 있습니다. 100+ 이상하면 불가능합니다.

.crl에 대한 .crt의 유효성을 검사하는 "스마트 한"방법이 궁금합니다. 아니면 적어도 각 .crt를 수동으로 확인할 필요가 없도록 스크립트를 작성하는 방법이 있습니까? 지금은 스크립팅 지식을 뛰어 넘습니다. 이런 일이 존재하는 경우

그래서 의사에, 나는 흥분 될 것이다 : detailed in this guide와 같이 일반적으로

openssl x509 -verify cert1.cert -crl_list list8.crl 
+0

https://raymii.org/s/articles/OpenSSL_manually_verify_a_certificate_against_a_CRL.html –

+0

감사합니다, 휴고 : 여기 내 스크립트입니다. 나는 내가 질문을하기 전에 할 수있는 한 많이 검색하려고 시도했기 때문에이 글을 잘 알고있다. 그러나 검증 방법이이 질문에 적용 할 수 없기 때문에 나의 질문에 대한 해결책을 제시하지 못했다. 손에 문제. 내 게시물에서 언급했듯이 내가 언급 한 사이트에서 제공 한 인증 방법에 사용되는 CA 파일을 제공하지 않았습니다.나는 그것을 해결하기 위해 OpenSSL 방법을 찾았지만, 부족한 것은 그렇게하기위한 배쉬 명령 지식이다. – Gishas

답변

2

는, 그래, 각 인증서는 CRL에 대해 확인합니다.

그러나 사실 각 crl은 해지 된 인증서 일련 번호의 간단한 목록입니다.

openssl crl -inform DER -text -noout -in mycrl.crl 

CRL을 Asuming하는 (필요에 따라 적응) DER 형태 인 : CRL에 포함
목록으로 확장 될 수있다.

openssl crl -inform DER -text -noout -in mycrl.crl > mycrl.crl.txt 

아웃 된 파일 만 Serial Number: 라인 줄일 수 :

  1. 처럼, 텍스트 파일로 각 (모든) CRL을 확장합니다. 호출

    mycrt=$(openssl x509 -in mycrt.com.crt -serial -noout) 
    mycrt=${mycrt#*=} 
    
  2. 단계 한 (하나는 인증서 일치하는 경우 해지)에서 모든 텍스트 파일의 일련 번호를 grep을

  3. 는 인증서의 텍스트 확장에서 일련 번호를 가져옵니다 grep을합니다 :

    if grep -rl "$mycrt" *.crl.txt 2>/dev/null; then 
        echo "the certificate has been revoked" 
    fi 
    

전체 스크립트를

#!/bin/bash 

# Create (if they don't exist) files for all the crl given. 
for crl in *.crl; do 
    if [[ ! -e "$crl.txt" ]]; then 
    openssl crl -inform DER -text -noout -in "$crl" | 
     awk -F ': ' '/Serial Number:/{print $2}'> "$crl.txt" 
    fi 
done 

# Process all certificates 
for crt in *.crt; do 
    mycrt=$(openssl x509 -in "$crt" -serial -noout) 
    mycrt=${mycrt#*=} 
    if grep -rl "$mycrt" *.crl.txt; then 
     echo "Certificate $crt has been revoked" 
    fi 
done 
+0

감사합니다. 그것은 작동합니다. (btw. 내 모든 인증서가 취소되었음을 알립니다.) 솔직히, 당신은 나에게 새로운 명령을 너무 많이 소개했기 때문에 이것이 어떻게 작동하는지조차 알지 못합니다. 혼자서는 배타적 인 배쉬 튜토리얼을 공부하는 데 며칠이 걸릴 것입니다. 아아아, 지금은 처분 할 시간이 없어서 정말 많은 도움이되었습니다. 당신은 훌륭한 일을 설명하고, 시간 내 주셔서 감사합니다! – Gishas

0

마지막으로 최적이 아닌 방식으로이 문제를 해결할 수 있었지만 bash 지식은 훨씬 적습니다.

#!/bin/bash 

for((j=1;j<10;j++)) 
do 
indicator=0 
cert="cert"$j".crt" 
for((i=1;i<9;i++)) 
do 
infile="crl"$i".crl" 
SERIAL="$(openssl x509 -noout -text -in $cert | grep Serial | cut -d 'x' -f 2 | cut -d ')' -f 1)" 
OUTPUT="$(openssl crl -inform DER -in $infile -noout -text | grep $SERIAL)" 
if [ -n $OUTPUT ] 
then ((indicator++)) 
fi 
done 
echo $cert 
if [ $indicator == 0 ] 
then echo "not revoked" 
else 
echo "revoked" 
fi 
done 
+0

SERIAL (소문자) 대 출력 (대문자)의 대소 문자를 확인하십시오. 당신은 그들을 평등하게해야합니다. 'SERIAL = $ {SERIAL ^^}'이면 충분합니다. – sorontar

+0

여기에서는'm * n' (m = crl 수, n = crt 수)에 대한 명령을 실행합니다. 내 코드에서는 crl이 모두 한 번만 처리 된 다음 각 crt에 대해 하나의 grep 명령이 처리됩니다. crt의 수가 적기 때문에 그다지 중요하지 않지만 많은 crt와 crl은 스크립트를 매우 느리게 만듭니다. – sorontar

+0

와우, 고마워, sorontar! 스크립트가 훨씬 뛰어 났지만 bash에 대한 현재 지식을 통해 필자는보다 적은 명령을 통해 내 방식대로 작업하는 것이 더 편리하다는 것을 알게되었습니다. 나는 다음주에 내 암호 시험을 준비하면서 시간을 많이 보내고 있습니다. 그래서 나는 저에게 효과가있는 것을 찾아서 계속해서 다른 문제를 연구해야합니다. 다시 한 번 고마워, 당신은 큰 도움이되었고 나는 당신의 코드를 정말 좋아합니다! – Gishas