У меня в кластере два приложения WebAPI. Оба приложения работают на каждом узле. Оба они используют ядро asp.net и Weblistener. Следуя совету здесь, я настроил их обоих для прослушивания http и https на порту 80, и 443 соответственно.
Https защищен с помощью того же сертификата и настроен с использованием, например, привязки конечной точки (?), Как обсуждалось здесь. У меня все нормально работало с самоподписанным сертификатом, но возникла проблема, когда дело дошло до замены сертификата на правильный. Эффективная имитация смены сертификата.
Я добавил новый сертификат в хранилище ключей и развернул его в кластере. Когда дело дошло до повторной публикации моих приложений с новой ссылкой на сертификат, это не помогло с этим ошибка ConfigurePortCertificate: httpsPort=443, certStoreName My, certfindvalue {SSLCertFingerPrint}, error AlreadyExists
. Что теперь имеет смысл ..
Поскольку оба приложения работают на каждом узле, и мы пытаемся обновить одно из них, происходит следующее:
- WebAPI1 имеет Cert_A, привязанный к https: 443.
- WebAPI2 имеет Cert_A, привязанный к https: 443 (и это нормально, это один и тот же сертификат)
- Попытка обновить WebAPI1 с помощью Cert_B.
- Публикуется в кластере, пытается привязать Cert_B к https: 443
- Ошибка из-за того, что другой сертификат (Cert_A) уже привязан к https: 443
Единственный обходной путь, который я нашел для этого, - отключить каждую систему, которая использует Cert_A на https: 443, и повторно опубликовать все приложения, используя новый Cert_B.
Это довольно неприемлемо (например, я явно делаю что-то не так), чтобы отключить основные части системы для изменения сертификатов.
Какие у меня здесь варианты?
Kestrel по-другому управляет https? Мог бы я столкнуться с подобными проблемами, сделав что-то вроде ... вместо того, чтобы сертификаты размещались локально (то есть через подготовку виртуальной машины), я мог бы запросить последний сертификат из keyvault. Я мог бы предоставить Kestrel сертификат, предоставленный неверсированным URL-адресом для хранилища ключей (который получает последний сертификат). Затем, я полагаю, все, что мне нужно сделать, это перезапустить службы (например, опубликовать обновление), и они начнут использовать новейший сертификат. Однако я понимаю, что Kestrel - это в настоящее время не «поддерживается» для использования на внешних веб-серверах.
Я бы тоже был лучше
- Использование шлюза (например, шлюза приложений) и размещение всех моих служб WebListener на разных портах, защищенных с помощью HTTPS.
- Использование шлюза и использование Kestrel, разные или одинаковые порты
- Используя защищенный https-шлюз и мои службы работают на разных портах, не беспокойтесь о https внутри.
Или есть простое решение моей проблемы, которого я не осознаю?
Заранее спасибо!
Прошу прощения за неправильную терминологию, пожалуйста, поправьте меня.