Я предполагаю, что ваш обработчик не имеет доступа к закрытому ключу для аутентификации.
Это может быть вызвано строкой 1 в вашем примере, в которой вы импортируете сертификат с флагами хранилища ключей по умолчанию. Конечно, это всего лишь предположение, и у меня нет вашего сертификата, чтобы проверить это, но вы можете проверить это, вызвав
// Sample for RSA, use DSA if required
var privateKeyParams = ((RSA)certificate.PrivateKey).ExportParameters(true);
, что вызовет CryptographicException («Не поддерживается» или аналогичный), еслиключевые параметры недоступны.
Для загрузки сертификата попробуйте следующее:
X509Certificate2 certificate = new X509Certificate2(
certificateFilePath, "password",
X509KeyStorageFlags.Exportable | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.UserKeySet);
Просто еще один sidenote;Если вы используете это в рабочем коде, обязательно расширьте обратный вызов проверки сертификата сервера (ваша 4-я строка), чтобы фактически проверить сертификат сервера. См. X509Chain.Build , который также позволяет вам изменять параметры проверки в соответствии с вашими потребностями (что на самом деле делает проверка пути, можно прочитать в RFC5280 ).