Соединение отклонено между контейнерами Docker с SSL в .NETC#

Место общения программистов C#
Ответить
Anonymous
 Соединение отклонено между контейнерами Docker с SSL в .NET

Сообщение Anonymous »

У меня есть два проекта веб-API ASP.NET Core 8 на C#: FrontEnd и DataLayer. DataLayer подключается к базе данных, а FrontEnds подключается к DataLayer.
И проекты, и база данных находятся в Docker в локальной среде разработки.
Решение содержит:
  • Несколько файлов
  • Docker Compose
  • DataLayer API
  • FrontEnd API
  • Другие проекты, такие как уровень React и модульное тестирование
В Docker Compose я запускаю оба проекта. Основная идея заключается в работе с SSL по нескольким причинам, поэтому переход на http невозможен. Я работаю в Visual Studio 2022 в Windows, а докеры используют книжного червя Debian.
В моем файле etc/hosts я настроил:

Код: Выделить всё

127.0.0.1 FrontEnd
127.0.0.1 DataLayer
Поэтому, когда я использую клиент REST, оба проекта работают нормально со следующими URL-адресами:

Код: Выделить всё

https://FrontEnd:8083/
https://DataLayer:8081/
Я создал два самоподписанных сертификата с помощью openssl с помощью следующей команды в каталоге с именем certs внутри моего решения:

Код: Выделить всё

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout DataLayer.key -out DataLayer.crt -subj "/CN=DataLayer"

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout FrontEnd.key -out FrontEnd.crt -subj "/CN=FrontEnd"
и я использую следующий файл Docker Compose:

Код: Выделить всё

version: '3.4'

networks:
marketApp:
driver: bridge

services:

markettooldatalayer:
image: ${DOCKER_REGISTRY-}markettooldatalayer
build:
context: .
dockerfile: MarketToolDataLayer/Dockerfile
environment:
- ASPNETCORE_ENVIRONMENT=Development
- ASPNETCORE_HTTP_PORTS=8080
- ASPNETCORE_HTTPS_PORTS=8081
ports:
- "8080:8080"
- "8081:8081"
volumes:
- ${APPDATA}/Microsoft/UserSecrets:/home/app/.microsoft/usersecrets:ro
- ${APPDATA}/ASP.NET/Https:/home/app/.aspnet/https:ro
- ./certs/DataLayer.crt:/etc/ssl/certs/DataLayer.crt
- ./certs/DataLayer.key:/etc/ssl/private/DataLayer.key
- ./certs/FrontEnd.crt:/etc/ssl/certs/FrontEnd.crt
user: root
networks:
- marketApp

markettoolfrontend.server:
image: ${DOCKER_REGISTRY-}markettoolfrontendserver
build:
context: .
dockerfile: MarketToolFrontEnd/MarketToolFrontEnd.Server/Dockerfile
environment:
- ASPNETCORE_ENVIRONMENT=Development
- ASPNETCORE_HTTP_PORTS=8082
- ASPNETCORE_HTTPS_PORTS=8083
ports:
- "8082:8082"
- "8083:8083"
volumes:
- ${APPDATA}/Microsoft/UserSecrets:/home/app/.microsoft/usersecrets:ro
- ${APPDATA}/ASP.NET/Https:/home/app/.aspnet/https:ro
- ./certs/FrontEnd.crt:/etc/ssl/certs/FrontEnd.crt
- ./certs/FrontEnd.key:/etc/ssl/private/FrontEnd.key
- ./certs/DataLayer.crt:/etc/ssl/certs/DataLayer.crt
user: root
networks:
- marketApp
Я настроил свой dataLayer appsettings.json со следующей конфигурацией Kestrel:

Код: Выделить всё

  "Kestrel": {
"Endpoints": {
"Https": {
"Url": "https://*:8081",
"Certificate": {
"Path": "/etc/ssl/certs/DataLayer.crt",
"KeyPath": "/etc/ssl/private/DataLayer.key"
}
}
}
},
а для FrontEnd я использую следующий URL:

Код: Выделить всё

https://DataLayer:8081
Этот способ, который я только что описал, заключается в том, что я часто сталкиваюсь с сертификатом и именем CN, и через некоторое время я просто пропускаю ошибку сертификата, но теперь я получаю следующую ошибку внутри внутреннее исключение, когда RestSharp подключается к уровню данных:

Соединение отклонено (datalayer:8081)

Обновление: в одной группе/сервисе контейнеры разные:
Изображение

Также добавлено

Код: Выделить всё

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls13;
на вызов RestSharp. из внешнего контейнера в контейнер уровня данных это нормально
Что мне здесь не хватает? Любой комментарий, ответ или идея будут оценены по достоинству.
Заранее спасибо

Подробнее здесь: https://stackoverflow.com/questions/786 ... ssl-in-net
Ответить

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

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

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

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

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