#!/bin/bash # Этот скрипт автоматизирует процесс создания инфраструктуры центра сертификации (ЦС), # включая создание директорий, генерацию ключей и сертификатов, # а также настройку конфигурационных файлов для корневого и промежуточного ЦА. # # Скрипт выполняет следующие основные действия: # 1. Создает необходимые директории для хранения сертификатов, ключей и других файлов ЦС. # 2. Генерирует RSA ключи для корневого и промежуточного ЦА с шифрованием AES-256. # 3. Создает самоподписанный корневой сертификат и CSR (Certificate Signing Request) # для промежуточного ЦА. # 4. Подписывает сертификат промежуточного ЦА корневым ЦА. # 5. Создает цепочку сертификатов, включающую корневой и промежуточный сертификаты. # 6. Проверяет целостность созданного сертификата промежуточного ЦА с помощью корневого ЦА. # # Для использования скрипта рекомендуется запускать его с правами суперпользователя (root), # так как он создает файлы и директории в защищенных системных папках. #set -e #trap 'echo "Error: Script execution failed"; exit 1' ERR source ./config.sh # Detect language and define error function LANGUAGE="en" if [[ "$LANG" == ru* || "$LANG" == *ru_* || "$LC_ALL" == ru* || "$LC_ALL" == *ru_* ]]; then LANGUAGE="ru" fi msg() { local en_msg="$1" local ru_msg="$2" if [[ "$LANGUAGE" == "ru" ]]; then echo "$ru_msg" else echo "$en_msg" fi exit 1 } # Проверка переменной VAL_DAYS if [[ -z "$VAL_DAYS" || ! "$VAL_DAYS" =~ ^[0-9]+$ || "$VAL_DAYS" -le 0 ]]; then msg "Error: VAL_DAYS must be a positive integer" "Ошибка: Переменная VAL_DAYS должна быть положительным целым числом" fi if ! mkdir -m 700 "$PATH_TO_CA"; then msg "Error: Failed to create directory $PATH_TO_CA" "Ошибка: Не удалось создать директорию $PATH_TO_CA" fi # Перейти в директорию CA или выйти с ошибкой, если это не удалось cd "$PATH_TO_CA" || { msg "Error: Failed to change directory to $PATH_TO_CA" "Ошибка: Не удалось перейти в каталог $PATH_TO_CA"; } # Список каталогов, для которых создается структура DIRECTORIES=("root") # Создание необходимых директорий и настройка их прав доступа for dir in "${DIRECTORIES[@]}"; do # Создание поддиректорий в каждой директории из списка mkdir -p "$dir/certs" "$dir/crl" "$dir/newcerts" "$dir/private" "$dir/csr" chmod 700 "$dir/private" # Создание файлов базы CA touch "$dir/index.txt" echo -n 100000 >"$dir/serial" # Настройка файла для CRL (список отозванных сертификатов) echo -n 100000 >"$dir/crlnumber" done # Создание конфигурационного файла для корневого ЦА cat >root/sertissuer.conf <