OpenID через SSL с самозаверяющим сертификатом - PullRequest
7 голосов
/ 25 сентября 2008

Я установил свой собственный провайдер открытого идентификатора на своем личном сервере и добавил перенаправление на https в моем файле конфигурации apache. Когда не используется безопасное соединение (когда я отключаю перенаправление), я могу войти в систему нормально, но с перенаправлением я не могу войти с этим сообщением об ошибке:

Базовое соединение было закрыто: не удалось установить доверительные отношения для безопасного канала SSL / TLS.

Я предполагаю, что это потому, что я использую самозаверяющий сертификат.

Может ли кто-нибудь подтвердить, является ли самозаверяющий сертификат проблемой? Если нет, то у кого-нибудь есть идеи, в чем проблема?

Ответы [ 4 ]

8 голосов
/ 25 сентября 2008

Основным преимуществом использования SSL для вашего URL OpenID является то, что он дает проверяющей стороне механизм, позволяющий обнаружить, был ли DNS подделан. Проверяющая сторона не может определить, был ли взломан URL-адрес OpenID с самозаверяющим сертификатом.

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

5 голосов
/ 27 октября 2008

OpenID разработан с прозрачным перенаправлением. Пока необходимые пары ключ / значение сохраняются при каждом перенаправлении, либо GET, либо POST, все будет работать правильно.

Самым простым решением для обеспечения совместимости с потребителями, которые не работают с самозаверяющими сертификатами, является использование незашифрованной конечной точки, которая перенаправляет сообщения checkid_immediate и checkid_setup в зашифрованную.

Делать это в коде вашего сервера проще, чем при перенаправлениях с веб-сервера, поскольку первый может легче обрабатывать запросы POST, а также хранить код вместе. Кроме того, вы можете использовать одну и ту же конечную точку для обработки всех операций OpenID, независимо от того, следует ли обслуживать их по SSL, если выполняются надлежащие проверки.

Например, в PHP перенаправление может быть простым:

// Redirect OpenID authentication requests to https:// of same URL
// Assuming valid OpenID operation over GET
if (!isset($_SERVER['HTTPS']) &&
        ($_GET['openid_mode'] == 'checkid_immediate' ||
         $_GET['openid_mode'] == 'checkid_setup'))
    http_redirect("https://{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}");

Поскольку значение openid.return_to было сгенерировано для простой конечной точки HTTP, для потребителя оно имеет дело только с незашифрованным сервером. При условии правильной работы OpenID 2.0 с сеансами и одноразовыми номерами, любая информация, передаваемая между потребителем и вашим сервером, не должна раскрывать эксплуатируемую информацию. Операции между вашим браузером и сервером OpenID, которые могут использоваться (отслеживание пароля или перехват файлов cookie сеанса), выполняются по зашифрованному каналу.

Помимо защиты от прослушивателей, выполнение операций аутентификации по SSL позволяет использовать флаг cookie HTTP secure. Это добавляет еще один уровень защиты для операций checkid_immediate, если вы хотите разрешить его.

3 голосов
/ 25 сентября 2008

(Отказ от ответственности: я новичок в OpenID, поэтому я могу ошибаться.) Связь между потребителем Open ID (например, StackOverflow) и поставщиком Open ID (вашим сервером) не требует HTTPS - он работать так же хорошо и так же безопасно по обычному HTTP. Что вам нужно сделать, это настроить свой сервер на переключение на HTTPS только тогда, когда он показывает вашу страницу входа в систему. В этом случае только ваш браузер должен позаботиться о самозаверяющем сертификате. Вы можете импортировать сертификат на свой компьютер, и все будет в безопасности, как, например, с сертификатом, выпущенным Verisign.

2 голосов
/ 25 сентября 2008

Звучит так. Клиент вашего сервера OpenID не доверяет корневому центру сертификации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...