nacos2.2启动报错The specified key byte array is 16 bits which is not secure enough for any JWT HMAC-SHA

  • Post author:
  • Post category:其他



1. 问题描述

这几天搭建了一个微服务项目,使用nacos2.2来做注册和配置中心,但是启动nacos的时候发现报错,查看log后发现报的是,


Caused by: io.jsonwebtoken.security.WeakKeyException: The specified key byte array is 16 bits which is not secure enough for any JWT HMAC-SHA algorithm.  The JWT JWA Specification (RFC 7518, Section 3.2) states that keys used with HMAC-SHA algorithms MUST have a size >= 256 bits (the key size must be greater than or equal to the hash output size).  Consider using the io.jsonwebtoken.security.Keys#secretKeyFor(SignatureAlgorithm) method to create a key guaranteed to be secure enough for your preferred HMAC-SHA algorithm.  See https://tools.ietf.org/html/rfc7518#section-3.2 for more information.

at io.jsonwebtoken.security.Keys.hmacShaKeyFor(Keys.java:96)

at com.alibaba.nacos.plugin.auth.impl.JwtTokenManager.processProperties(JwtTokenManager.java:75)

… 47 common frames omitted


2. 解决方案

废了半天劲终于在nacos官网上找到了答案,nacos2.2是默认开启鉴权的,所以需要在application.properties中的配置信息。在nacos2.2的application.properties找到nacos.core.auth.default.token.secret.key,默认情况下nacos.core.auth.default.token.secret.key是没有值得,所以导致启动nacos后报上面的错,根据官网说的,需要在启动nacos前给nacos.core.auth.default.token.secret.key填个256bit的token值,也可以复制官网上给的默认token值


SecretKey012345678901234567890123456789012345678901234567890123456789


,这样问题就解决了。


下面的是官网给出的解决方案。

自定义密钥

开启鉴权之后,你可以自定义用于生成JWT令牌的密钥,application.properties中的配置信息为:

注意:

  1. 文档中提供的密钥为公开密钥,在实际部署时请更换为其他密钥内容,防止密钥泄漏导致安全风险。
  2. 在2.2.0.1版本后,社区发布版本将移除以文档如下值作为默认值,需要自行填充,否则无法启动节点。
  3. 密钥需要保持节点间一致,长时间不一致可能导致403 invalid token错误。
### The default token(Base64 String):
nacos.core.auth.default.token.secret.key=SecretKey012345678901234567890123456789012345678901234567890123456789

### 2.1.0 版本后
nacos.core.auth.plugin.nacos.token.secret.key=SecretKey012345678901234567890123456789012345678901234567890123456789

自定义密钥时,推荐将配置项设置为

Base64编码

的字符串,且

原始密钥长度不得低于32字符

。例如下面的的例子:

### The default token(Base64 String):
nacos.core.auth.default.token.secret.key=VGhpc0lzTXlDdXN0b21TZWNyZXRLZXkwMTIzNDU2Nzg=

### 2.1.0 版本后
nacos.core.auth.plugin.nacos.token.secret.key=VGhpc0lzTXlDdXN0b21TZWNyZXRLZXkwMTIzNDU2Nzg=

注意:鉴权开关是修改之后立马生效的,不需要重启服务端。



版权声明:本文为dawei1980原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。