jjwt解析jwt时公钥不安全The verification key‘s size is 1024 bits which is not secure enough for the RS256....

编程入门 行业动态 更新时间:2024-10-23 11:19:30

jjwt解析jwt时公钥<a href=https://www.elefans.com/category/jswz/34/1770263.html style=不安全The verification key‘s size is 1024 bits which is not secure enough for the RS256...."/>

jjwt解析jwt时公钥不安全The verification key‘s size is 1024 bits which is not secure enough for the RS256....

本次是php项目,做java重构的时候,php代码是可以正常运行的,java代码使用的是jjwt解析jwt,抛出的异常。异常信息大体描述是秘钥格式不符合要求,对于jjwt中有秘钥格式长度校验机制。

原有的RSA算法私钥长度1024已经不符合要求

1、需要重新更换秘钥长度,重新生成更安全的密钥对。

2、考虑去掉秘钥长度校验,还是使用之前的短的秘钥对。

错误堆栈信息

The verification key's size is 1024 bits which is not secure enough for the RS256 algorithm

io.jsonwebtoken.security.WeakKeyException: The verification key's size is 1024 bits which is not secure enough for the RS256 algorithm.  The JWT JWA Specification (RFC 7518, Section 3.3) states that keys used with RS256 MUST have a size >= 2048 bits.  Consider using the io.jsonwebtoken.security.Keys class's 'keyPairFor(SignatureAlgorithm.RS256)' method to create a key pair guaranteed to be secure enough for RS256.  See .3 for more information.at io.jsonwebtoken.SignatureAlgorithm.assertValid(SignatureAlgorithm.java:424)at io.jsonwebtoken.SignatureAlgorithm.assertValidVerificationKey(SignatureAlgorithm.java:315)at io.jsonwebtoken.impl.DefaultJwtParser.parse(DefaultJwtParser.java:364)at io.jsonwebtoken.impl.DefaultJwtParser.parse(DefaultJwtParser.java:513)at io.jsonwebtoken.impl.DefaultJwtParser.parseClaimsJws(DefaultJwtParser.java:573)at com.sprucetec.mall.entrance.api.dto.jwt.JwtTest1.main(JwtTest1.java:46)
Exception in thread "main" java.lang.NullPointerExceptionat com.sprucetec.mall.entrance.api.dto.jwt.JwtTest1.main(JwtTest1.java:54)

解析代码:

jwt解析代码
Claims claims = Jwts.parser().setSigningKey(rsaPublicKey).parseClaimsJws(jwt_token).getBody();
网上有很多类似的代码,都是使用jjwt类来解析jwt解析时使用的公钥:
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDMXEXtLH4nrLgKaWBiYaDDrsRs
/115pAp9RlX4UNnBdsQoLROq6MIxZ0v/pxhJfjFZec8N9HedQgRVImDIqltpmUL9
kxV8+VHKzj3bP3ztZ3PDkZBEYGHH8aQzD/EHy+C1vrz96omXhQGzXnxuN5wc0rlJ
PKAky46qDaWA8MghhwID****(隐藏了)
-----END PUBLIC KEY-----
 

php代码使用这个公钥解析时是可以正常运行的。但是java的解析类就抛出了对应的错误。

从上面的错误信息中可以看出来,由于公钥过短,jwt解析时会判断长度是否符合安全要求,若不符合,将抛出校验安全错误。

深入代码中看下 在DefaultJwtParser类下的parse方法中,有一段对秘钥的安全检查。异常也是这里抛出来的。

algorithm.assertValidVerificationKey(key);


问题找到了。因为校验秘钥安全性,导致的问题。因为秘钥没法替换,只能使用之前的秘钥。不考虑生成新密钥对的,故考虑去掉校验机制。

这时候想是否可以将这个方法覆盖掉。自己重新写一个DefaultJwtParser,去掉这一段秘钥校验逻辑。

自己写一个MyDefaultJwtParser类,类中的的方法完全拷贝DefaultJwtParser,只是去掉了  algorithm.assertValidVerificationKey(key);  这一行

解析正常:

更多推荐

jjwt解析jwt时公钥不安全The verification key‘s size is 1024 bits which is not secure enou

本文发布于:2024-03-08 21:17:20,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1722404.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:不安全   公钥   verification   jwt   jjwt

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!