πŸ” Π‘ΠΊΡ€ΠΈΠΏΡ‚ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… 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
Π‘ΠΊΡ€ΠΈΠΏΡ‚Ρ‹

Π”Ρ€ΡƒΠ·ΡŒΡ ΠΏΠΎΠΌΠΎΠ³ΠΈΡ‚Π΅ этому ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Ρƒ ΡΡ‚Π°Ρ‚ΡŒ доступнСС Π² ΡΠΎΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… сСтях.

НС ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈ ΠΌΠΈΠΌΠΎ ΠΆΠΌΠ°ΠΊΠ½ΠΈ ΠΏΠΎ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠΌΡƒ Ρ‚ΠΎ Π΅Ρ‰Π΅ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π΅Π½!