Ошибка OpenSSL: 02001002: системная библиотека: fopen: такой файл или каталог не найден, ключ не найден, неверная пароль или неправильный формат файла, git bash vs cmd - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть приложение, которое выставляет URL-адреса с использованием взаимной аутентификации. Сейчас я пишу сценарий python, который использует Popen для запуска команды curl для подключения к приложению и получает необходимые данные. Но когда я запускаю скрипт python, я получаю следующую ошибку.

curl: (58) не удалось загрузить сертификат клиента PEM, ошибка OpenSSL: 02001002: системная библиотека: fopen: такого файла нет или каталог, (ключ не найден, неверная парольная фраза или неверный формат файла?)

Я запускаю приложение на windows 7 машине. У меня есть curl и openssl. Команда для запуска приведена ниже

curl -v https://localhost:9400/<URL> -H "Connection:close" --cacert 'C:/local_cert/root.crt' --cert 'C:/local_cert/client.crt' --key 'C:/local_cert/client.key' --pass client_key_passwd

Теперь для тестирования я выполнил ту же команду в Git Bash для windows. Я получил результат успешно. Но когда я запускаю ту же команду в Git Cmd для windows или Windows Cmd, я получаю ту же ошибку выше.

Я проверил правильные пути к сертификату, они в формате PEM, У меня установлены openssl и curl. По некоторым причинам я не могу использовать Requests или urllib3 python pacakges и могу использовать только curl. Вышеуказанное заставляет меня поверить, что есть некоторые настройки, в которых Windows Cmd и Git Cmd для windows отсутствуют некоторые настройки, но я не уверен, что это может быть.

1 Ответ

0 голосов
/ 11 мая 2020

Попробовав много вещей, я наконец-то понял ответ. В сообщении об ошибке указано, что файл не найден, неверная пароль или неправильный формат. Так как команда работала в git bash, я был уверен, что это не проблема с файлом или парольной фразой. Концентрируясь на том, что ни один файл не найден, я нашел ниже ссылку

Windows ПУТЬ к преобразованию пути posix в bash

, что дало мне представление о том, как я могу Я указываю неверный путь в зависимости от того, какую версию curl мы используем. Итак, после попытки различных комбинаций я обнаружил, что если вы используете обычный curl в git bash, то оба cmd будут работать

curl -v https://localhost:9400/<URL> -H "Connection:close" --cacert 'C:/local_cert/root.crt' --cert 'C:/local_cert/client.crt' --key 'C:/local_cert/client.key' --pass client_key_passwd

и

curl -v https://localhost:9400/<URL> -H "Connection:close" --cacert C:/local_cert/root.crt --cert C:/local_cert/client.crt --key C:/local_cert/client.key --pass client_key_passwd

Но в windows Cmd или при вызове curl из python будет работать только следующий cmd

curl -v https://localhost:9400/<URL> -H "Connection:close" --cacert C:/local_cert/root.crt --cert C:/local_cert/client.crt --key C:/local_cert/client.key --pass client_key_passwd

Так что в двух словах это была проблема с qoutes, потому что то, как вызывается ваша утилита curl и какая версия curl используется (скомпилировано для windows или нет) толкование цитат будет другим.

...