IdentityServer 3签署证书到期

时间:2017-07-13 09:41:37

标签: x509 identityserver3

使用IdentityServer 3时签名证书(用于签署jwt令牌)到期会发生什么?

我不清楚,我找不到任何文件,除了可以得到一个已经过期的警告。 (参考https://identityserver.github.io/Documentation/docsv2/configuration/events.html

是否有任何机制可以停止使用过期的签名证书? 在验证由过期证书签名的令牌时,客户端(客户端是使用IdentityServer进行身份验证的Web API)会发生什么? (例如,如果https://github.com/IdentityServer/IdentityServer3.AccessTokenValidation用作中间件。)

2 个答案:

答案 0 :(得分:0)

我刚刚测试了这个(在IdentityServer4上)并且似乎继续使用过期的签名证书,这是我的测试证书的有效性:

enter image description here

我能够登录,获取ID令牌和访问令牌,然后使用访问令牌访问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)文档所说的here

  

IdentityServer在运行时引发了许多事件,例如:

     

...剪断

     
      
  • 已过期/无效/无签名证书
  •   
     

默认情况下,这些事件会转发到已配置的日志提供程序 - 自定义事件服务可以以适合环境的任何方式处理或转发它们。

因此,当它已经太晚时,这将是你检测它的方式。更好的选择是定期翻转签名密钥并在密钥的有效期内,这是常见的方法,它还允许在必要时撤销受损密钥。请参阅讨论过程的this issue,基本上IdentityServer可以处理两个密钥:

  

[Middleware刷新]元数据文档......每天一次。

     

元数据文档可以容纳2个密钥 - 主要和次要,并且中间件将在存在时加载和使用两者(JWT具有允许选择正确的密钥标识符)。

     

当您开始翻转时 - 设置两个键并在某些时候交换主要和次要。

答案 1 :(得分:0)

免责声明:我从未使用过IdentityServer3

外界不知道您的证书,因此不知道它已过期。外界只会在以下位置看到您的公钥:

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

或更准确地说:

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

您可以尝试以下操作:在启动时创建一个新证书(请参见https://gist.github.com/mykeels/408a26fb9411aff8fb7506f53c77c57a)。即使将TimeSpan设置为一分钟,它也将继续工作。

但是,一旦您等待1分钟并重新启动IdentityServer,则从上次登录起的令牌将被视为无效,因为它是使用现已过时的签名密钥创建的。已根据新的公钥对其进行了检查,但失败了。

似乎建议定期用新证书替换您的证书,同时还要保留以前的密钥,请参阅“签署密钥过渡”: https://docs.identityserver.io/en/dev/topics/crypto.html#signing-key-rollover