我已经创建了一个基本的JWT生成器,但需要几个方面的建议。我一直在使用JWT. io的指南和Auth0/java-jwt库/repo来生成令牌。
JWT使用两个不同的密钥进行签名。
使用RSA512算法,使用4096位密钥对刷新令牌进行签名。
.sign(Algorithm.RSA512(rsaPublicKey, rsaPrivateKey));
访问令牌正在通过RSA256算法用1024位RSA密钥签名。
.sign(Algorithm.RSA256(rsaPublicKey, rsaPrivateKey));
由于4096位验证过程需要更长的时间,我在“速度”方面提出了建议,但由于刷新令牌的请求似乎较少,安全性的权衡似乎是公平的。
另一方面,访问令牌在资源服务器endpoint进行验证,并且它们发送得更频繁,所以我选择了一个更短的(256)签名,它是用更快的1024位密钥预先形成的。
我知道钥匙“实际上”是不可能被打破的。。。但建议使用旋转键吗?
我将jks(keystore)保存在auth服务器和资源服务器上的私有文件夹中。keystore保存两个密钥对,一个用于刷新令牌签名/验证,一个用于访问令牌签名/验证。
我需要刷新/形成新密钥吗?如果是的话。。。多久?推荐的方法是什么?
负载均衡器后面可能有多个身份验证和资源微服务的实例...所以RAM生成的密钥是否定的,因为它们不会在实例之间传播。
例如,每隔15秒,EC2身份验证服务器和资源服务器就会ping密钥服务器,请求当前jks的副本(以及版本检查)。
有什么建议吗?
非常感谢。
将RSA密钥更正为2048位,这是当前建议的大小(2020年)。
1024位RSA密钥被视为弱密钥,NIST禁止在处理高度机密信息时使用。(提示:中央认证系统是保密的)。只要有足够的计算能力,它就可以被破解,记住任何大型组织都无法使用10k CPU访问数据中心。
4096个密钥是可能的,但验证速度可能比2048慢10倍(复杂性与大小不成线性关系)。仔细考虑性能影响。认证令牌将在任何地方使用,并经过无数次验证。
有关SSL证书应使用的RSA密钥长度,请参阅相关答案。
假设JWT沿着OpenID Connect(OIDC)使用。
活动的JWT公钥可以在像/这样的endpoint上从OIDC服务器获得。知名/钥匙
。请参阅OIDC服务器的文档。
应用程序应该在启动时检索公钥,并定期刷新它们。没有关于频率的正式标准?
现有令牌在其签名密钥被旋转关闭时失效,如果应用程序没有跟上新的签名密钥,则不接受新令牌。因此,有必要考虑事情能否顺利进行。
我个人的建议是确保最大的安全性和最小的麻烦,管理大型组织中数千个系统中数千个应用程序的单点登录。
//始终按按键
。一个活动密钥和一个等待替换的未来密钥
顺便说一句,时间线从来都不是以秒为单位的,有趣的是这个问题提到了秒。
身份验证系统依赖于公司中的一切,当“一切”(数千个服务)试图每隔几秒钟(甚至几分钟)ping相同的服务时,这是理解永久意外DDoS概念的快速方法。
JWT的主要目标之一就是不需要中央服务来验证令牌(一个大规模的、不断加载的单点故障)。您可以通过在启动时(假设您运行的服务定期重新启动)仅远程加载签名密钥来实现限制依赖性的目标。
Targets key To be discussed in order to avoid _Warning: potential malicious behavior - trust data has insufficient signatures for remote repository .dkr.ecr.us-east-1.amazonaws.com/app: valid signatur
Snapshot key To rotate the snapshot key: ❯ notary -D -v -s https://127.0.0.1:4443 -d ~/.docker/trust key rotate <aws_account_id>.dkr.ecr.us-east-1.amazonaws.com/app snapshot -r Enter passphrase for ne
Timestamp key The timestamp key can also be rotated: ❯ notary -D -v -s https://127.0.0.1:4443 -d ~/.docker/trust key rotate <aws_account_id>.dkr.ecr.us-east-1.amazonaws.com/app timestamp -r Enter the
我在GCP中有一个服务帐户,我将其密钥保存在一个秘密管理器中。 是否有办法为该保密服务帐户密钥设置计划的秘密轮换,以便发布/订阅将是GCP密钥,而不是由我管理?GCP是否提供此类托管发布/订阅服务?
我目前正在使用Aptana Studio3.6.1(一个带有一些PHP语法修复的自定义构建)。我使用SFTP将文件从我的项目上传到一个测试站点,使用发布工具(项目顶部的上传/下载箭头)。 最近,我变得无法上传文件。WinSCP可以很好地执行这些操作,并且我可以在使用PuTTY或普通旧OpenSSH时将SSH插入服务器而没有问题。然而,Aptana却大发雷霆: auth.log(带有LogLevel
我正在升级一个平台上的安全。但是,我无法破解如何安全地存储我的加密/解密密钥。 当前安装程序: MySQL Server Webserver 我需要使用aes_encrypt/aes_decrypt存储和读取数据库中的所有敏感数据。但是,加密/解密数据的密钥我想要安全地存储。因此,当某人获得数据库或Web服务器的访问权时,他们将无法轻易猜出组合键或从配置文件中读取组合键。 密钥可以根据我需要读/写