Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Limbombom  
#1 Оставлено : 22 августа 2025 г. 15:26:08(UTC)
Limbombom

Статус: Новичок

Группы: Участники
Зарегистрирован: 13.08.2025(UTC)
Сообщений: 4
Беларусь
Откуда: Могилев

Добрый день. Развернул на centOS 9 КриптоПро CSP 5.0, а так же подключил библиотеку phpcades. В процессе формирования подписи тестовым скриптом столкнулся с ошибкой A certificate chain could not be built to a trusted root authority.

Список импортированных сертификатов из pfx:
Код:
1-------
Issuer              : CN=Root CA, O=My Organization, C=RU, E=admin@example.com
Subject             : CN=Root CA, O=My Organization, C=RU, E=admin@example.com
Serial              : 0x3DD45948598679F0B8497059506F3EBC874B6707
SHA1 Thumbprint     : 1c6c86fc85c086ffc8450d96b45dd167ad3f522e
SubjectKeyID        : 1506955525d391021e68cfafee2a7885f8640505
Signature Algorithm : sha256RSA
PublicKey Algorithm : RSA (2048 bits)
Not valid before    : 22/08/2025 11:37:18 UTC
Not valid after     : 20/08/2035 11:37:18 UTC
PrivateKey Link     : No                  
2-------
Issuer              : CN=Root CA, O=My Organization, C=RU, E=admin@example.com
Subject             : CN=Intermediate CA, O=My Organization, C=RU, E=intermediate@example.com
Serial              : 0x20D438486944D01ACBDAE4DFE53A559F2FB6DBF2
SHA1 Thumbprint     : 2ad50db69120d2e36d4a48bac999697669b8e365
SubjectKeyID        : ef07a3bbd84ab779719d81281c4547a215c0f118
Signature Algorithm : sha256RSA
PublicKey Algorithm : RSA (2048 bits)
Not valid before    : 22/08/2025 11:37:19 UTC
Not valid after     : 21/08/2030 11:37:19 UTC
PrivateKey Link     : No                  
3-------
Issuer              : CN=Intermediate CA, O=My Organization, C=RU, E=intermediate@example.com
Subject             : CN=user@example.com, O=My Organization, C=RU, E=user@example.com
Serial              : 0x0EABD2455AD35FA7CBC9B171894485F2958A637E
SHA1 Thumbprint     : 1d72770f8cda92c4490d4156026a719f149882c1
SubjectKeyID        : cf199eee945587baecf77633696f019d7deef46f
Signature Algorithm : sha256RSA
PublicKey Algorithm : RSA (2048 bits)
Not valid before    : 22/08/2025 11:37:21 UTC
Not valid after     : 22/08/2026 11:37:21 UTC
PrivateKey Link     : Yes                 
Container           : HDIMAGE\\pfx-0712.000\8535
Provider Name       : Crypto-Pro Enhanced RSA and AES KC1 CSP
Provider Info       : Provider Type: 24, Key Spec: 1, Flags: 0x0
Extended Key Usage  : 1.3.6.1.5.5.7.3.2 Проверка подлинности клиента
                      1.3.6.1.5.5.7.3.4 Защищенная электронная почта
4-------
Issuer              : CN=Intermediate CA, O=My Organization, C=RU, E=intermediate@example.com
Subject             : CN=user@example.com, O=My Organization, C=RU, E=user@example.com
Serial              : 0x0EABD2455AD35FA7CBC9B171894485F2958A637E
SHA1 Thumbprint     : 1d72770f8cda92c4490d4156026a719f149882c1
SubjectKeyID        : cf199eee945587baecf77633696f019d7deef46f
Signature Algorithm : sha256RSA
PublicKey Algorithm : RSA (2048 bits)
Not valid before    : 22/08/2025 11:37:21 UTC
Not valid after     : 22/08/2026 11:37:21 UTC
PrivateKey Link     : Yes                 
Container           : HDIMAGE\\pfx-0712.000\8535
Provider Name       : Crypto-Pro Enhanced RSA and AES KC1 CSP
Provider Info       : Provider Type: 24, Key Spec: 1, Flags: 0x0
Extended Key Usage  : 1.3.6.1.5.5.7.3.2 Проверка подлинности клиента
                      1.3.6.1.5.5.7.3.4 Защищенная электронная почта
=============================================================================



сертификаты формирую тестовые с помощью скрипта
Код:
#!/bin/bash

# Скрипт для генерации цепочки сертификатов для КриптоПРО
set -e

# Цвета для вывода
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color

# Конфигурация
ROOT_CA_DAYS=3650
INTERMEDIATE_DAYS=1825
USER_DAYS=365
KEY_SIZE=2048
DIGEST="sha256"

# Директории
CERTS_DIR="/home/bitrix/cryptopro_certs"
BACKUP_DIR="/home/bitrix/cryptopro_backup"

# Функции
log_info() {
    echo -e "${GREEN}[INFO]${NC} $1"
}

log_warn() {
    echo -e "${YELLOW}[WARN]${NC} $1"
}

log_error() {
    echo -e "${RED}[ERROR]${NC} $1"
    exit 1
}

# Создание директорий
create_directories() {
    mkdir -p "$CERTS_DIR"
    mkdir -p "$BACKUP_DIR"
}

# Резервное копирование
backup_existing() {
    if [ -d "$CERTS_DIR" ] && [ "$(ls -A $CERTS_DIR)" ]; then
        timestamp=$(date +%Y%m%d_%H%M%S)
        backup_path="$BACKUP_DIR/certs_$timestamp"
        mkdir -p "$backup_path"
        cp -r "$CERTS_DIR"/* "$backup_path/"
        log_info "Существующие сертификаты сохранены в: $backup_path"
    fi
}

# Генерация корневого УЦ
generate_root_ca() {
    log_info "Генерация корневого УЦ..."

    cat > "$CERTS_DIR/root_ca.cnf" << EOF
[ req ]
default_bits = $KEY_SIZE
prompt = no
default_md = $DIGEST
distinguished_name = dn
x509_extensions = v3_ca

[ dn ]
CN = Root CA
O = My Organization
C = RU
emailAddress = admin@example.com

[ v3_ca ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical, CA:TRUE
keyUsage = critical, digitalSignature, cRLSign, keyCertSign
EOF

    openssl req -newkey rsa:$KEY_SIZE -keyout "$CERTS_DIR/root_ca.key" \
        -out "$CERTS_DIR/root_ca.csr" -config "$CERTS_DIR/root_ca.cnf" \
        || log_error "Ошибка генерации запроса корневого УЦ"

    openssl x509 -req -days $ROOT_CA_DAYS -in "$CERTS_DIR/root_ca.csr" \
        -signkey "$CERTS_DIR/root_ca.key" -out "$CERTS_DIR/root_ca.crt" \
        -extfile "$CERTS_DIR/root_ca.cnf" -extensions v3_ca \
        || log_error "Ошибка подписания корневого сертификата"

    log_info "Корневой УЦ создан: $CERTS_DIR/root_ca.crt"
}

# Генерация промежуточного УЦ
generate_intermediate_ca() {
    log_info "Генерация промежуточного УЦ..."

    cat > "$CERTS_DIR/intermediate.cnf" << EOF
[ req ]
default_bits = $KEY_SIZE
prompt = no
default_md = $DIGEST
distinguished_name = dn
x509_extensions = v3_ca

[ dn ]
CN = Intermediate CA
O = My Organization
C = RU
emailAddress = intermediate@example.com

[ v3_ca ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical, CA:TRUE, pathlen:0
keyUsage = critical, digitalSignature, cRLSign, keyCertSign
EOF

    openssl req -newkey rsa:$KEY_SIZE -keyout "$CERTS_DIR/intermediate.key" \
        -out "$CERTS_DIR/intermediate.csr" -config "$CERTS_DIR/intermediate.cnf" \
        || log_error "Ошибка генерации запроса промежуточного УЦ"

    openssl x509 -req -days $INTERMEDIATE_DAYS -in "$CERTS_DIR/intermediate.csr" \
        -CA "$CERTS_DIR/root_ca.crt" -CAkey "$CERTS_DIR/root_ca.key" -CAcreateserial \
        -out "$CERTS_DIR/intermediate.crt" -extfile "$CERTS_DIR/intermediate.cnf" -extensions v3_ca \
        || log_error "Ошибка подписания промежуточного сертификата"

    log_info "Промежуточный УЦ создан: $CERTS_DIR/intermediate.crt"
}

# Генерация пользовательского сертификата
generate_user_certificate() {
    local common_name=${1:-"user@example.com"}
    local cert_name=${2:-"user"}

    log_info "Генерация сертификата для: $common_name"

    cat > "$CERTS_DIR/$cert_name.cnf" << EOF
[ req ]
default_bits = $KEY_SIZE
prompt = no
default_md = $DIGEST
distinguished_name = dn
req_extensions = req_ext

[ dn ]
CN = $common_name
O = My Organization
C = RU
emailAddress = $common_name

[ req_ext ]
subjectAltName = email:$common_name
keyUsage = digitalSignature, keyEncipherment
extendedKeyUsage = clientAuth, emailProtection
EOF

    # Генерация запроса
    openssl req -newkey rsa:$KEY_SIZE -keyout "$CERTS_DIR/$cert_name.key" \
        -out "$CERTS_DIR/$cert_name.csr" -config "$CERTS_DIR/$cert_name.cnf" \
        || log_error "Ошибка генерации запроса пользовательского сертификата"

    # Подписание промежуточным УЦ
    openssl x509 -req -days $USER_DAYS -in "$CERTS_DIR/$cert_name.csr" \
        -CA "$CERTS_DIR/intermediate.crt" -CAkey "$CERTS_DIR/intermediate.key" -CAcreateserial \
        -out "$CERTS_DIR/$cert_name.crt" -extfile "$CERTS_DIR/$cert_name.cnf" -extensions req_ext \
        || log_error "Ошибка подписания пользовательского сертификата"

    log_info "Пользовательский сертификат создан: $CERTS_DIR/$cert_name.crt"
}

# Создание цепочки сертификатов
create_certificate_chain() {
    local cert_name=${1:-"user"}

    log_info "Создание цепочки сертификатов..."

    # PEM цепочка
    cat "$CERTS_DIR/$cert_name.crt" "$CERTS_DIR/intermediate.crt" "$CERTS_DIR/root_ca.crt" > "$CERTS_DIR/chain.pem"

    # PKCS#7 цепочка
    openssl crl2pkcs7 -nocrl -certfile "$CERTS_DIR/$cert_name.crt" \
        -certfile "$CERTS_DIR/intermediate.crt" -certfile "$CERTS_DIR/root_ca.crt" \
        -out "$CERTS_DIR/chain.p7b" 2>/dev/null || \
        log_warn "PKCS#7 создан без дополнительных атрибутов"

    # PFX архив
    openssl pkcs12 -export -out "$CERTS_DIR/$cert_name.pfx" \
        -inkey "$CERTS_DIR/$cert_name.key" -in "$CERTS_DIR/$cert_name.crt" \
        -certfile "$CERTS_DIR/chain.pem" -password pass:"" \
        || log_error "Ошибка создания PFX архива"

    log_info "Цепочка сертификатов создана:"
    log_info "  - PEM: $CERTS_DIR/chain.pem"
    log_info "  - PKCS#7: $CERTS_DIR/chain.p7b"
    log_info "  - PFX: $CERTS_DIR/$cert_name.pfx"
}

# Проверка цепочки
verify_chain() {
    local cert_name=${1:-"user"}

    log_info "Проверка цепочки сертификатов..."

    # Создание временного файла с доверенными сертификатами
    cat "$CERTS_DIR/root_ca.crt" "$CERTS_DIR/intermediate.crt" > "$CERTS_DIR/trusted.crt"

    # Проверка цепочки
    openssl verify -CAfile "$CERTS_DIR/trusted.crt" "$CERTS_DIR/$cert_name.crt" \
        && log_info "Проверка цепочки успешно завершена" \
        || log_error "Ошибка проверки цепочки сертификатов"

    rm -f "$CERTS_DIR/trusted.crt"
}

# Отображение информации о сертификате
show_certificate_info() {
    local cert_file="$1"
    local cert_name="$2"

    echo -e "\n${YELLOW}=== Информация о $cert_name ===${NC}"
    openssl x509 -in "$cert_file" -noout -subject -issuer -dates
    echo ""
}

# Основная функция
main() {
    local common_name=""
    local cert_name="user"

    # Парсинг аргументов
    while [[ $# -gt 0 ]]; do
        case $1 in
            -n|--name)
                common_name="$2"
                shift 2
                ;;
            -c|--cert-name)
                cert_name="$2"
                shift 2
                ;;
            -h|--help)
                echo "Использование: $0 [--name email] [--cert-name name]"
                echo "  --name      Email для сертификата (по умолчанию: user@example.com)"
                echo "  --cert-name Имя файлов сертификата (по умолчанию: user)"
                exit 0
                ;;
            *)
                echo "Неизвестный аргумент: $1"
                exit 1
                ;;
        esac
    done

    common_name=${common_name:-"user@example.com"}

    log_info "Начало генерации цепочки сертификатов"
    log_info "Пользователь: $common_name"
    log_info "Имя сертификата: $cert_name"

    create_directories
    backup_existing

    generate_root_ca
    generate_intermediate_ca
    generate_user_certificate "$common_name" "$cert_name"
    create_certificate_chain "$cert_name"
    verify_chain "$cert_name"

    # Показ информации о сертификатах
    show_certificate_info "$CERTS_DIR/root_ca.crt" "Root CA"
    show_certificate_info "$CERTS_DIR/intermediate.crt" "Intermediate CA"
    show_certificate_info "$CERTS_DIR/$cert_name.crt" "User Certificate"

    log_info "Генерация завершена успешно!"
    log_info "Все файлы сохранены в директории: $CERTS_DIR"
    echo -e "${YELLOW}Важные файлы:${NC}"
    echo -e "  • Закрытые ключи: .key файлы"
    echo -e "  • Сертификаты: .crt файлы"
    echo -e "  • Цепочка: chain.pem, chain.p7b"
    echo -e "  • PFX архив: $cert_name.pfx"
    echo -e "${YELLOW}Внимание: сохраните закрытые ключи в безопасном месте!${NC}"
}

# Запуск скрипта
main "$@"



Буду благодарен любой помощи
Offline Андрей *  
#2 Оставлено : 22 августа 2025 г. 16:31:20(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 13,880
Мужчина
Российская Федерация

Сказал «Спасибо»: 592 раз
Поблагодарили: 2323 раз в 1821 постах
Автор: Limbombom Перейти к цитате
Добрый день. Развернул на centOS 9 КриптоПро CSP 5.0, а так же подключил библиотеку phpcades. В процессе формирования подписи тестовым скриптом столкнулся с ошибкой A certificate chain could not be built to a trusted root authority.


Здравствуйте.

Установите корневой (СN=Root CA) - в хранилище для корневых (root), промежуточный (Intermediate) - в промежуточные (ca)

С этим сложности?
Техническую поддержку оказываем тут
Наша база знаний
Offline Limbombom  
#3 Оставлено : 22 августа 2025 г. 18:05:38(UTC)
Limbombom

Статус: Новичок

Группы: Участники
Зарегистрирован: 13.08.2025(UTC)
Сообщений: 4
Беларусь
Откуда: Могилев

Автор: Андрей * Перейти к цитате
Автор: Limbombom Перейти к цитате
Добрый день. Развернул на centOS 9 КриптоПро CSP 5.0, а так же подключил библиотеку phpcades. В процессе формирования подписи тестовым скриптом столкнулся с ошибкой A certificate chain could not be built to a trusted root authority.


Здравствуйте.

Установите корневой (СN=Root CA) - в хранилище для корневых (root), промежуточный (Intermediate) - в промежуточные (ca)

С этим сложности?


да, переустановил сертификаты. Проблема состояла в том что у меня pfx а сертификаты сохраняются в My хранилище. Теперь при попытке работы с другим тестовым сертификатом установил pfx (получилось 3 сертификата). с помощью CA cert URL разделил их на корневые и промежуточные и проблема ушла заменив собой другую A certificate chain processed, but terminated in a root certificate which is not trusted by the trust provider.

RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.