我刚刚完成从早期基于 Wildfly 的 keycloak 到 Keycloak 25(基于 Quarkus)的升级。除了密钥库之外,我的一切都正常。我们使用的 P12 密钥库包含绑定到与密钥库本身不同的密码的证书(别名?)。
我注意到 keycloak 提供的默认属性不提供此选项,因此我采取了使用 quarkus 属性的方法。
我尝试使用这些属性:
quarkus.http.ssl.certificate.key-store-file=<p12 path>
quarkus.http.ssl.certificate.key-store-password=<password>
quarkus.http.ssl.certificate.key-store-alias=<alias cert name>
quarkus.http.ssl.certificate.key-store-alias-password=<different password>
我也尝试过:
quarkus.http.ssl.certificate.key-store-key-alias=<alias cert name>
quarkus.http.ssl.certificate.key-store-key-password=<different password>
当我设置这些时,keycloak 实例总是失败:
java.security.UnrecoverableKeyException: Get Key failed: Given final block not properly padded. Such issues can arise if a bad key is used during decryption
我已经验证了这个密码,并且实际上是使用剪贴板粘贴的,以避免人为错误。如何让 keycloak 实例在此设置中工作?
我明白了!
如果您严格遵循该文档,那么该文档是不正确的...
quarkus 和 keycloak 属性是故意分开的,不能在同一个配置文件中设置。 (在拉取请求中找到了这个)
文档声明定义 quarkus.properties 文件并将其放置在 conf 目录中。执行此操作后,文档还说明要设置此参数
--config-file
。不要设置此配置参数,它会覆盖 keycloak.conf 中存在的其他设置。
我在 keycloak.conf 中设置了
https-key-store-file
和 https-key-store-file-password
。然后,我在 keycloak conf 目录中定义了一个名为 quarkus.properties 的空文件。我在这个文件中放置了
quarkus.http.ssl.certificate.key-store-alias=<alias cert name>
quarkus.http.ssl.certificate.key-store-alias-password=<different password>
我还将这些参数的管理控制台版本放在那里。
这样,我就用
build
标志启动了 KC.bat,然后启动了它。现在一切都正常启动,使用从我的密钥库到证书别名的不同密码。