Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.

Ошибка WireGuard: Invalid cryptographic private key / public key format

Обновлено: 24.08.2026  ·  Официальная база знаний
  • Команда wg-quick up wg0 завершается аварийно: Configuration parsing error: Key is not valid base64 or has incorrect length.
  • В выводе утилиты: Invalid cryptographic key: Line 3 of /etc/wireguard/wg0.conf.
  • Сетевой интерфейс WireGuard не создается в системе.

1. Архитектура ключей WireGuard

WireGuard использует криптографию на эллиптических кривых Curve25519. Ключ представляет собой 32-байтный массив данных, закодированный строго в формате Base64. Длина валидной строки ключа всегда составляет ровно 44 символа и заканчивается знаком равенства = (например, 4aB...z9=).

2. Проверка и генерация валидной пары ключей

# Генерация приватного ключа
umask 077
wg genkey > private.key

# Генерация соответствующего публичного ключа
wg pubkey < private.key > public.key

# Проверка длины ключа (должно быть ровно 44 символа без пробелов)
wc -c private.key public.key

3. Устранение скрытых символов переноса строк (CRLF / BOM)

Если конфигурационный файл редактировался в текстовом редакторе Windows (Notepad), символы \r\n или заголовок UTF-8 BOM делают ключ невалидным для парсера Linux:

# Очистка невидимых символов и пробелов в конфиге
sed -i 's/\r$//' /etc/wireguard/wg0.conf
sed -i 's/[[:space:]]*$//' /etc/wireguard/wg0.conf

4. Проверка синтаксиса файла конфигурации

Убедитесь, что приватный и публичный ключи не перепутаны местами:

[Interface]
Address = 10.0.0.2/24
# Сюда вставляется ТОЛЬКО PrivateKey (44 символа)
PrivateKey = aaaaaaaa...aaaa=

[Peer]
# Сюда вставляется ТОЛЬКО PublicKey удаленной стороны (44 символа)
PublicKey = bbbbbbbb...bbbb=
Endpoint = 198.51.100.1:51820
AllowedIPs = 0.0.0.0/0
Практический опыт инженера: Никогда не копируйте ключи через буфер обмена с включенными экранными переводчиками или автокоррекцией пробелов — они часто заменяют символы '+' и '/' на пробелы или спецсимволы.

Частые вопросы (FAQ)

Почему ключ WireGuard обязательно имеет длину 44 символа?

Сырой ключ Curve25519 имеет размер 32 байта (256 бит). При кодировании алгоритмом Base64 каждые 3 байта превращаются в 4 символа (32 * 4 / 3 = 42.66), что с учетом паддинга '=' дает ровно 44 символа.

Можно ли использовать пароль вместо ключа в WireGuard?

Нет, WireGuard не поддерживает пароли или традиционные логины. Аутентификация выполняется исключительно по криптографическим асимметричным ключам.

Что такое PresharedKey в WireGuard?

Это дополнительный 256-битный симметричный ключ (генерация: wg genpsk), обеспечивающий квантово-устойчивый уровень защиты поверх Curve25519.

Как быстро проверить валидность строки ключа без запуска туннеля?

Выполните команду: echo 'ваш_ключ' | base64 -d | wc -c. Если вывод равен 32 — ключ валиден.