#!/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

[file-name 000112_2025-04-21_08-48-38.txt]