TLS/SSL 인증서 만료 날짜를 확인하는 스크립트는 google.com에서는 작동하지만 https://google.com에서는 작동하지 않습니다.

TLS/SSL 인증서 만료 날짜를 확인하는 스크립트는 google.com에서는 작동하지만 https://google.com에서는 작동하지 않습니다.

다음 코드를 작성했는데 출력은 다음과 같습니다.

  • SSL 인증서는 언제 만료되나요?
  • 브라우저 상태 코드

문제는 내가 삽입하면https://www.google.com또는http://www.google.com오류가 발생합니다. google.com을 사용하려고 하면 제대로 작동합니다.

어떤 아이디어가 있나요?


read -p "Please insert the url: " url

certificate_file=$(mktemp)
echo -n | openssl s_client -servername "$url" -connect "$url":443 2>/dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > $certificate_file
date=$(openssl x509 -in $certificate_file -enddate -noout | sed "s/.*=\(.*\)/\1/")
date_s=$(date -d "${date}" +%s)
now_s=$(date -d now +%s)
date_diff=$(( (date_s - now_s) / 86400 ))

if [[ "$date_diff" -gt "1" ]]; then

echo "Certificate expires in: $date_diff days"

else
    echo "$url does not use SSL Certificates"

fi

response=$(curl -s -w "%{http_code}" $url)

http_code=$(tail -n1 <<< "$response") 

if [[ "$http_code" == "200" ]]; then

    echo "OK for: $http_code"

elif [[ "http_code" != "200" ]]; then
    echo "HTTP code: $http_code"

elif [[ "http_code" == "408" ]]; then
    echo "Request Timeout"

fi

오류 코드는 다음과 같습니다.

Please insert the url: https:/www.yahoo.com   
unable to load certificate
140381863350720:error:0909006C:PEM routines:get_name:no start line:../crypto/pem/pem_lib.c:745:Expecting: TRUSTED CERTIFICATE
https:/www.yahoo.com does not use SSL Certificates
HTTP code: Regional Redirect302

답변1

-connect로고가 사용되지만 openssl s_clientURL host:port을 제공합니다. 따라서 openssl s_client다음과 같은 오류로 인해 명령이 실패합니다.

s_client: -connect argument or target parameter malformed or ambiguous

하지만 이 오류 메시지를 삭제하면 2>/dev/null출력에 표시되지 않습니다. 명령이 실패 하면 openssl s_client데이터가 없습니다 $certificate_file. 이로 인해 Expecting: TRUSTED CERTIFICATE출력에 표시되는 오류가 발생합니다.

$url이 문제를 해결하려면 호스트 이름을 매개변수로 사용하기 전에 호스트 이름으로 변환해야 합니다 -connect.

관련 정보