YARP RemoteCertificateNameMismatch при использовании сертификата настройки с запросомC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 YARP RemoteCertificateNameMismatch при использовании сертификата настройки с запросом

Сообщение Anonymous »

Я реализовал небольшое приложение, в котором с помощью yarp размещается только пустельга. Он должен работать как шлюз API.
Я настроил Kestrel с сертификатом, который используют все мои приложения, следующим образом:
builder = WebApplication.CreateBuilder(commandlineArguments);
builder.WebHost.ConfigureKestrel(options =>
{
options.ConfigureHttpsDefaults(httpsOptions =>
{
httpsOptions.ServerCertificate = baseCertificate;
});
});

baseCertificate — это экземпляр X509Certificate2, загруженный из хранилища сертификатов Windows.
Я настроил Yarp следующим образом:
// YARP
builder.Services
.AddReverseProxy()
.LoadFromConfig(builder.Configuration.GetSection("yarp"))
.ConfigureHttpClient((context, handler) =>
{
handler.SslOptions.ClientCertificates = new X509CertificateCollection
{
baseCertificate
};
});

Поэтому я использую тот же сертификат.
При выполнении приложений и взаимодействии моих служб через экземпляр YARP (конфигурации для пересылка настроена в файле конфигурации), я столкнулся с ошибкой политики RemoteCertificateNameMismatch!
Я изменил настройку YARP на это:
// YARP
builder.Services
.AddReverseProxy()
.LoadFromConfig(builder.Configuration.GetSection("yarp"))
.ConfigureHttpClient((context, handler) =>
{
handler.SslOptions.RemoteCertificateValidationCallback =
new RemoteCertificateValidationCallback((sender, certificate, chain, policyErrors) =>
{
if(policyErrors != SslPolicyErrors.None)
{
if (certificate == null)
return false;

// THESE HashStrings have the same value! So in this case I accept it as valid.
return certificate.GetCertHashString() == baseCertificateHashString;
}

return true;
});

handler.SslOptions.ClientCertificates = new X509CertificateCollection
{
baseCertificate
};
});

И вот запрос принят. Но я не думаю, что так должно быть.
При отладке RemoteCertificateValidationCallback я заметил, что в экземпляре объекта-отправителя есть свойство называется TargetHostName, для которого установлено значение «localhost». Это то имя, которое имеется в виду? Конечно, «localhost» не является частью сертификатов SAN. Как мне решить эту проблему?
Ниже приведен пример файла конфигурации, который используется yarp.
{
"Urls": "https://myHostName:1234",
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Information",
"Yarp": "Information",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"yarp": {
"routes": {
"service_infrastructure": {
"clusterId": "cluster_infrastructure",
"match": {
"path": "infrastructure/{**catch-all}"
}
},
"service_UserMgmt_UserFrontend": {
"clusterId": "cluster_UserMgmt_UserFrontend",
"match": {
"path": "usermgmt/userfrontend/{**catch-all}"
}
}
},
"clusters": {
"cluster_infrastructure": {
"destinations": {
"destination1": {
"address": "https://localhost:50781"
}
}
},
"cluster_UserMgmt_UserFrontend": {
"destinations": {
"destination1": {
"address": "https://localhost:50792"
}
}
}
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/784 ... th-request
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»