Я реализовал небольшое приложение, в котором с помощью 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
YARP RemoteCertificateNameMismatch при использовании сертификата настройки с запросом ⇐ C#
Место общения программистов C#
1716967955
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
};
});
И вот запрос принят. Но я не думаю, что так должно быть.
[b]При отладке RemoteCertificateValidationCallback я заметил, что в экземпляре объекта-отправителя есть свойство называется TargetHostName, для которого установлено значение «localhost». Это то имя, которое имеется в виду? Конечно, «localhost» не является частью сертификатов SAN. Как мне решить эту проблему?[/b]
Ниже приведен пример файла конфигурации, который используется 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"
}
}
}
}
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/78494404/yarp-remotecertificatenamemismatch-when-using-set-up-certificate-with-request[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия