C #: SSL с SocketAsyncEventArgs? - PullRequest
       17

C #: SSL с SocketAsyncEventArgs?

7 голосов
/ 07 октября 2010

Я разрабатываю сервер сокетов, используя C # .NET.Я использую асинхронную модель, предоставляемую классом SocketAsyncEventArgs, потому что это должен быть высокопроизводительный сервер для поддержки многих соединений за короткие промежутки времени.Затем я хочу защитить связь между клиентами и сервером и думаю, что мог бы использовать SSL.

Можно ли использовать SSL с моделью SocketAsyncEventArgs?Я знаю, что в .NET есть класс SslStream для защиты SSL, но мне нужно использовать SocketAsyncEventArgs для высокой производительности.

Можно ли использовать SSL на более высоком уровне, не внедряя его в код сервера?

Заранее спасибо.

Ответы [ 3 ]

7 голосов
/ 18 декабря 2014

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

Поскольку SslStream принимает поток в конструкторе, я реализовал свой собственный подтип Stream с базовым MemoryStream для чтения и другим для записи. Я также передаю TcpClient этому объекту.

Я использовал TcpClient для подтверждения связи по настройке SSL-соединения. После аутентификации сервера или клиента, в зависимости от того, как я его использую, я использую два моих MemoryStream для чтения / записи SslStream.

Итак, для асинхронной записи я сначала записываю свою полезную нагрузку в SslStream, который заполняет мой MemoryStream для записи зашифрованными данными. С зашифрованными данными из MemoryStream я заполняю буфер SocketAsyncEventArgs и вызываю метод TcpClient SendAsync. Для чтения это в значительной степени наоборот.

Не могу сказать, что это особенно волнует меня, когда я перемещаю подобные данные, но если вы не позволяете вашим объектам MemoryBuffer постоянно перераспределяться, это не проблема производительности. По крайней мере, таким образом я могу использовать только фреймворк и свой собственный код, не полагаясь на стороннее программное обеспечение.

0 голосов
/ 04 декабря 2010

Я думаю, что, возможно, нашел проект, который обеспечивает это.

https://sourceforge.net/projects/socketservers/

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

Один аспект, в котором я не уверен, это то, что он p / вызывает secur32.dll, а не является чистой реализацией на c #, поэтому я не уверен, что память /это сказывается на производительности.

Сведения на странице проекта sourceforge очень скудны относительно цели проекта.

0 голосов
/ 07 октября 2010

Вы можете использовать стороннюю реализацию протокола SSL / TLS, такую ​​как наш SecureBlackbox , и использовать ее с любым транспортом, включая сокеты .NET в асинхронном режиме.Серверный компонент SSL SecureBlackbox не имеет своего собственного сокета, вместо этого он запускает события, в чьи обработчики вы пишете свой код, связанный с сокетом.Таким образом, вы подключите любой транспорт, даже не один.

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