Cygal.net.pl

Systemy, Sieci i takie tam :)

Skrypt do sprawdzania daty wygasnięcia certyfikatów SSL

Poniżej prosty skrypt do sprawdzania daty ważności certyfikatów SSL. Skrypt działa również z hostami obsługującymi SNI czyli wiele stron SSL z jednego adresu IP.
Skrypt przystosowany został również zwracania uproszczonego wyniku, który możemy w prosty sposób wykorzystać z monitoringiem zabbix.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#!/bin/bash
# Author: Pawel Cygal
# Date: 2014-07-17
# INFO: This script is checking ssl certificate expiration date.
# You can use this script even on host with SNI support
# (multiple ssl sites running on single IP address)

############ USTAWIENIA i ZMIENNE GLOBALNE!!!###############
#
function usage(){
        echo "You don't specified domain name!!!!"
        echo "Please type domain name and port if is other than 443"
        echo "USAGE: ./check_cert.sh domainname.com or ./check_cert.sh domainname.com 6363"
        echo "for use with zabbix monitoring system. Use switch \"--zabbix\" as last parameter"
}

ISDIGIT='^[0-9]+$'

if [ $# -eq 3 ] ; then
        DOMAIN=$1
        PORT=$2
        SWITCH_ZABBIX=$3
        if ! [[ $PORT =~ $ISDIGIT ]] ; then
                usage
                exit 1;
        elif [ "$SWITCH_ZABBIX" != "--zabbix" ]; then
                usage
                exit 1;
        fi    
elif [ $# -eq 2 ]; then
        if [ "$2" == "--zabbix" ] ; then
                DOMAIN=$1
                SWITCH_ZABBIX=$2
        else
                DOMAIN=$1
                PORT=$2
                if ! [[ $PORT =~ $ISDIGIT ]] ; then
                        usage
                        exit 1;
                fi
        fi
elif [ $# -eq 1 ] ; then
        DOMAIN=$1
        PORT=443
elif [ $# -gt 3 ] ; then
        usage
        exit 1;
fi

DATE=`date +%F"-"%H%M%S%N`
TMPDIR="/tmp/"
FILE="cert_check_result_$DATE.txt"

#################FUNKCJE SKRYPTU!!!#######################
#
function check_cert_443(){
        PORT=443

        echo "logout" | openssl s_client -servername $DOMAIN -connect $DOMAIN:$PORT 2>/dev/null  | openssl x509 -noout -enddate 2>/dev/null >$TMPDIR$FILE

}

function check_cert_on_port(){
       
        echo "logout" | openssl s_client -servername $DOMAIN -connect $DOMAIN:$PORT 2>/dev/null | openssl x509 -noout -enddate 2>/dev/null >$TMPDIR$FILE

}

function clean_tmp_files(){
        rm -f  "$TMPDIR$FILE"
}

function check_date(){
        EXPIRED=`cat $TMPDIR$FILE | cut -d "=" -f 2`
        clean_tmp_files
        ESD=`date --date="$EXPIRED" +%s`
        CSD=`date +%s`
        CD=`date`
   DATE_TO_EXP=$(( ($ESD - $CSD) / 86400 ))
}

function show_full_raport(){
        if [ check_cert_on_port ] ; then
                echo "Domain: $DOMAIN"
                echo "Port: $PORT"
        elif [ check_cert_443 ] ; then
                PORT=443
                echo "Domain: $DOMAIN"
           echo "Port: $PORT"
        fi
               
        echo ""
        echo "-------------------------------------------------RAPORT---------------------------------------------------"
        echo "FULL_EXPITARION_DATE: $EXPIRED"  
        echo "FULL_CURRENT_DATE: $CD"
        echo "EPIRATION_SECONDS_DATE: $ESD  |  CURRENT_SECONDS_DATE: $CSD |  DAYS_TO_EXPIRATION:  $DATE_TO_EXP DAYS"
}

function zabbix(){
        echo "$DATE_TO_EXP"
}

function main(){
        if [[ -z "$DOMAIN" ]] && [[ -z "$PORT" ]] ; then
                usage
                exit 1;
        elif  [[ -n "$DOMAIN" ]] && [[ -n "$PORT" ]] ; then
                if [ "$SWITCH_ZABBIX" == "--zabbix" ] ; then
                        check_cert_on_port
                        check_date
                        zabbix
                else
                        check_cert_on_port
                        check_date
                        show_full_raport
                fi
                exit 0;
        elif [[ -n "$DOMAIN" ]] && [[ -z "$PORT" ]]; then
                if [ "$SWITCH_ZABBIX" == "--zabbix" ] ; then
          check_cert_443
          check_date
          zabbix
      else
                        check_cert_443
                        check_date
                        show_full_raport
                fi
                exit 0;
        fi
}

main

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *


Time limit is exhausted. Please reload CAPTCHA.