Ошибка импорта PFX в ManageEngine ServiceDesk
Добрый день! Уважаемые читатели и гости IT блога Pyatilistnik. В прошлый раз мы с вами научились производить установку обновлений на Windows 8.1 после 2023 года, когда публичная поддержка завершилась, так сказать выкрутились. Идем далее и сегодня я вам расскажу интересный случай с сертификатом, с которым я столкнулся на днях. Потребовалось мне произвести импортирование SSL сертификата на один сервис, так как уже подходил срок, вроде тривиальная задача, но она позволила прокачать немного знания. Сервис отказался работать с тем pfx архивом, что я ему предлагал, выдавая мне ошибку "Указан неправильный пароль для сертификата certificateEndReply.pfx". Давайте разбираться в чем дело и как это поправить.
Как устранить ошибку "The password you entered is incorrect"
Каждый год мне необходимо заменять SSL сертификат на ManageEngine ServiceDesk и сам процесс я описывал подробно. На шаге предварительной проверки файла, я получил ошибку:
Хотя я точно уверен в пароле который я вводил, так как сам генерировал PFX архив в OpenSSL.
В логах Windows все было чисто, лопатить кучу журналов ManageEngine ServiceDesk мне было лень и я немного погуглил. Все дело оказалось в двух вещах:
- У ManageEngine ServiceDesk была установлена старая версия Java, что ограничивала криптоалгоритмы с которыми она могла работать
- Второй момент, для генерации pfx архива я использовал OpenSSL 3.3.1, а он по умолчанию делал pfx в AES256. В более старых версиях Java при попытке импорта такого сертификата будет вводящее в заблуждение сообщение об ошибке пароля "The password you entered is incorrect" (не может расшифровать, а других сообщений нет).
Самый простой метод выяснить ваш криптоалгоритм, это воспользоваться утилитой openssl. Выполните вот такую команду в cmd от имени администратора.
Если на архиве есть пароль, то вас попросят его ввести, после чего вы получите подробнейший состав сертификатов. Нас будет интересовать поле "PKCS7 Encrypted data: PBES2, PBKDF2, AES-256-CBC, Iteration 2048, PRF hmacWithSHA256".
AES256 - это симметричный алгоритм шифрования, который использует ключ длиной 256 бит (или 32 байта) для шифрования и дешифрования данных. AES расшифровывается как Advanced Encryption Standard (Стандарт расширенного шифрования) и является одним из самых распространенных алгоритмов шифрования, применяемых в настоящее время.
AES был выбран Национальным институтом стандартов и технологий (NIST) в 2001 году в качестве стандарта шифрования после конкурса, в котором участвовали различные алгоритмы. AES имеет различные варианты по длине ключа, такие как AES128, AES192 и AES256, которые соответственно используют ключи длиной 128, 192 и 256 бит.
AES256 считается очень надежным алгоритмом шифрования и обеспечивает высокий уровень безопасности для защиты конфиденциальной информации. Он широко применяется в различных областях, включая защиту данных в сети, шифрование файлов и другие приложения, где требуется надежная защита данных.
TripleDES (Triple Data Encryption Standard) - это симметричный алгоритм блочного шифрования, который использует три последовательных операции шифрования DES для увеличения уровня безопасности. DES (Data Encryption Standard) был разработан в 1970-х годах и использовался для шифрования данных, но со временем его ключ длиной 56 бит стал уязвимым к атакам. TripleDES усиливает защиту путем применения трех этапов шифрования DES.
Комбинация TripleDES-SHA1 означает, что данные сначала будут зашифрованы тройным шифрованием DES, а затем будет вычислен хеш SHA-1 от зашифрованных данных. Это может использоваться в различных системах для обеспечения безопасности и целостности данных. Однако важно помнить, что SHA-1 считается устаревшим и не рекомендуется для новых систем из-за потенциальных уязвимостей.
Конвертирование AES256 в TripleDES-SHA1 через mmc
Чтобы исправить, необходимо импортировать сертификат на поддерживающей шифрование pfx SHA256 платформе с галкой, разрешающей экспорт закрытого ключа, а потом экспортировать назад с шифрованием TripleDES-SHA1 если их предполагается использовать на старых версиях Windows.
Запускаем установку pfx с алгоритмом AES256. Я буду устанавливать сертификат для всей локальной машины.
Находим через окно выбора ваш pfx архив и нажимаем далее.
Введите пароль от архива если он есть, и обязательно выставите галку "Mark this key as exportable. This will allow you to back up or transport your keys at a later time"
Далее указываем, что сертификат будим помещать в личное хранилище, нажмите "Place all certificates in the following store", далее кнопка "Browse". В новом окне откройте раздел Personal, если хотите при желании, можете поставить в реестр.
Нажимаем далее.
Завершаем импорт сертификата.
Далее вызовите mmc оснастку и добавьте в нее сертификаты компьютера. Добавляем сертификаты локального компьютера.
Теперь просто нажмите "Ok", это добавит в оснастку нужный раздел с сертификатами.
Открываем личный раздел с сертификатами компьютера, находим нужный и щелкаем по нему правым кликом, из контекстного меню выберите пункт "Export".
В мастере экспорта поставьте, что будим экспортировать закрытый ключ, формат файла оставляем pfx, обязательно установите пароль и САМОЕ главное тип шифрования должен быть TripleDES-SHA1.
Задаем имя для нашего сертификата и место сохранения.
Теперь при попытке импортировать сертификат с алгоритмом TripleDES-SHA1 у вас не должны быть ошибки, и ManageEngine ServiceDesk легко его подхватывает.
Для самопроверки, выполните указанную выше команду и посмотрите тип шифрования.
MAC length: 20, salt length: 20
PKCS7 Data
Shrouded Keybag: pbeWithSHA1And3-KeyTripleDES-CBC, Iteration 2000
Bag Attributes
Microsoft Local Key set: <No Values>
localKeyID: 01 00 00 00
friendlyName: {B38E8E01-E2EE-489E-BC8B-136E9AC13891}
Microsoft CSP Name: Microsoft Enhanced Cryptographic Provider v1.0
Key Attributes
X509v3 Key Usage: 10
Преобразование AES256 в TripleDES-SHA1 с помощью командной строки
Для того чтобы преобразовать AES256 в TripleDES-SHA1 запустите командную строку в режиме администратора, далее нужно на первом шаге получить файл в формате PEM, для этого выполните:
Где certAES256.pfx это имя PFX сертификата в формате AES256, а certAES256.pem это имя получаемого PEM файла. Далее сделаем конвертирование с помощью команды:
- pkcs12 указывает на то, что операция выполняется с контейнером PKCS#12.
- -keypbe PBE-SHA1-3DES и -certpbe PBE-SHA1-3DES задают алгоритм шифрования для ключа и сертификата соответственно.
- -export указывает на то, что происходит экспорт ключа и сертификата.
- -in certAES256.pem задает входной файл (certAES256.pem).
- -out cert-TripleDES.pfx указывает на выходной файл (cert-TripleDES.pfx).
- -name "PBE-SHA1-3DES" задает имя для нового контейнера PKCS#12.
Дополнительные алгоритмы:
- PBE-MD2-DES
- PBE-MD5-DES
- PBE-SHA1-RC2-64
- PBE-MD2-RC2-64
- PBE-MD5-RC2-64
- PBE-SHA1-DES
- PBE-SHA1-RC4-128
- PBE-SHA1-RC4-40
- PBE-SHA1-3DES
- PBE-SHA1-2DES
- PBE-SHA1-RC2-128
- PBE-SHA1-RC2-40
- AES-256-CBC
- hmacWithSHA256
Надеюсь, что у вас все получилось и вы разобрались. На этом у меня все, с вами был Иван Сёмин, автор и создатель IT портала Pyatilistnik.org.
Дополнительные ссылки
- https://serverfault.com/questions/942961/wrong-password-during-pfx-certificate-import-windows10-2016
- https://bazanovv.livejournal.com/38828.html?ysclid=ly7a5xr6z96135077
- https://github.com/dsccommunity/CertificateDsc/issues/153
- https://hstechdocs.helpsystems.com/manuals/globalscape/archive/secureserver3/Converting_an_incompatible_PKCS_12_format_file_to_a_compatible_PKCS_12_.htm