Запрос на завиток в контейнере docker завершается успешно там, где он должен завершиться ошибкой - PullRequest
0 голосов
/ 06 августа 2020

Пример URL-адреса теста: https://6195.playfabapi.com/swagger. Цепочка сертификатов для этого сайта: Starfield et c -> Starfield et c -> Amazon Root CA 1 -> Amazon -> * .playfabapi.com

Windows Server 2019 под управлением Windows Server 2019 docker контейнер (mcr.microsoft.com/windows/servercore:10.0.17763.973)

Команды PowerShell, выполняемые на docker контейнере:

Get-ChildItem -path Cert:\* -Recurse | where {$_.Subject –like '*Starfield*'}
(no results)
Get-ChildItem -path Cert:\* -Recurse | where {$_.Subject –like '*Amazon*'}
(No results)
Get-ChildItem -path Cert:\* -Recurse | where {$_.Subject –like '*PlayFab*'}
(No results)
Get-ChildItem -path Cert:\* -Recurse | where {$_.Subject –like '*'}
(About a dozen results, that all seem to be Microsoft-issued certificates)
curl --ssl-reqd --tlsv1.2 https://6195.playfabapi.com/swagger
(Successful json blob)

Мой вопрос: Почему команда curl успешна? Все, что я понимаю о Docker, сертификатах и ​​curl, говорит о том, что команда curl должна завершиться ошибкой сертификата (вероятно, не доверяет или что-то в этом роде).

Я нашел похожий, но перевернутый вопрос: Проверка сертификата SSL не выполняется внутри контейнера docker на указанном c сервере . Как мне сделать обратное, сделать контейнер docker изолированным и заставить его проверять только его собственные сертификаты?

1 Ответ

0 голосов
/ 10 августа 2020

curl.exe версии 7.71.1 на Windows еще не использует хранилище сертификатов Windows, а скорее внутреннее хранилище сертификатов или явный файл сертификата с помощью параметра --cacert.

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

...