Доступ к самоподписанному сервису HTTPS C # из другого сервиса C # в Ubuntu - PullRequest
1 голос
/ 08 октября 2019

Я запускаю самоподписанный (HTTPS) веб-сервер C # для локального тестирования. Я не могу получить доступ к этому C # application-1 из других приложений c #, работающих на том же ПК. Другие приложения показывают ошибку

System.Net.Http.HttpRequestException:
System.Net.Http.CurlException: Peer certificate cannot be authenticated with given CA certificates

Мой сертификат не подписан CA. Но я запускаю свое приложение только в моей системе. Также я добавил свой сертификат в доверенное корневое хранилище CA, используя следующую команду

certutil -d sql: $ HOME / .pki / nssdb -A -t "P ,," -n "localhost" -я localhost.crt

Но все равно получил ту же ошибку из второго приложения c #. Моя системная ОС - Ubuntu 16.04

Ответы [ 2 ]

1 голос
/ 09 октября 2019

HttpHandler имеет ServerCertificateCustomValidationCallback, который вы можете переопределить для выполнения пользовательской проверки сертификата.

private HttpClient CustomHttpClient()
{
    return new HttpClient(
        new HttpClientHandler
        {
            ServerCertificateCustomValidationCallback = cert_validation,
        }); 
}

private bool cert_validation(HttpRequestMessage reqMsg, X509Certificate2 cert, X509Chain certChain, SslPolicyErrors policyErrors)
{
    //custom validation
    return true;
}
1 голос
/ 08 октября 2019

Вам нужно 3 cert / private_key 1_root 2_intermediate 3_application

3_application на ваше приложение (не забудьте сгенерировать с правильным cname / alias для хоста и IP)

И публичная частькорневого и промежуточного (CA) добавления / установки в системе, которая запускает второе приложение

Этот сценарий должен помочь https://github.com/nicholasjackson/mtls-go-example/blob/master/generate.sh

...