2025-04-21 08:48:38
скрипт комплексной проверки SSL-соединения
#!/bin/bash
# Список доменов для проверки
DOMAINS=("ur4uqu.com" "google.com")
# Путь к CA bundle (CentOS 7)
CA_BUNDLE="/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem"
# Проверка наличия CA bundle
if [[ ! -f "$CA_BUNDLE" ]]; then
echo "Ошибка: CA bundle не найден по пути $CA_BUNDLE"
echo "Установите пакет ca-certificates и выполните update-ca-trust extract"
exit 1
fi
# Функция проверки DNS (A/AAAA) и ping
check_dns_and_ping() {
local domain=$1
echo "=== DNS и доступность для $domain ==="
echo "A-записи:"
dig +short A "$domain" || echo " Ошибка при получении A-записей"
echo "AAAA-записи:"
dig +short AAAA "$domain" || echo " Ошибка при получении AAAA-записей"
echo
echo "Ping (4 пакета):"
ping -c 4 "$domain" || echo " Хост недоступен по ping"
echo
}
# Функция проверки CAA-записей
check_caa() {
local domain=$1
echo "=== Проверка CAA-записей для $domain ==="
local caa_records
caa_records=$(dig +short CAA "$domain")
if [[ -z "$caa_records" ]]; then
echo " CAA записи отсутствуют — любой CA может выдавать сертификаты"
else
echo " Найдены CAA записи:"
echo "$caa_records" | while read -r line; do
echo " $line"
done
fi
echo
}
# Функция получения и анализа SSL-сертификата
check_ssl_cert() {
local domain=$1
local port=443
echo "=== Проверка SSL-сертификата для $domain:$port ==="
# Получаем сертификат
cert=$(echo | openssl s_client -connect "${domain}:${port}" -servername "$domain" 2>/dev/null | \
sed -n '/-----BEGIN CERTIFICATE-----/,/-----END CERTIFICATE-----/p')
if [[ -z "$cert" ]]; then
echo " Ошибка: не удалось получить сертификат"
echo
return
fi
# Выводим основные данные сертификата
echo "$cert" | openssl x509 -noout -subject -issuer -dates -serial -fingerprint
# Извлекаем Issuer (CA)
issuer=$(echo "$cert" | openssl x509 -noout -issuer | sed 's/issuer= //')
echo " Центр сертификации (Issuer): $issuer"
# Проверяем цепочку доверия
verify_output=$(echo "$cert" | openssl verify -CAfile "$CA_BUNDLE" /dev/stdin 2>&1)
echo " Проверка цепочки доверия:"
echo " $verify_output"
# Сравнение CA с CAA
echo
echo " Проверка соответствия CA сертификата CAA-записям:"
caa_records=$(dig +short CAA "$domain")
if [[ -z "$caa_records" ]]; then
echo " CAA записи отсутствуют — любой CA может выдавать сертификаты"
else
echo " Найдены CAA записи:"
echo "$caa_records" | while read -r line; do
echo " $line"
done
ca_name=$(echo "$issuer" | grep -oP 'CN\s*=\s*\K[^,]+' || echo "")
if [[ -z "$ca_name" ]]; then
echo " Не удалось извлечь имя CA из Issuer"
else
if echo "$caa_records" | grep -qi "$ca_name"; then
echo " CA из сертификата ($ca_name) соответствует CAA-записям"
else
echo " Внимание: CA из сертификата ($ca_name) НЕ совпадает с CAA-записями"
fi
fi
fi
echo
}
# Функция проверки HTTPS соединения с помощью curl
check_https_curl() {
local domain=$1
echo "=== Проверка HTTPS соединения curl для $domain ==="
curl -vI --connect-timeout 10 --max-time 15 "https://${domain}" 2>&1 | \
grep -E "^(<|*|SSL|TLS|curl:|HTTP/)"
echo
}
# Основной цикл по доменам
for domain in "${DOMAINS[@]}"; do
echo "############################################################"
echo "Проверка домена: $domain"
echo "############################################################"
check_dns_and_ping "$domain"
check_caa "$domain"
check_ssl_cert "$domain"
check_https_curl "$domain"
done
Back to list