cURL с сертификатом PKCS # 12 в сценарии bash

Мне нужно подключиться к веб-сервису, где сертификат pkcs12 является обязательным. идея заключалась в том, чтобы использовать curl в сценарии bash (точнее, под OS X).

Я узнал, что одна из немногих вещей, которые curl не может делать в общении, - это обработка сертификатов pkcs12 (.p12). какие у меня варианты?

Я читал, что преобразование сертификата в формат PEM будет работать (с использованием openssl), однако я понятия не имею, как сообщить curl, что он получает PEM и должен связываться с веб-сервисом, запрашивающим сертификаты PKCS12.

преобразование pkcs12 в pem будет сделано следующим образом (например), у меня это сработало, однако я не смог успешно использовать их с curl:

openssl pkcs12 -in mycert.p12 -out file.key.pem -nocerts -nodes
openssl pkcs12 -in mycert.p12 -out file.crt.pem -clcerts -nokeys

какие-нибудь намеки? или какие-нибудь альтернативы curl? решение должно быть основано на командной строке.


person svenson    schedule 27.08.2015    source источник


Ответы (3)


Думаю, вы уже решили, но у меня была та же проблема. Отвечаю за то, чтобы поделиться своим решением.

Если у вас есть файл .p12, ваш подход правильный. Прежде всего вы должны получить сертификат и ключ, отделенные от файла p12. Например, если у вас есть файл mycert.p12, выполните

openssl pkcs12 -in mycert.p12 -out file.key.pem -nocerts -nodes
openssl pkcs12 -in mycert.p12 -out file.crt.pem -clcerts -nokeys

Затем вам нужно позвонить на свой URL-адрес. Например, предположим, что вы хотите получить wsdl определенного веб-сервиса.

curl -E ./file.crt.pem --key ./file.key.pem https://myservice.com/service?wsdl

Если файлы file.crt.pem и file.key.pem находятся в вашей рабочей папке, "./" является обязательным.

person Smalltree1989    schedule 25.11.2015
comment
Для меня это сработало: curl -k --cert ./file.crt.pem --cert-type PEM --key ./file.key.pem --key-type PEM --pass ‹ImportPassword› ‹HTTPS_URL› - person Kartins; 15.11.2016
comment
Просто сообщаем людям, что если вы используете curl -k в качестве картингов, использованных в приведенном выше комментарии, вы отключаете проверки https. - person user2599522; 14.08.2017
comment
кроме того, использование -nodes отключает шифрование, что означает, что вы берете свой закрытый ключ из защищенного паролем зашифрованного файла и сохраняете его как незащищенный, незашифрованный файл; некоторые версии curl поддерживают зашифрованные файлы PEM, поэтому -nodes может даже не понадобиться - person kbolino; 04.04.2018


Ответ bioffe правильный.

Он предлагал сделать:

curl --cert-type P12 --cert cert.p12:password https://yoursite.com

По какой-то причине у меня это не сработало. Я получал:

curl не смог открыть файл PKCS12

Я только что экспортировал p12 файл без пароля и использовал следующий формат.

curl --cert-type P12 --cert cert.p12 https://yoursite.com

Вы можете легко проверить, может ли ваш curl справиться с p12. Очень вероятно, что да. Просто сделайте man curl и прокрутите вниз, пока не найдете cert-type. У меня было такое:

--cert-type <type>

(TLS) Сообщает curl, какой тип использует предоставленный сертификат клиента. PEM, DER, ENG и P12 являются признанными типами. Если не указано, предполагается PEM.

Если этот вариант используется несколько раз, будет использован последний.

(Я не верю, что cmmd + F работает с текстом, который не отображается в терминале. Поэтому вам нужно прокрутить вниз.

person Honey    schedule 12.12.2020
comment
первая команда с паролем работает, пока пароль правильный, иначе вы получите ошибку. - person gp.; 15.01.2021