Certificate Monitoring and Alerts

Certificate Monitoring and Alerts

Automated monitoring detects certificate issues before expiration or configuration problems affect users. Implement multiple monitoring layers for comprehensive coverage.

Monitoring setup:

#!/bin/bash
# Certificate expiration monitoring script

check_cert_expiry() {
    local domain=$1
    local port=${2:-443}
    local warning_days=${3:-30}
    
    expiry_date=$(echo | openssl s_client -servername "$domain" -connect "$domain:$port" 2>/dev/null | openssl x509 -noout -enddate | cut -d= -f2)
    expiry_epoch=$(date -d "$expiry_date" +%s)
    current_epoch=$(date +%s)
    days_left=$(( (expiry_epoch - current_epoch) / 86400 ))
    
    if [ $days_left -lt $warning_days ]; then
        echo "WARNING: $domain certificate expires in $days_left days"
        return 1
    fi
    return 0
}

# Monitor multiple domains
domains="example.com api.example.com secure.example.com"
for domain in $domains; do
    if ! check_cert_expiry "$domain" 443 30; then
        # Send alert
        mail -s "Certificate expiration warning: $domain" [email protected] <<< "Certificate for $domain expires soon"
    fi
done

# Integration with monitoring systems
# Nagios/Icinga plugin example
cat > /usr/lib/nagios/plugins/check_ssl_cert <<'EOF'
#!/bin/bash
# Nagios plugin for SSL certificate monitoring
# Returns: 0=OK, 1=WARNING, 2=CRITICAL, 3=UNKNOWN

DOMAIN=$1
WARNING_DAYS=${2:-30}
CRITICAL_DAYS=${3:-7}

# ... (certificate check logic)

if [ $days_left -lt $CRITICAL_DAYS ]; then
    echo "CRITICAL: Certificate expires in $days_left days"
    exit 2
elif [ $days_left -lt $WARNING_DAYS ]; then
    echo "WARNING: Certificate expires in $days_left days"
    exit 1
else
    echo "OK: Certificate valid for $days_left days"
    exit 0
fi
EOF