Почему SslStream.AuthenticateAsServer не работает из Ubuntu, но не из Windows 10 - PullRequest
0 голосов
/ 05 июля 2019

Сбой метода SslStream.AuthenticateAsServer из Ubuntu, но не из Windows 10.

При реализации примера SslStrem из https://docs.microsoft.com/en-us/dotnet/api/system.net.security.sslstream?view=netframework-4.8 Он отлично работает при выполнении в Windows 10, но при выполнении в Ubuntu Iполучить следующее исключение при вызове sslStream.AuthenticateAsServer:

System.NotSupportedException: в режиме сервера SSL должен использовать сертификат со связанным закрытым ключом.

У меня естьпопытался использовать serverCertificate = X509Certificate2.CreateFromCertFile(certificate) вместо serverCertificate = X509Certificate.CreateFromCertFile(certificate), но безрезультатно.

Сертификаты генерируются с помощью OpenSSL, и при выполнении проверки модуля все ключи и сертификаты действительно совпадают.Сертификат сервера подписан сертификатом CA.Сертификаты генерируются с использованием длинного ответа jww на Как подписать запрос на подпись сертификата с вашим центром сертификации?

То же самое к лету: при вызове sslStream.AuthenticateAsServer on Ubuntu (но не в Windows 10) выдается следующее исключение: System.NotSupportedException: в режиме сервера SSL должен использовать сертификат с соответствующим закрытым ключом.

Я использую.Среда net-core (очевидно, необходимая для запуска в Linux): -)

Это не то же самое, что предложенный возможный дубликат X509Certificate2. В режиме сервера SSL должен использовать сертификат со связанным закрытым ключом потому что он отвечает, как генерируется сертификат.Тем не менее, ответ drake7707 на Ответ Марка Юаня дал мне подсказку.

Таким образом, проблема решается следующим образом: Замените строку кода

serverCertificate = X509Certificate.CreateFromCertFile(certificate);

с

serverCertificate = new X509Certificate2(certificate);

и измените его объявление с

static X509Certificate serverCertificate = null;

на

static X509Certificate2 serverCertificate = null;

Итак, в итоге, использование X509Certificate2 действительно,решить проблему.

1 Ответ

0 голосов
/ 05 июля 2019

Таким образом, проблема решается следующим образом: замените строку кода

serverCertificate = X509Certificate.CreateFromCertFile(certificate);

на

serverCertificate = new X509Certificate2(certificate);

и измените ее объявление с

static X509Certificate serverCertificate = null;

на

static X509Certificate2 serverCertificate = null;

Итак, в итоге, использование X509Certificate2 фактически решает проблему.

...