Истечение срока действия сертификата подписи IdentityServer 3

Что происходит, когда срок действия сертификата подписи (используемого для подписи токенов jwt) истекает при использовании IdentityServer 3?

Мне это непонятно, и я не могу найти никакой документации, кроме того, что можно получить предупреждение о том, что срок ее действия истек. (Ссылка https://identityserver.github.io/Documentation/docsv2/configuration/events.html)

Существует ли какой-либо механизм, который останавливает использование сертификатов подписи с истекшим сроком действия?
И что происходит на стороне клиента (клиентом является веб-API, использующий IdentityServer для аутентификации) при проверке токена, подписанного сертификатом с истекшим сроком действия? (Например, если в качестве промежуточное ПО.)


person Anton    schedule 13.07.2017    source источник


Ответы (2)


Что ж, я только что протестировал это (на IdentityServer4), и, похоже, он продолжает успешно работать с просроченным сертификатом подписи, вот действительность моего тестового сертификата:

введите здесь описание изображения

Я могу войти в систему, получить токен идентификатора и токен доступа, а затем получить доступ к API с токеном доступа. Однако IdentityServer регистрирует предупреждение:

2017-07-13 12:15:54.871 +02:00 [Warning] 
    Certificate "CN=test_expired_signing_certificate" has expired on "13/07/2016 14:14:37"

Это соответствует тому, что говорится в документах IdentityServer (3) здесь:

IdentityServer вызывает ряд событий во время выполнения, например:

обрезать...

  • Просроченный/недействительный/неподписанный сертификат

По умолчанию эти события перенаправляются настроенному поставщику журналов — настраиваемая служба событий может обрабатывать или пересылать их любым способом, подходящим для среды.

Так что это будет ваш способ обнаружить его, когда уже слишком поздно. Лучшим вариантом является периодическое обновление ключей подписи и в течение срока действия ключей. Это распространенный подход, который также позволяет при необходимости отозвать скомпрометированный ключ. См. эту проблему, где обсуждается процесс, в основном IdentityServer может обрабатывать два ключа:

[Промежуточное ПО обновляет] документ метаданных... один раз в день.

Документ с метаданными может содержать 2 ключа — первичный и вторичный, и промежуточное ПО будет загружать и использовать оба, если они присутствуют (JWT имеют идентификатор ключа, который позволяет выбрать правильный).

Когда начнете прокручивать - установите оба ключа и в какой-то момент поменяйте местами первичный и вторичный.

person Matt    schedule 13.07.2017
comment
Кажется, мы также получаем тот же результат; все продолжает работать. Вы проверяете токены локально или используете конечную точку проверки? - person Anton; 13.07.2017
comment
Просто локально с использованием промежуточного программного обеспечения, которое под капотом является проверкой токена носителя jwt от Microsoft (т.е. это то, что использует IdentityServer). - person Matt; 13.07.2017

Отказ от ответственности: я никогда не работал с IdentityServer3

Внешний мир не знает ваш сертификат и, следовательно, не знает, что срок его действия истек. Внешний мир просто видит ваш открытый ключ по адресу:

YourIdentityServer.com/.well-known/openid-configuration

или точнее:

YourIdentityServer.com/.well-known/openid-configuration/jwks

Вы можете поэкспериментировать с этим: создайте новый сертификат при запуске (см. /mykeels/408a26fb9411aff8fb7506f53c77c57a). Даже если вы установите TimeSpan на одну минуту, он продолжит работать.

Но как только вы подождете 1 минуту и ​​перезапустите свой IdentityServer, ваш токен из последнего входа будет считаться недействительным, поскольку он был создан с устаревшим ключом подписи. Он сверяется с новым открытым ключом и терпит неудачу.

Кажется, рекомендуется периодически заменять ваш сертификат новым, сохраняя при этом предыдущий ключ, см. обновление ключа подписи: https://docs.identityserver.io/en/dev/topics/crypto.html#signing-key-rollover

person Heinzlmaen    schedule 01.10.2020