Как устранить ошибку "имя субъекта сертификата не соответствует имени целевого хоста"?
curl -X GET --header 'Accept: application/json' --header 'Authorization: Bearer 90d2c018-73d1-324b-b121-a162cf870ac0' 'https://172.17.0.1:8243/V1.0.2/stock/getNA?name=te'
Терминал подсказал
"curl: (51) SSL: имя субъекта сертификата (localhost) не соответствует имени целевого хоста '172.17.0.1' "
Однако после того, как я изменил "172.17.0.1" на "localhost", он заработал и получил результат.
Зачем? Нет ли где-то неправильной конфигурации? Между тем, в http_access.log нет лога.
5 ответов
Когда произойдет рукопожатие ssl, клиент проверит сертификат сервера. В процессе проверки клиент будет пытаться сопоставить общее имя (CN) сертификата с именем домена в URL. если оба они разные, проверка имени хоста не удастся. В вашем случае сертификат имеет CN в качестве локального хоста, и когда вы пытаетесь вызвать с использованием IP-адреса, он терпит неудачу. При создании сертификата в качестве значения CN можно указать одно имя хоста / несколько хостов / подстановочное имя хоста.
Для получения дополнительной информации https://tersesystems.com/2014/03/23/fixing-hostname-verification/ https://support.dnsimple.com/articles/what-is-common-name/
CN
по умолчанию сертификат wso2 localhost
, Поэтому вы должны использовать localhost
в качестве имени хоста при отправке запросов. В противном случае проверка имени хоста завершится неудачно. Если вы хотите использовать любое другое имя хоста, вы должны сгенерировать сертификат с этим именем хоста, как упоминала Йена.
Это может быть давным-давно. Но у меня действительно была эта проблема, и я получил решение. Надеюсь, это кому-нибудь поможет
Я запрашивал URI, например " http://some.example/ ", но переменная для HTTPS была установлена в "1"
У меня возникла эта проблема при попытке извлечь из каталога git после добавления нового ключа SSH и перемещения моего git-репозитория. В схватке Git CN запутался. Решением для меня было удалить каталог git и повторно клонировать его через ssh. Как намекали другие пользователи, вы не можете изменить CN сертификата веб-сайта, поэтому вам придется изменить настройку на вашем компьютере с неправильным CN или избегать использования https (и использовать ssh, как я).
Как намекали другие, это не удается, потому что согласование TLS проверяет, соответствует ли сертификат имени хоста в URL-адресе.
Что нового, так это то, что curl теперь поддерживает этот сценарий через опцию подключения .Итак, если ваш curl достаточно новый (v7.18.1), это должно работать:
curl -X GET 'https://localhost/V1.0.2/stock/getNA?name=te' \
--header 'Authorization: Bearer 90d2c018-73d1-324b-b121-a162cf870ac0' \
--header 'Accept: application/json' \
--connect-to localhost:443:172.17.0.1:8243
Кредит: /questions/12341317/curl-kak-ukazat-tselevoe-imya-hosta-dlya-zaprosa-https/12341327#12341327
Точно так же вы можете использовать опцию разрешения завитков:
curl -X GET 'https://localhost:8243/V1.0.2/stock/getNA?name=te' \
--header 'Authorization: Bearer 90d2c018-73d1-324b-b121-a162cf870ac0' \
--header 'Accept: application/json' \
--resolve localhost:443:172.17.0.1