Установка OpenSSL GOST Engine на CentOS 9 для Bitrix VM
Основные возможности GOST-engine
GOST-engine — это модуль для OpenSSL, реализующий поддержку российских криптографических алгоритмов в соответствии с ГОСТ Р 34.10-2012, ГОСТ Р 34.11-2012 и другими стандартами.
- Поддержка алгоритмов электронной подписи (GOST R 34.10-2001, GOST R 34.10-2012).
- Реализация хэш-функций (GOST R 34.11-94, GOST R 34.11-2012).
- Симметричное шифрование (GOST 28147-89, Кузнечик, Магма).
- Использование ГОСТ-алгоритмов в TLS-соединениях.
Официальная страница GOST-engine на GitHub: GOST-engine на GitHub.
Шаги по установке GOST-engine на CentOS 9
Ниже приведены пошаговые инструкции для установки GOST-engine на CentOS 9.
1. Установка зависимостей
dnf install -y gcc g++ make pkgconf git curl openssl-devel
2. Установка CMake
git clone https://github.com/Kitware/CMake.git CMake
cd CMake
LATEST_TAG=$(curl -s https://api.github.com/repos/Kitware/CMake/releases/latest | grep -oP '"tag_name": "\K[^"]+')
git checkout $LATEST_TAG
./bootstrap --prefix=/usr
make -j$(nproc)
make install
cd ..
cmake --version
3. Проверка версии OpenSSL
Убедитесь, что версия OpenSSL выше 3.0:
openssl version -v
4. Установка GOST-engine
git clone https://github.com/gost-engine/engine.git gost-engine
cd gost-engine/
LATEST_TAG=$(curl -s https://api.github.com/repos/gost-engine/engine/releases/latest | grep -oP '"tag_name": "\K[^"]+')
git checkout $LATEST_TAG
git submodule update --init
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr
cmake --build . --config Release
cmake --build . --target install --config Release
5. Настройка OpenSSL
Измените начало файла /etc/ssl/openssl.cnf
:
sed -i 's/openssl_conf = openssl_init/openssl_conf = openssl_def\n#openssl_conf = openssl_init/' /etc/ssl/openssl.cnf
Добавьте в конец файла:
# внизу добавляем
echo "[openssl_def]
engines = engine_section
[engine_section]
gost = gost_section
[gost_section]
engine_id = gost
dynamic_path = /usr/lib64/engines-3/gost.so
default_algorithms = ALL" >> /etc/ssl/openssl.cnf
6. Проверка установки
Проверьте доступные движки:
openssl engine
Проверьте доступные шифры GOST:
openssl engine -c | grep gost | tr -d '[]' | tr ',' '\n'
Генерируем с использованием госта и проверяем
openssl req -x509 -newkey gost2012_256 -pkeyopt paramset:A -nodes -keyout key.pem -out cert.pem -md_gost12_256
openssl x509 -in cert.pem -text -noout
Готово! Теперь GOST-engine установлен и настроен на вашем CentOS 9.
#!/bin/bash # Цвета для вывода GREEN='\033[0;32m' BLUE='\033[0;34m' RED='\033[0;31m' NC='\033[0m' # No Color # Минимальные требуемые версии MIN_CMAKE_VERSION="3.20.0" MIN_OPENSSL_VERSION="3.0.0" # Файл конфигурации OpenSSL OPENSSL_CONF="/etc/ssl/openssl.cnf" echo -e "${BLUE}=== Начало установки необходимых компонентов ===${NC}" # Установка базовых зависимостей echo -e "${GREEN}Установка зависимостей...${NC}" dnf install -y \ gcc \ g++ \ make \ pkgconf \ git \ curl \ openssl-devel # Установка CMake echo -e "${GREEN}Установка CMake...${NC}" if [ -d "CMake" ]; then echo -e "${GREEN}Удаление существующего каталога CMake...${NC}" rm -rf CMake fi git clone https://github.com/Kitware/CMake.git CMake cd CMake || exit LATEST_TAG=$(curl -s https://api.github.com/repos/Kitware/CMake/releases/latest | grep -oP '"tag_name": "\K[^"]+') git checkout "$LATEST_TAG" ./bootstrap --prefix=/usr make -j$(nproc) make install cd .. # Функция сравнения версий version_compare() { if [[ $1 == $2 ]]; then return 0 fi local IFS=. local i ver1=($1) ver2=($2) for ((i=${#ver1[@]}; i<${#ver2[@]}; i++)); do ver1[i]=0 done for ((i=0; i<${#ver1[@]}; i++)); do if [[ -z ${ver2[i]} ]]; then ver2[i]=0 fi if ((10#${ver1[i]} > 10#${ver2[i]})); then return 1 fi if ((10#${ver1[i]} < 10#${ver2[i]})); then return 2 fi done return 0 } # Проверка версии CMake echo -e "${BLUE}Проверка версий:${NC}" CMAKE_VERSION=$(cmake --version | head -n1 | cut -d" " -f3) echo -e "Установленная версия CMake: $CMAKE_VERSION" version_compare "$CMAKE_VERSION" "$MIN_CMAKE_VERSION" if [ $? -eq 2 ]; then echo -e "${RED}Ошибка: Версия CMake ($CMAKE_VERSION) ниже минимально требуемой ($MIN_CMAKE_VERSION)${NC}" exit 1 else echo -e "${GREEN}Версия CMake соответствует требованиям${NC}" fi # Проверка версии OpenSSL OPENSSL_VERSION=$(openssl version | cut -d" " -f2) echo -e "Установленная версия OpenSSL: $OPENSSL_VERSION" version_compare "$OPENSSL_VERSION" "$MIN_OPENSSL_VERSION" if [ $? -eq 2 ]; then echo -e "${RED}Ошибка: Версия OpenSSL ($OPENSSL_VERSION) ниже минимально требуемой ($MIN_OPENSSL_VERSION)${NC}" exit 1 else echo -e "${GREEN}Версия OpenSSL соответствует требованиям${NC}" fi # Установка GOST-engine echo -e "${GREEN}Установка GOST-engine...${NC}" if [ -d "gost-engine" ]; then echo -e "${GREEN}Удаление существующего каталога gost-engine...${NC}" rm -rf gost-engine fi git clone https://github.com/gost-engine/engine.git gost-engine cd gost-engine || exit LATEST_TAG=$(curl -s https://api.github.com/repos/gost-engine/engine/releases/latest | grep -oP '"tag_name": "\K[^"]+') git checkout "$LATEST_TAG" git submodule update --init if [ -d "build" ]; then echo -e "${GREEN}Удаление существующего каталога build...${NC}" rm -rf build fi mkdir build && cd build || exit cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr cmake --build . --config Release cmake --build . --target install --config Release cd ../.. # Получение пути к директории engines ENGINES_DIR=$(openssl version -e | grep ENGINESDIR | cut -d'"' -f2) GOST_SO_PATH="${ENGINES_DIR}/gost.so" echo -e "${GREEN}Определен путь к gost.so: $GOST_SO_PATH${NC}" # Конфигурация OpenSSL echo -e "${GREEN}Настройка конфигурации OpenSSL...${NC}" # Проверка наличия изменений в начале файла if grep -q "openssl_conf = openssl_def" "$OPENSSL_CONF"; then echo -e "${GREEN}Начальная конфигурация уже изменена, пропускаем...${NC}" else cp "$OPENSSL_CONF" "${OPENSSL_CONF}_default" sed -i 's/openssl_conf = openssl_init/openssl_conf = openssl_def\n#openssl_conf = openssl_init/' "$OPENSSL_CONF" echo -e "${GREEN}Начальная конфигурация обновлена${NC}" fi # Проверка наличия секции GOST в конце файла if grep -q "\[openssl_def\]" "$OPENSSL_CONF" && grep -q "gost = gost_section" "$OPENSSL_CONF"; then echo -e "${GREEN}Конфигурация GOST уже присутствует, пропускаем...${NC}" else # Добавление конфигурации GOST с динамическим путем cat << EOF >> "$OPENSSL_CONF" [openssl_def] engines = engine_section [engine_section] gost = gost_section [gost_section] engine_id = gost dynamic_path = $GOST_SO_PATH default_algorithms = ALL EOF echo -e "${GREEN}Конфигурация GOST добавлена${NC}" fi # Проверка работы GOST engine echo -e "${BLUE}Проверка GOST engine:${NC}" openssl engine | grep gost echo -e "${BLUE}Поддерживаемые алгоритмы:${NC}" openssl engine -c | grep gost | tr -d '[]' | tr ',' '\n' # Создание тестового сертификата echo -e "${GREEN}Создание тестового сертификата с GOST...${NC}" openssl req -x509 \ -newkey gost2012_256 \ -pkeyopt paramset:A \ -nodes \ -keyout key.pem \ -out cert.pem \ -md_gost12_256 # Вывод информации о сертификате echo -e "${BLUE}Информация о сертификате:${NC}" openssl x509 -in cert.pem -text -noout echo -e "${BLUE}=== Установка завершена успешно ===${NC}"
Оставить комментарий