Как доверять себеподписанный сертификат в командной строке cURL?

Также стоит учесть, что некоторые дистрибутивы занимают больше места, чем другие, и использование дистрибутива, который требует меньше места, также может вам помочь.

http://www.damnsmalllinux.org/ DSL - крайний пример, требующий всего 50 МБ места для установки, но при поиске я уверен, что вы можете найти другие дистрибутивы с небольшими размерами, чтобы дать вам больше вашего ssd.

9
18.10.2018, 02:34
6 ответов

У меня была эта проблема, точно такая же проблема и сообщения об ошибках, но я использовал Certtool GNUTLS для создания своего сертификата, а не openssl.

Моя проблема заключалась в том, что я не сделал свой самоподписанный сертификат ЦС. Он был настроен только для работы в качестве сертификата веб-сервера. Это все, что я хотел с ним сделать, и я не собирался использовать его в качестве ЦС для подписи других сертификатов.

Но если вы хотите добавить сертификат в цепочку доверия в качестве издателя других сертификатов, этот сертификат должен быть ЦС, иначе он будет отклонен openssl!

С certtool -i < mycert.crtнужно видеть это:

    Extensions:
            Basic Constraints (critical):
                    Certificate Authority (CA): TRUE

Попробуйте добавить -addext basicConstraints=critical,CA:TRUE,pathlen:1к вашей команде openssl или изменить файл cnf для того же эффекта.

Или используйте certtool, это намного проще для одного -поколения сертификатов:

certtool -p --outfile localhost.key
certtool -s --load-privkey localhost.key --outfile localhost.crt

Затем ответьте на запросы, чтобы указать CN сертификата и так далее. И скажите «да», когда вас спросят, предназначено ли это для центра сертификации!

5
24.04.2020, 20:12

Недопустимо иметь цепочку доверия, включающую самоподписанный -сертификат. Если бы это было так, любой мог бы предоставить (составленную )действующую цепочку доверия. Если самоподписанный сертификат -появляется в цепочке доверия, его следует игнорировать. Самоподписанный -сертификат может быть действительным только в локальном каталоге (, контролируемом владельцем компьютера ). Сертификат, выданный любому серверу, должен быть привязан к самоподписанному -сертификату.

Общее руководство без большинства мелких деталей.

  • Вывод команды openssl s_clientпоказывает две ошибки:

    verify error:num=20:unable to get local issuer certificate
    verify error:num=21:unable to verify the first certificate
    

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

Шаги:

  1. Вы можете создать новый каталог (в любом месте ), обработать его скриптом c_rehashи указать openssl использовать его для проверки сертификатов с параметром -CApath Directory. Вносите изменения, пока не избавитесь от обеих ошибок при использовании опции -CApath.

  2. Создайте связанный сертификат для веб-сервера.

  3. Затем сообщите curl о каталоге сертификатов с помощью:

    curl --capath <dir>
    

    и все остальные необходимые параметры.

Это устранит обе ошибки.

2
27.01.2020, 20:08

Попробуйте-k:

curl -k https://yourhost/

Он должен "принимать" само -подписанные сертификаты

24
27.01.2020, 20:08

Выполнение этих действий должно решить вашу проблему:

  1. Загрузите и сохраните само -подписанный сертификат:echo quit | openssl s_client -showcerts -servername "${API_HOST}" -connect "${API_HOST}":443 > cacert.pem
  2. Расскажите об этом клиенту curl:curl --cacert cacert.pem --location --silent https://${API_HOST}

Также можно использовать wget и игнорировать сертификаты с:wget --no-check-certificate https://${API_HOST}

8
27.01.2020, 20:08

Если вы сохраните файл self -signed.crt со своего сервера, вы можете передать его curl через «--cacert self -signed.crt», и curl проверит сертификат вашего сервера, используя выдан сертификат CA.

0
04.05.2020, 20:58

trustme, используемый urllib3 , выглядит хорошим вариантом. Согласно их ридми:

$ # ----- Creating certs -----
$ python -m trustme
Generated a certificate for 'localhost', '127.0.0.1', '::1'
Configure your server to use the following files:
  cert=/tmp/server.pem
  key=/tmp/server.key
Configure your client to use the following files:
  cert=/tmp/client.pem
$ # ----- Using certs -----
$ gunicorn --keyfile server.key --certfile server.pem app:app
$ curl --cacert client.pem https://localhost:8000/
Hello, world!
1
19.10.2021, 02:46

Теги

Похожие вопросы