Как использовать X509SecurityToken в качестве токена ActAs и убедиться, что у вызывающей стороны есть закрытый ключ?

Я реализовал STS, которая позволяет клиентам проходить аутентификацию с использованием сертификатов X509. WIF (теперь встроенный в .NET 4.5) имеет класс X509SecurityToken, который отлично подходит для этого сценария. В моем случае я также хотел бы передать токен ActAs, но мне кажется, что хотя токены ActAs проверяются (другим набором обработчиков токенов), для X509SecurityToken эта проверка НЕ ​​выполняется. доказать, что вызывающая сторона обладает закрытым ключом, как это происходит, когда токен используется в качестве учетных данных сообщения.

Есть ли способ обойти это? Как я могу потребовать, чтобы токен ActAs доказал, что у него есть закрытый ключ?


person Mark    schedule 05.11.2013    source источник
comment
Согласитесь, было бы не очень хорошей идеей использовать открытый ключ для аутентификации. Что, если токен был подписан закрытым ключом?   -  person paparazzo    schedule 05.11.2013
comment
@Blam: звучит хорошо, но X509SecurityToken, кажется, не поддерживает это?   -  person Mark    schedule 05.11.2013
comment
Я не знаком с X509SecurityToken, но обычно так работает PKI. В безопасности должно быть что-то, что делает это.   -  person paparazzo    schedule 05.11.2013
comment
@Blam: я согласен, но это, конечно, неочевидно, и в документации об этом не упоминается.   -  person Mark    schedule 05.11.2013
comment
Чтобы ответить на цель сертификата X509. Если цепочка была подписана кем-то вроде Go Daddy, вы знаете, что, по крайней мере, Go Daddy считает, что вы тот, за кого себя выдаете, и извлекает открытый ключ.   -  person paparazzo    schedule 06.11.2013
comment
Блам: нет, это означает, что я знаю, что GoDaddy считает, что тот, кому они выдали сертификат, является тем, за кого они себя выдавали, но я не могу знать, что сертификат был выдан моему звонящему, потому что у меня нет доказательств того, что мой звонящий есть закрытый ключ...   -  person Mark    schedule 06.11.2013
comment
Вам нужно изучить PKI. msdn.microsoft.com/en -us/library/windows/desktop/ Что касается вопроса об использовании X509Security, то он очень ясен в ссылке в вашем вопросе. X509SecurityToken можно использовать для подписи, шифрования и передачи учетных данных безопасности в сообщении SOAP.   -  person paparazzo    schedule 06.11.2013
comment
Я понимаю ПКИ. В этом случае, однако, кажется, что ничего не подписано и не зашифровано.   -  person Mark    schedule 07.11.2013
comment
Очевидно, вы не понимаете PKI. Ничего не подписано и не зашифровано, потому что вы ничего не подписывали и не шифровали. Какая часть X509SecurityToken может использоваться для подписи, шифрования и передачи учетных данных безопасности в сообщении SOAP, неясно? Вы подписали или зашифровали SOAP-сообщение?   -  person paparazzo    schedule 07.11.2013
comment
Вы не поняли моего вопроса. Я знаю, для чего можно использовать сертификат, это НЕ вопрос.   -  person Mark    schedule 08.11.2013
comment
Заявленный вопрос: для чего будет использоваться X509SecurityToken? Это единственный? отметка. И ответ находится в ссылке X509SecurityToken можно использовать для подписи, шифрования и передачи учетных данных безопасности в сообщении SOAP. Что в мире заставляет вас полагать, что X509SecurityToken является идеальным инструментом для подписи сертификата X509, когда ничто в документации не указывает, что целью X509SecurityToken является подписание сертификата X509.   -  person paparazzo    schedule 08.11.2013
comment
На самом деле, первый вопросительный знак является важным (тот, который вы указали, является вторым, и этот вопрос начинается с префикса, если нет): Другими словами, любой, у кого есть общедоступный сертификат, может использовать его для аутентификации в оказание услуг. Есть ли способ обойти это?   -  person Mark    schedule 08.11.2013
comment
Кроме вас, я подозреваю, что никакая другая служба не будет аутентифицироваться на основе держателя общедоступных данных.   -  person paparazzo    schedule 08.11.2013
comment
Именно, что заставляет меня задаться вопросом, почему существует метод ChannelFactory.Credentials.ClientCertificate.SetCertificate(), если нет доказательств того, что клиент владеет закрытым ключом.   -  person Mark    schedule 08.11.2013
comment
Вы смогли присвоить сертификату X509 SetCertificate, что у вас нет закрытого ключа, и при этом применить безопасность сообщений или транспорта?   -  person paparazzo    schedule 08.11.2013
comment
Ну, на самом деле нет, и теперь, кажется, я знаю, где разрыв. Я обновлю вопрос.   -  person Mark    schedule 09.11.2013


Ответы (1)


Предоставление открытого ключа или сертификата X509 не доказывает, что я являюсь владельцем закрытого ключа.
Цель не в этом.

Но подписанный сертификат также не доказывает, что я являюсь владельцем закрытого ключа.

Если я отправлю вам фотографию Джорджа Буша с автографом, и вы подтвердите, что подпись подлинная и что на фотографии Джордж Буш, докажет ли это, что я Джордж Буш?

Способ, которым вы подтверждаете, что я Джордж Буш, заключается в том, что вы отправляете мне случайный вызов (в старые времена это называлось объявлением), и я подписываю его своим личным ключом.
Затем вы проверяете подпись, используя открытый ключ (через сертификат x509).
Целью сертификата является идентификация лица с сертификатом, а не владельца закрытого ключа.
И он действительно не подтверждает, что я Джордж Буш.
Он просто подтверждает, что на данный момент у меня есть закрытый ключ.

На самом деле, если бы аутентификация была основана на подписанном сертификате, вы могли бы пройти аутентификацию на любом сервере, который прошел аутентификацию, исходя из ошибочного предположения, что подписанный сертификат доказывает, что я являюсь владельцем закрытого ключа.

Ваше замешательство связано не только с PKI, но и с безопасностью в целом.
Чтобы зашифровать канал, ключ шифрования меняется каждые x периодов времени.

person paparazzo    schedule 07.11.2013
comment
Для справки, я не тот, кто проголосовал за ваш ответ. Я действительно понимаю, как работает PKI, но я не думаю, что вы понимаете, как работает WS-Security, особенно в контексте токенов безопасности X509. В WS-Security сервер не отправляет случайный вызов для подписи клиентом (через HTTP, клиент говорит первым), но клиент ДОЛЖЕН что-то подписать, чтобы доказать, что у него есть закрытый ключ. Я полагаю, что это входит в ключ доказательства? В любом случае, похоже, вы не знаете. - person Mark; 08.11.2013
comment
@Mark Я притворялся, что знаю внутреннюю работу. Я знаю ответ на повторяющийся вопрос означает, что я знаю ответ, но не обязательно, как ответить. Какую проблему вы действительно должны решить? Почему бы не использовать WSE? СТС старый. - person paparazzo; 08.11.2013
comment
ВФБ? Например, расширения веб-служб? Какой последний был выпущен в 2005 году? Вы вообще знаете, что такое STS (Security Token Service)? - person Mark; 08.11.2013
comment
В 3-й раз. Согласно документации X509SecurityToken используется для подписи, шифрования и передачи учетных данных безопасности в сообщении SOAP. Если документация неверна, обратитесь в Microsoft. msdn.microsoft.com/en- мы/библиотека/ - person paparazzo; 08.11.2013