2011-01-24 2 views
4

Для смарт-режима OpenID в спецификации используется обмен ключами Диффи-Хеллмана. Мне интересно, можно ли использовать общедоступные и закрытые ключи (при условии, что они не скомпрометированы), или если они должны создаваться для каждого запроса. Я использую PHP OpenSSL-библиотеку (мой код: $key = openssl_pkey_new(array('private_key_type' => OPENSSL_KEYTYPE_DH));) для генерации ключей, и это ужасно медленно (в среднем 22 секунды для генерации ключа - очень неприемлемо для веб-сайта). Если ключи не могут быть повторно использованы, есть ли более быстрый способ генерировать ключи с помощью OpenSSL? Я бы предпочел не делать это вручную из-за зависимостей от математических библиотек и т. Д.Реализация информации о пользователе OpenID

EDIT: Чтобы быть ясным, я ищу две вещи в ответе: могу ли я повторно использовать ключи Диффи-Хеллмана в режиме ассоциации OpenID, и если нет, существует ли более быстрый способ генерации ключей с использованием OpenSSL, чем openssl_pkey_new(), поскольку это занимает исключительно длительное время.

+1

WOW, почему бы вам не использовать библиотеку OpenID, вместо того, чтобы делать транзакцию OpenID самостоятельно? – timdream

+1

Потому что а) ни одна из моих потребностей не удовлетворяет и б) Мне не нравится использовать вещи, которые я не понимаю. Библиотека JanRain ужасно спроектирована и медленно загружается на моей установке - не говоря уже о том, что она не поддерживает PHP 5.3.5 (что я не буду компрометировать). LightOpenID использует preg по всему месту вместо правильных методов XML DOM, что ни к чему не приводит (не говоря уже о том, что он _still_ не поддерживает аутентификацию интеллектуального режима). Нет библиотек, поддерживающих как PHP 5.3.5, так и аутентификацию смарт-режима. –

+0

Что такое OpenID OpenID? http://framework.zend.com/manual/en/zend.openid.consumer.html – Marc

ответ

1

Джефф,

Я хочу начать, поддерживая свое решение построить это решение самостоятельно. Я согласен, что другие решения (по большей части) слабые в нескольких областях. Я еще не полностью перешел на PHP 5.3.5, но буду на пятках.

Во всяком случае, есть несколько ответов на ваш вопрос:

  1. Да, так долго, как вы можете гарантировать, что частные & открытые ключи не скомпрометирован, вы прекрасно повторно использовать их. Я всегда немного параноик по этому поводу, поэтому я использую работу cron, чтобы каждую секунду обновлять свои ключи, а затем использовать отслеживание сеансов, чтобы убедиться, что у меня нет транзакции, которая начинается под старым ключом и заканчивается под новым. Этот дополнительный шаг (регенерация каждые 24 часа) не нужен, но может помочь облегчить ваши заботы.

  2. Нет, это не должно занять 22 секунды для создания новых ключей. Мой сервер занимает 3-5 секунд, чтобы создать их (что я до сих пор чувствую слишком долго, поэтому задание cron на стороне, когда пользователи не подвержены/ждут вас. Возможно, вы захотите посмотреть в своих журналах, чтобы увидеть, любые предупреждения. Может возникнуть проблема с вашим openssl.cnf или какой-либо конфигурацией на сервере. Полагаю, что это может занять много времени, если ваш сервер несколько перенапряжен для ресурсов или у вас есть безумно медленный процессор. Вы можете проверить, что работает на заднем плане ... может быть, некоторые беглый бесконечный цикл увязывает процессора и памяти? является ли перезагрузка вариант?

Успехов!

+0

Отлично! Я надеялся, что смогу использовать тот же ключ, но я не был уверен - я отношусь к параноику, когда речь заходит о криптографии, а не в качестве эксперта. Я рассмотрю журналы своего сервера, но после разговора с другом, который занимается администрированием сервера, я подозреваю, что это просто отсутствие энтропии в/dev/urandom, вызывающее проблему. –

1

OpenID умный режим

Что это интеллектуальный режим OpenID? Если вы не говорите о потреблении OpenId, я думаю, вы можете прекратить чтение (хотя я не думаю, что вы должны создать еще один OpenID-провайдер. Хватит им уже)


. Я никогда не читал спецификации openid (длинное/сложное чтение: $. Я хотел бы прочитать/узнать его когда-нибудь), но когда требуется проверка подлинности OpenID (?), Требуется 21 секунда. Тогда я думаю, что вы делаете что-то неправильно. Библиотека LightOpenID (настоящая простая библиотека) (потребитель) выполняет аутентификацию OpenID в течение секунды. Я создал this library which wraps LightOpenID+openid selector. Вы могли увидеть демонстрацию, размещенную на my hosting.

+1

Умный режим OpenID - это то, где вы связываетесь с провайдером, вместо того, чтобы просить провайдера проверить подпись. И я смотрел (и основывал свой потребитель - да, я делаю потребитель) на LightOpenID, но он не отвечал моим потребностям (в частности, он не поддерживает связь). Быть ясным: для выполнения аутентификации мне не требуется 22 секунды; для открытия ключа DHS требуется 22 секунды. –

+1

@Jeff Hubbard благодарит за информацию. Мне очень нравится LightOpenID. Я мог бы делать проверку подлинности OpenID без каких-либо проблем. Для меня это достаточно хорошо: P. P.S: Я нашел эту интересную ссылку, смотрящую op association => http://blog.facilelogin.com/2008/05/understanding-openid-association.html – Alfred

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