다음 코드를 작성했는데 출력은 다음과 같습니다.
- 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_client
URL 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
.