Как добавить пользовательскую проверку SSL в MySql Connector / NET - PullRequest
0 голосов
/ 08 октября 2018

Как вы знаете, в .NET есть

System.Net.Security.RemoteCertificateValidationCallback

, который позволяет вам решить, доверять ли сертификату, отправленному сервером.Вы можете использовать это в SslStream и ServicePointManager.

Теперь я пытаюсь использовать тот же шаблон во время MySql Connector / NET.В MySql на стороне сервера я установил самоподписанный сертификат.Когда я использую опцию SslMode=VerifyCA в клиенте (на основе MySql Connector / NET), соединение не удалось, потому что мой ЦС не является доверенным на стороне клиента.

Я знаю, что могу просто добавить сертификат ЦС к клиентусистемная зона доверия, но это решение не переносимо.

Итак, проблема в том, существует ли какой-либо MySql Connector / NET API, который позволяет пользователю предоставлять RemoteCertificateValidationCallback или что-то в этом роде?

Спасибомного:)

Ответы [ 3 ]

0 голосов
/ 08 октября 2018

Переключиться на библиотеку MySqlConnector , которая добавляет параметр CACertificateFile в строку подключения (подробнее здесь ).

Когда вы используете этот параметр и указываете файл PEM для сертификата CA, это сделает SslMode=VerifyCA в вашей строке подключения желаемым эффектом проверки вашего пользовательского сертификата SSL.

0 голосов
/ 11 октября 2018

Как говорит @ bradley-grainger, в сторонней библиотеке MySqlConnector есть аргумент Connection String, называемый "CACertificateFile", который позволяет доверять сертификату CA, который не находится в зоне доверия системы.

К сожалению, эта опция недоступна в официальном соединителе / ​​NET.И по некоторым причинам я не могу переключиться на библиотеку MySqlConnector.

Так что я просто разветвил официальный репозиторий Connector / NET в github и добавил к нему функцию «CACertificateFile», это прекрасно решило мою проблему.

Если вы столкнетесь с такой же ситуацией, я думаю, это будет полезно.

см. https://github.com/liuziangexit/mysql-connector-net/commit/d22652036ece49f8d2f48d10b0bdc57f92e22c26, на основе официального источника 6.10.8.

0 голосов
/ 08 октября 2018

Существует ли MySql Connector / NET API, который позволяет пользователю предоставлять RemoteCertificateValidationCallback или что-то в этом роде?

Нет, нет.Либо сертификат должен быть приемлем для машины, либо вы используете незашифрованное соединение.

Я знаю, что могу просто добавить сертификат CA в зону доверия системы клиента, но это решение не переносимо.

Если вам нужно, чтобы это было переносимо, вам нужно получить сертификат от доверенного центра сертификации, такого как Symantec, DigiCert, GeoTrust и т. Д. В противном случае вам просто придется прикусить при добавленииВаш самоподписанный сертификат в хранилище сертификатов на каждом компьютере, подключенном к БД.

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