Сертификат клиента Mono HttpListener

Я создал сервер, используя HttpListener. Он отлично работает без SSL, но с SSL происходит что-то странное.

Я установил сертификат с помощью httpcfg и даже с моей собственной программой, он установил правильно, слушатель запускает и обслуживает HTTPS-запросы, но всегда запрашивает сертификат клиента.

Это не происходит в Windows / .net, только с Linux / mono (я использую ver 3.4.0) и очень раздражает, я не хочу, чтобы пользователь запрашивался каждый раз, когда он пытался войти в систему для клиента сертификат.

Является ли это mono-ошибкой или есть способ отключить согласование сертификата клиента?

Благодарю.

У меня такая же проблема. Я обнаружил, что это жестко закодировано в Mono. В mcs / class / System / System.Net / HttpConnection.cs , когда вызывается конструктор SslServerStream , вы заметите, что requestClientCertificate жестко запрограммирован на true .

Я столкнулся с этим PR, который пытается изменить это hardcoded значение на false , однако в настоящее время он частично отклонен из-за того, что «я скорее не изменю одно твердое значение для другого жестко заданного значения».

[Обновление] И я только сейчас понял, что вы (ОП) являетесь автором PR 🙂

[Обновление 9/21/2016] Похоже, этот вопрос по-прежнему вызывает хиты. Если это кому-то полезно, мы давно пошли с nginx в качестве обратного прокси-сервера, когда мы не смогли решить эту проблему. Я рад, что сделал, и должен был сделать это раньше. Это намного быстрее, чем Mono для обработки SSL / TLS, и позволяет нам более тщательно управлять наборами криптосов и постоянно обновлять патчи безопасности.

Я слежу за Mono 4.6 , который еще не выпущен. С их перестройкой TLS и возможностью подключать альтернативные реализации во время выполнения это может дать нам путь вперед без использования обратного прокси nginx.

Единственные опции, которые есть у одного (еще …):

Используйте запрос Gusman № 1 или № 2 (в зависимости от вашей версии Mono) в качестве обходного пути, который должен быть в порядке для продуктивных сред, если используется исходный код последней версии Mono.

Пример для Mono v4.2.3.4:

 echo -e -n "83c83\n< \t\t\t\tSslServerStream ssl_stream = new SslServerStream (new NetworkStream (sock, false), cert, false, true, false);\n---\n> \t\t\t\tSslServerStream ssl_stream = new SslServerStream (new NetworkStream (sock, false), cert, false, false, false);\n" > nocerts.diff tar xvjf mono-4.2.3.4.tar.bz2 cd mono-4.2.3.4 patch ./mcs/class/System/System.Net/HttpConnection.cs ../nocerts.diff ./configure --prefix=/usr make make install 

Или используйте последнюю версию Mono, которая работает без клиентских сертификатов (это v3.10.0).