У меня есть API-интерфейс ASP.NET, который я бы хотел использовать с ssl. В настоящее время сервер использует самозаверяющий сертификат, и в этот момент разрешены как http, так и https. У меня очень простой тестовый клиент, который отлично работает для http, но не работает для https. Я хотел бы знать, как изменить код клиента ниже, чтобы он работал с https. В настоящее время IE, Firefox и Chrome могут подключаться к веб-API, используя как http, так и https (с предупреждениями о сертификатах), поэтому это заставляет меня думать, что мне не нужно ничего изменять на сервере, как раз в клиентском коде. Здесь код клиента:
static void Main(string[] args)
{
try
{
if (args.Length != 1)
{
Console.WriteLine("Please provide a url, and only a url.");
return;
}
var url = new Uri(args[0]);
var urlAuthority = url.GetLeftPart(UriPartial.Authority);
var urlPathQuery = args[0].Substring(urlAuthority.Length);
HttpClient client = new HttpClient();
client.BaseAddress = new Uri(urlAuthority);
HttpResponseMessage response = client.GetAsync(urlPathQuery).Result;
if (response.IsSuccessStatusCode)
Console.WriteLine(response.Content.ReadAsAsync<string>().Result); // expecting scalar results only
else
Console.WriteLine("{0} ({1})", (int)response.StatusCode, response.ReasonPhrase);
}
catch (Exception ex)
{
Exception tempEx = ex;
while (tempEx != null)
{
Console.WriteLine(tempEx.Message);
tempEx = tempEx.InnerException;
}
}
}
Когда я запускаю вышеуказанный код с моим http-url, он отлично работает. Когда я меняю URL-адрес на https, печатаются следующие ошибки:
One or more errors occurred.
An error occurred while sending the request.
The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel.
The remote certificate is invalid according to the validation procedure.
У меня есть вопрос, должен ли клиент вручную отправить открытый ключ на сервер, чтобы он знал, как отправить зашифрованный ответ, или если это происходит автоматически за кулисами? И, во-вторых, теперь, увидев последнюю ошибку, мне интересно, нужно ли мне делать что-то еще внутри клиента, чтобы игнорировать предупреждения о сертификате и просто доверять, что этот сертификат в порядке, чтобы продолжить?