Чтобы добавить в качестве возможной помощи кому-то еще ... Если вы хотите, чтобы он предложил пользователю установить самоподписанный сертификат, вы можете использовать этот код (измененный сверху).
Не требует прав администратора, устанавливает локальным пользователям доверенные профили:
private static bool ValidateServerCertficate(
object sender,
X509Certificate cert,
X509Chain chain,
SslPolicyErrors sslPolicyErrors)
{
if (sslPolicyErrors == SslPolicyErrors.None)
{
// Good certificate.
return true;
}
Common.Helpers.Logger.Log.Error(string.Format("SSL certificate error: {0}", sslPolicyErrors));
try
{
using (X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser))
{
store.Open(OpenFlags.ReadWrite);
store.Add(new X509Certificate2(cert));
store.Close();
}
return true;
}
catch (Exception ex)
{
Common.Helpers.Logger.Log.Error(string.Format("SSL certificate add Error: {0}", ex.Message));
}
return false;
}
Кажется, это хорошо работает для нашего приложения, и если пользователь нажимает нет, связь не будет работать.
Обновление: 2015-12-11 - Изменен StoreName.Root на StoreName.My - My будет установлен в локальном хранилище пользователей вместо Root. Root на некоторых системах не будет работать, даже если вы «запускаете от имени администратора»