fix
This commit is contained in:
@@ -0,0 +1,110 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Цветовая разметка для терминала
|
||||
GREEN='\033[0;32m'
|
||||
RED='\033[0;31m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0;60m' # Сброс цвета
|
||||
|
||||
# Массив со строго заданными именами ваших файлов
|
||||
TARGET_CERTS=("root_ca.crt" "intermediate_ca.crt" "issuing.crt")
|
||||
|
||||
echo -e "${BLUE}==================================================${NC}"
|
||||
echo -e "${BLUE} АНАЛИЗ И ПРОВЕРКА СЕРТИФИКАТОВ ${NC}"
|
||||
echo -e "${BLUE}==================================================${NC}"
|
||||
|
||||
for cert in "${TARGET_CERTS[@]}"; do
|
||||
# Если конкретного файла нет — просто идём к следующему
|
||||
if [ ! -f "$cert" ]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo -e "${YELLOW}--------------------------------------------------${NC}"
|
||||
echo -e "Файл: ${GREEN}$cert${NC}"
|
||||
echo -e "${YELLOW}--------------------------------------------------${NC}"
|
||||
|
||||
# Извлекаем основные метаданные
|
||||
SUBJECT=$(openssl x509 -in "$cert" -noout -subject | sed 's/subject=//')
|
||||
ISSUER=$(openssl x509 -in "$cert" -noout -issuer | sed 's/issuer=//')
|
||||
END_DATE=$(openssl x509 -in "$cert" -noout -enddate | sed 's/notAfter=//')
|
||||
|
||||
echo -e "${BLUE}Имя (Subject):${NC} $SUBJECT"
|
||||
echo -e "${BLUE}Издатель (Issuer):${NC} $ISSUER"
|
||||
echo -e "${BLUE}Действует до:${NC} $END_DATE"
|
||||
|
||||
# Проверяем тип сертификата (CA или конечный)
|
||||
IS_CA=$(openssl x509 -in "$cert" -text -noout | grep -E "CA:TRUE|CA:FALSE")
|
||||
if [[ "$IS_CA" == *"CA:TRUE"* ]]; then
|
||||
# Вытаскиваем строку Basic Constraints и очищаем от пробелов
|
||||
PATHLEN_LINE=$(openssl x509 -in "$cert" -text -noout | grep -A1 "Basic Constraints" | tail -n 1 | sed 's/^[ \t]*//')
|
||||
|
||||
# Переводим технический текст на понятный русский язык
|
||||
if [[ "$PATHLEN_LINE" == *"pathlen:0"* ]]; then
|
||||
RU_PATHLEN=" [Выпуск CA недоступен]"
|
||||
elif [[ "$PATHLEN_LINE" == *"pathlen:"* ]]; then
|
||||
# Вырезаем цифру лимита (например, pathlen:1)
|
||||
NUM=$(echo "$PATHLEN_LINE" | grep -o -E '[0-9]+')
|
||||
RU_PATHLEN=" [Допустима цепочка СА из $NUM сертификатов]"
|
||||
else
|
||||
# Если параметр pathlen вообще отсутствует в Basic Constraints
|
||||
RU_PATHLEN=" [Не имеет ограничений по выпуску CA]"
|
||||
fi
|
||||
|
||||
echo -e "${BLUE}Тип:${NC} Удостоверяющий центр (CA)$RU_PATHLEN"
|
||||
|
||||
|
||||
# Вывод Name Constraints для промежуточных CA
|
||||
CONSTRAINTS=$(openssl x509 -in "$cert" -text -noout | awk '/Permitted:/ {flag=1; next} /X509v3|Signature Algorithm:/ {flag=0} flag {print}' | sed 's/^[ \t]*//' | sed 's/^/ /')
|
||||
if [ ! -z "$CONSTRAINTS" ]; then
|
||||
echo -e "${BLUE}Ограничения имён (Name Constraints):${NC}"
|
||||
echo "$CONSTRAINTS"
|
||||
fi
|
||||
else
|
||||
echo -e "${BLUE}Тип:${NC} Конечный SSL-сертификат (End-Entity)"
|
||||
|
||||
# Вывод SAN для конечного сертификата
|
||||
SAN_DOMAINS=$(openssl x509 -in "$cert" -text -noout | awk '/Subject Alternative Name:/ {flag=1; next} /X509v3|Signature Algorithm:/ {flag=0} flag {print}' | sed 's/^[ \t]*//' | sed 's/, /\n/g' | sed 's/^/ /')
|
||||
if [ ! -z "$SAN_DOMAINS" ]; then
|
||||
echo -e "${BLUE}Защищаемые домены и IP (SAN):${NC}"
|
||||
echo "$SAN_DOMAINS"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
echo ""
|
||||
echo -e "${BLUE}==================================================${NC}"
|
||||
echo -e "${BLUE} ПРОВЕРКА ЦЕПОЧКИ ВЕРИФИКАЦИИ ${NC}"
|
||||
echo -e "${BLUE}==================================================${NC}"
|
||||
|
||||
ROOT_FILE="root_ca.crt"
|
||||
INTERMEDIATE_FILE="intermediate_ca.crt"
|
||||
ISSUING_FILE="issuing.crt"
|
||||
|
||||
# 1. Проверка Intermediate CA через Root CA
|
||||
if [ -f "$ROOT_FILE" ] && [ -f "$INTERMEDIATE_FILE" ]; then
|
||||
echo -n "Проверка Intermediate CA корневым (Root): "
|
||||
VERIFY_INT=$(openssl verify -CAfile "$ROOT_FILE" "$INTERMEDIATE_FILE" 2>&1)
|
||||
if [[ "$VERIFY_INT" == *"OK"* ]]; then
|
||||
echo -e "${GREEN}УСПЕШНО (OK)${NC}"
|
||||
else
|
||||
echo -e "${RED}ОШИБКА\n$VERIFY_INT${NC}"
|
||||
fi
|
||||
fi
|
||||
|
||||
# 2. Проверка конечного SSL (issuing.crt) БЕЗ БАНДЛА (через -untrusted)
|
||||
if [ -f "$ROOT_FILE" ] && [ -f "$INTERMEDIATE_FILE" ] && [ -f "$ISSUING_FILE" ]; then
|
||||
echo -n "Проверка конечного SSL полной цепочкой (Root+Int): "
|
||||
VERIFY_ISS=$(openssl verify -CAfile "$ROOT_FILE" -untrusted "$INTERMEDIATE_FILE" "$ISSUING_FILE" 2>&1)
|
||||
|
||||
if [[ "$VERIFY_ISS" == *"OK"* ]]; then
|
||||
echo -e "${GREEN}УСПЕШНО (OK)${NC}"
|
||||
else
|
||||
echo -e "${RED}ОШИБКА${NC}"
|
||||
echo "$VERIFY_ISS"
|
||||
fi
|
||||
fi
|
||||
|
||||
echo -e "${BLUE}==================================================${NC}"
|
||||
|
||||
Reference in New Issue
Block a user