🔐 Скрипт для проверки данных SSL-сертификата

Приведенный ниже скрипт можно использовать для получения подробной информации о сертификате, и его можно использовать локально или удаленно.

Он называется ssl_validate.sh, но вы можете скопировать его содержимое в новый файл скрипта с любым именем, используйте chmod +x, чтобы сделать его исполняемым, а затем используйте его со следующим синтаксисом:

./ssl_validate.sh (или любое другое выбранное вами имя скрипта) server.company.com:443, где “server.company.com” – это полное доменное имя (FQDN) хоста, который вы хотите проверить, а 443 – это порт, который он прослушивает, связанный с SSL-сертификатом.

Вы должны убедиться, что у вас есть путь к этому серверу и порту, например, через правила брандмауэра.

Скрипт выдаст результат, подобный следующему, чтобы отобразить наиболее важные детали SSL-сертификата:

server.company.com:443 ; SSL ; CN: (CN сертификата SSL) ; Subject (Subject сертификата SSL) ; Issuer: (Issuer сертификата SSL) ; notBefore: (Дата создания SSL-сертификата) ; notAfter: (Дата истечения срока действия SSL-сертификата) ; DaysUntilExpiration: (Дни, оставшиеся до истечения срока действия SSL-сертификата) ; Errors: (Любые ошибки, связанные с SSL-сертификатом)

Собственно скрипт:

 delim=" ; "



export delim



serverport=${1}



export serverport



echo "#${serverport}"



date_today=$(date +%F)



datediff() {



d1=$(date -d "$1" +%s)



d2=$(date -d "$2" +%s)



echo $(( (d1 - d2) / 86400 )) days



}



export -f datediff



sslscan() {



local sp=${1}



tls_content=$(echo "Q" | openssl s_client -showcerts -connect ${serverport} 2>&1)



if [[ "$?" == 0 ]]; then



tls_errors=$(echo "${tls_content}" | grep -i error )



tls_cert_subject=$(echo "${tls_content}" | openssl x509 -noout -subject )



tls_cert_issuer=$(echo "${tls_content}" | openssl x509 -noout -issuer )



tls_cert_cn=$(echo "${tls_content}" | openssl x509 -noout -subject | sed -e "s/.*CN=([^/]*).*/1/" )



tls_cert_dates=$(echo "${tls_content}" | openssl x509 -noout -dates )



tls_cert_notafter_date=$(echo "${tls_cert_dates}" | grep notAfter |sed -e "s/notAfter=//" | tr -d 'n')



tls_cert_notbefore_date=$(echo "${tls_cert_dates}" | grep notBefor |sed -e "s/notBefore=//" | tr -d 'n')



tls_cert_datediff=$(datediff "${tls_cert_notafter_date}" "${date_today}")



echo -n "${serverport} ${delim} SSL"



echo -n " ${delim} CN:"



echo -n " ${tls_cert_cn}"



echo -n " ${delim} Subject:"



echo -n " ${tls_cert_subject}"



echo -n " ${delim} Issuer:"



echo -n " ${tls_cert_issuer}"



echo -n " ${delim} notBefore:"



echo -n " ${tls_cert_notbefore_date}"



echo -n " ${delim} notAfter:"



echo -n " ${tls_cert_notafter_date}"



echo -n " ${delim} DaysUntilExpiration:"



echo -n " ${tls_cert_datediff}"



echo -n " ${delim} Errors:"



echo -n " ${tls_errors}"



echo



else



tls_errors=$(echo "${tls_content}" | tr 'n' '/' | tr ' ' '_' )



status="ERROR: ${tls_errors}"



echo -n "${serverport} ${delim} ${status}"



echo



fi



}



export -f sslscan



timeout 3 bash -c "sslscan ${serverport}"



if [[ $? != 0 ]]; then



echo -n "${serverport} ${delim} ERROR: CONNECTION_TIMED_OUT"



echo



fi 

Заключение

Если возникнут вопросы или комментарии, прошу написать в поле комментариев.

см. также:



2021-09-14T13:07:01
Скрипты