2013-12-13 4 views
1

Я пытаюсь установить связь клиента с сервером через SSL с помощью самоподписанных сертификатов. На стороне сервера я добавил CN = при создании сертификата. Мой клиент связывается с использованием libCurl с CURLOPT_SSL_VERIFYPEER, установленным в 1 и CURLOPT_SSL_VERIFYHOST, который установлен в 2.Проблема с сертификатом SSL: запись CN не совпадает с именем хоста в URL-адресе

Когда клиент пытается отправить запрос с использованием полного доменного имени сервера в URL-адресе, он отлично работает. но если клиент использует IP-адрес, я получаю сообщение об ошибке как «SSL: имя субъекта сертификата» не соответствует имени целевого хоста »« Я понял, что проблема: «Имя хоста, используемое в URL-адресе, должно совпадать с именем субъекта», приведенным в сертификат.

Но каково решение этой проблемы? Клиент должен иметь возможность подключения с использованием IP-адреса/короткого имени хоста/FQDN. Я попытался добавить несколько CN записей (для полного доменного имени и IP) в сертификат, но это не сработало.

+2

DNS-имена должны * не * быть помещены в общее имя (CN). Это поведение устарело и для IETF, и для CA/Browser Forums. Вместо этого используйте дружественное имя в CN, потому что оно отображается пользователю. Имена DNS должны быть помещены в альтернативное имя субъекта (SAN). Это определяется как IETF, так и форумами CA/B. * Примечание *: форум CA/Browser важен, потому что браузеры и центры сертификации собираются вместе и определяют политику. Браузеры следуют за форумом CA/B и не следуют рекомендациям IETF. – jww

ответ

5

Используйте настоящее имя хоста в URL-адресе libcurl, чтобы проверка имени хоста работала.

Если вы хотите указать другому хосту, чем обычно это разрешаете, используйте CURLOPT_RESOLVE, чтобы заставить libcurl использовать ваш локальный/временный IP.

См. Пример resolve.c о том, как это можно сделать.

Если вы хотите добавить несколько имен в сертификат, вы используете SubjectAltName вместо CN.

+0

Спасибо Даниэлю !!! SubjectAltName было именно тем, что я искал. – user2078670

+0

Я использую OpenSSL v5.0.8.1 и, похоже, существует уязвимость для использования SubjectAltName в сертификатах https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2013-4248 для OpenSSL v <5.5.2. Есть ли другой альтернативный вариант, помимо обновления версии OpenSSL? – user2078670

+0

Это CVE относится к версиям PHP, а не OpenSSL. Уязвимость существует в PHP. Этот недостаток не существует в текущем libcurl, но он страдал от аналогичного, который мы исправили в 2009 году: CVE-2009-2417: http://curl.haxx.se/docs/adv_20090812.html –

Смежные вопросы