Также стоит учесть, что некоторые дистрибутивы занимают больше места, чем другие, и использование дистрибутива, который требует меньше места, также может вам помочь.
http://www.damnsmalllinux.org/ DSL - крайний пример, требующий всего 50 МБ места для установки, но при поиске я уверен, что вы можете найти другие дистрибутивы с небольшими размерами, чтобы дать вам больше вашего ssd.
У меня была эта проблема, точно такая же проблема и сообщения об ошибках, но я использовал 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 сертификата и так далее. И скажите «да», когда вас спросят, предназначено ли это для центра сертификации!
Недопустимо иметь цепочку доверия, включающую самоподписанный -сертификат. Если бы это было так, любой мог бы предоставить (составленную )действующую цепочку доверия. Если самоподписанный сертификат -появляется в цепочке доверия, его следует игнорировать. Самоподписанный -сертификат может быть действительным только в локальном каталоге (, контролируемом владельцем компьютера ). Сертификат, выданный любому серверу, должен быть привязан к самоподписанному -сертификату.
Общее руководство без большинства мелких деталей.
Вывод команды openssl s_client
показывает две ошибки:
verify error:num=20:unable to get local issuer certificate
verify error:num=21:unable to verify the first certificate
Это означает, что в хранилище сертификатов по умолчанию на вашем компьютере отсутствует сертификат, подтверждающий цепочку, полученную с используемого вами веб-сайта. Вам нужен каталог с самоподписанным сертификатом -и сертификатом, привязанным к нему для веб-сервера.
Шаги:
Вы можете создать новый каталог (в любом месте ), обработать его скриптом c_rehash
и указать openssl использовать его для проверки сертификатов с параметром -CApath Directory
. Вносите изменения, пока не избавитесь от обеих ошибок при использовании опции -CApath
.
Создайте связанный сертификат для веб-сервера.
Затем сообщите curl о каталоге сертификатов с помощью:
curl --capath <dir>
и все остальные необходимые параметры.
Это устранит обе ошибки.
Попробуйте-k
:
curl -k https://yourhost/
Он должен "принимать" само -подписанные сертификаты
Выполнение этих действий должно решить вашу проблему:
echo quit | openssl s_client -showcerts -servername "${API_HOST}" -connect "${API_HOST}":443 > cacert.pem
curl
:curl --cacert cacert.pem --location --silent https://${API_HOST}
Также можно использовать wget и игнорировать сертификаты с:wget --no-check-certificate https://${API_HOST}
Если вы сохраните файл self -signed.crt со своего сервера, вы можете передать его curl через «--cacert self -signed.crt», и curl проверит сертификат вашего сервера, используя выдан сертификат CA.
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!