从 Keycloak 下载并导入 X.509 客户端证书
Download and import X.509 client certificate from Keycloak
我在本地主机上设置了 Keycloak 4.8.2-Final 并启用了 SSL,如 https://www.keycloak.org/docs/latest/server_admin/index.html#_x509 上的文档所述。
服务器可以启动,但我无法在 localhost:8443
上打开服务器页面
openssl s_client -connect 127.0.0.1:8443
由于 SSL 错误代码 42
4566025836:error:1401E412:SSL routines:CONNECT_CR_FINISHED:sslv3 alert bad certificate:/BuildRoot/Library/Caches/com.apple.xbs/Sources/libressl/libressl-22.230.1/libressl-2.6/ssl/ssl_pkt.c:1205:SSL alert number 42), which means that the client certificate problem.
但我的想象是服务器应该将我重定向到登录页面。登录后,服务器应生成客户端证书并要求我下载证书并将其导入我的浏览器。之后我应该能够连接到服务器而无需任何进一步的身份验证,因为我已经拥有 Keycloak 信任的客户端证书。
我做错了什么?或者目前的keycloak还不支持这个过程?
根据文档不支持在用户输入用户名和密码后下载和导入证书。前两步总是:
A client sends an authentication request over SSL/TLS channel
During SSL/TLS handshake, the server and the client exchange their x.509/v3 certificates
因此standalone.xml中的配置只能是"REQUESTED"。在没有真正理解的情况下,我将其更改为 "REQUIRED",它总是要求提供客户端证书。如果客户端没有,它将失败。对于 "REQUESTED",客户端证书只是可选的。
<subsystem xmlns="urn:jboss:domain:undertow:4.0">
....
<server name="default-server">
<https-listener name="default"
socket-binding="https"
security-realm="ssl-realm"
verify-client="REQUESTED"/>
</server>
</subsystem>
我在本地主机上设置了 Keycloak 4.8.2-Final 并启用了 SSL,如 https://www.keycloak.org/docs/latest/server_admin/index.html#_x509 上的文档所述。
服务器可以启动,但我无法在 localhost:8443
上打开服务器页面openssl s_client -connect 127.0.0.1:8443
由于 SSL 错误代码 42
4566025836:error:1401E412:SSL routines:CONNECT_CR_FINISHED:sslv3 alert bad certificate:/BuildRoot/Library/Caches/com.apple.xbs/Sources/libressl/libressl-22.230.1/libressl-2.6/ssl/ssl_pkt.c:1205:SSL alert number 42), which means that the client certificate problem.
但我的想象是服务器应该将我重定向到登录页面。登录后,服务器应生成客户端证书并要求我下载证书并将其导入我的浏览器。之后我应该能够连接到服务器而无需任何进一步的身份验证,因为我已经拥有 Keycloak 信任的客户端证书。
我做错了什么?或者目前的keycloak还不支持这个过程?
根据文档不支持在用户输入用户名和密码后下载和导入证书。前两步总是:
A client sends an authentication request over SSL/TLS channel During SSL/TLS handshake, the server and the client exchange their x.509/v3 certificates
因此standalone.xml中的配置只能是"REQUESTED"。在没有真正理解的情况下,我将其更改为 "REQUIRED",它总是要求提供客户端证书。如果客户端没有,它将失败。对于 "REQUESTED",客户端证书只是可选的。
<subsystem xmlns="urn:jboss:domain:undertow:4.0">
....
<server name="default-server">
<https-listener name="default"
socket-binding="https"
security-realm="ssl-realm"
verify-client="REQUESTED"/>
</server>
</subsystem>