Возможно ли расшифровывать тикеты проверки подлинности с помощью PHP? - PullRequest
3 голосов
/ 23 февраля 2009

Я разработчик PHP, который почти ничего не знает о .NET. Парни .NET на работе попросили меня перевести код .NET, который расшифровывает билет аутентификации, в PHP, чтобы код PHP мог затем установить соответствующие переменные сеанса для запуска моего приложения. Это вообще возможно? Я смотрю на код, и это сбивает меня с толку. Я буду продолжать пытаться, если кто-то скажет мне, что это не пустая трата времени по какой-то причине, которую я даже не знаю. Спасибо за любую помощь!

Дополнительная информация: Могу ли я вообще получить билет с помощью PHP?

Ответы [ 4 ]

5 голосов
/ 12 июня 2009

Прежде всего, откройте ваш machine.config и добавьте запись с машинным ключом. Установите ключ дешифрования и ключ проверки в соответствии со случайно сгенерированными из генератора машинного ключа для aspnet 2.0.

Обязательно используйте значения по умолчанию, т.е. AES и SHA1. Теперь, когда у вас есть ключ дешифрования AES, сохраните его где-нибудь, потому что он вам понадобится на стороне php. В своем приложении dot net зайдите в web.config и получите имя файла cookie с аутентификацией форм, обычно что-то вроде .ASPXAUTH

Теперь перейдите на сторону PHP. Загрузите и настройте библиотеку шифрования AES, такую ​​как эта, http://phpseclib.sourceforge.net/documentation/

Затем в PHP вы можете сделать что-то вроде этого (для этого используется библиотека phpsec):

set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib');
include('Crypt/AES.php');

$authCookie = $_COOKIE['_ASPXAUTH'];

echo $authCookie;

$aes = new Crypt_AES();

$aes->setKey('BCDCBE123654F3E365C24E0498346EB95226A307857B9BDE8EBA6198ACF7F03C');

echo $aes->decrypt($authCookie);

Теперь то, что в итоге выйдет, будет вначале pm + хэш SHA1 + байтовое представление билета аутентификации. Вы должны преобразовать сериализованные байты в строку, чтобы сделать ее читабельной. Может ли кто-то еще осветить этот последний шаг?

1 голос
/ 23 февраля 2009

Как сказал Гамбо, вам необходимо учитывать задействованные алгоритмы. Билет аутентификации asp.net использует:

  1. Создание сериализованных форм аутентификационный билет. Байтовый массив представление билета создано.
  2. Подпись формы аутентификации билет. Аутентификация сообщения код (MAC) значение для байтового массива вычисляется с использованием алгоритма и ключ, указанный при проверке и validationKey атрибуты элемент machineKey. По умолчанию Используется алгоритм SHA1.
  3. Зашифровать бланк аутентификации. Второй байтовый массив, который был созданный зашифрован с использованием Метод шифрования Класс FormsAuthentication. Метод шифрования внутренне использует алгоритм и ключ, заданные дешифрование и дешифрование атрибуты на машине ключ элемент. ASP.NET версии 1.1 использует алгоритм 3DES по умолчанию. ASP.NET версии 2.0 использует Алгоритм Rinjdael (AES) по умолчанию.
1 голос
/ 23 февраля 2009

С Microsoft KB

Билет проверки подлинности форм используется, чтобы сказать приложение ASP.NET кто ты. Таким образом, билет строит блок проверки подлинности с помощью форм безопасность.

Билет зашифрован и подписан используя конфигурацию элемент сервера Machine.config файл. ASP.NET 2.0 использует decryptionKey и новая расшифровка атрибут элемента зашифровать аутентификацию форм Билеты. Атрибут расшифровки позволяет вы указываете алгоритм шифрования использовать. ASP.NET 1.1 и 1.0 используют 3DES шифрование, которое не настраивается. Фальсификация стоимости билета определяется неспособностью расшифровать Билет на сервере. В результате пользователь будет перенаправлен на вход стр.

Если приложение развернуто в Веб-ферма, вы должны убедиться, что конфигурационные файлы на каждом сервере разделяют одно и то же значение для validationKey и decryptionKey атрибуты в теге, которые используются для перемешивания и расшифровка билета соответственно. Вы должны сделать это, потому что вы не можете гарантировать, какой сервер будет обрабатывать последовательные запросы. Для большего информация о FormsAuthenticationTicket encryption и развертывание веб-фермы соображения, посетите следующее Веб-сайт MSDN:

Итак, вы можете указать, какой алгоритм шифрования / дешифрования следует использовать, и ключ. Вы можете использовать ту же логику дешифрования в PHP.

0 голосов
/ 23 февраля 2009

Если вы знаете алгоритм дешифрования, вы наверняка сможете реализовать его в PHP.

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