Keycloak建立HTTPS通道 及 TLS / X.509 认证

环境

Windows 10
keycloak 10.0.1
openssl 1.1.0i 14 Aug 2018
jdk 8.0
standalone模式
IE 浏览器
上面这些只是说明本文的测试环境,可自行搭配,问题不大

准备证书及密钥库

建议整个创建过程在一个空的文件中进行,创建完所有需要的证书再拿出去使用

tip: 先创建一个server.ext文件到文件夹中,所有的密码都设置为changeit,防止忘记

  • server.ext
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
subjectAltName = @alt_names
[alt_names]
DNS.1 = server
  • 创建根证书 rootCA
    openssl req -x509 -sha256 -days 3650 -newkey rsa:4096 -keyout rootCA.key -out rootCA.crt
  • 将根证书放入truststore.jks 密钥库中
    keytool -import -keystore truststore.jks -file rootCA.crt -alias root
  • 创建服务器证书
    openssl req -new -newkey rsa:4096 -keyout server.key -out server.csr -nodes
  • 使用根证书对服务器证书进行签署
    openssl x509 -req -CA rootCA.crt -CAkey rootCA.key -in server.csr -out server.crt -days 365 -CAcreateserial -extfile server.ext
  • 将server.key和server.crt合并放入一个keystore中
    openssl pkcs12 -export -out server.jks -name "server" -inkey server.key -in server.crt
  • 创建一个用户证书alice
    openssl req -new -newkey rsa:4096 -nodes -keyout alice.key -out alice.csr
    记住 Common Name 和 Email Address两个信息
    在这里插入图片描述
  • 使用rootCA对alice证书进行签署
    openssl x509 -req -CA rootCA.crt -CAkey rootCA.key -in alice.csr -out alice.crt -days 365 -CAcreateserial
  • 将alice.key和alice.crt合并存入一个keystore中
    openssl pkcs12 -export -out alice.p12 -name "alice" -inkey alice.key -in alice.crt
    所有操作完毕后文件夹中的所有文件
    在这里插入图片描述

https通道的建立

为保证安全性,证书需要在安全的通道上去传输,所以在使用证书登录之前,需要建立安全的访问通道,https
启动standalone服务器
F:\zhibe\keycloak-LoginWithCert\keycloak-10.0.1\bin>standalone
访问 http://localhost:8080/auth 并登录
在这里插入图片描述
在这里插入图片描述
项目启动正常
接着访问 https://localhost:8443/auth

在这里插入图片描述

开始配置

  • 将rootCA证书导入浏览器
    在这里插入图片描述
  • 将server.jks导入standalone服务器
  1. 到\standalone\configuration目录下修改standalone.properties及standalone-ha.properties文件
<security-realms>
...
	<security-realm name="ssl-realm">
		     <server-identities>
		            <ssl>
		                <keystore path="server.jks"
		                          relative-to="jboss.server.config.dir"
		                          keystore-password="changit"/>
		            </ssl>
		        </server-identities>
		       ...
	</security-realm>
...
</security-realms>
....
<server name="default-server">
	 ...
	         <!-- <https-listener name="https" socket-binding="https" security-realm="ApplicationRealm" enable-http2="true"/> -->
	         <https-listener name="https" socket-binding="https" security-realm="ssl-realm" verify-client="REQUESTED" enable-http2="true"/>
	         <host name="default-host" alias="localhost">
					....
				 <!--<http-invoker security-realm="ApplicationRealm"/>-->
	             <http-invoker security-realm="ssl-realm"/>
	         </host>
</server>
.....
  1. 将server.jks放到\standalone\configuration目录下
  • 重启服务器
    F:\zhibe\keycloak-LoginWithCert\keycloak-10.0.1\bin>standalone
    访问 http://localhost:8080/auth 并登录
    在这里插入图片描述
    在这里插入图片描述
    启动正常
    接着访问 https://localhost:8443/auth 并登录
    在这里插入图片描述
    点击右上方的锁logo,查看证书信息
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    登录正常
    https通道建立成功

证书登录

  • keycloak服务器设置
    1. 创建一个realm
      在这里插入图片描述
      在这里插入图片描述
    2. 创建一个flow
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      删除没必要的认证类型后
      在这里插入图片描述
      点击Add execution选择X509/Validate Username Form
      在这里插入图片描述
      在这里插入图片描述

将X509/Validate Username Form 往上移动一格,点选 ALTERNATIVE
在这里插入图片描述
点击action点进config
在这里插入图片描述
在这里插入图片描述
点击保存

点击Bindings菜单
在这里插入图片描述
修改Browser Flow 的选择
在这里插入图片描述
点击保存
3. 创建一个用户
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
点击保存
在这里插入图片描述

  • 将truststore.jks导入服务器
  1. 到\standalone\configuration目录下修改standalone.properties及standalone-ha.properties文件
<security-realm name="ssl-realm">
      ...
        <authentication>
            <truststore path="truststore.jks"
                        relative-to="jboss.server.config.dir"
                        keystore-password="changeit"/>
        </authentication>
</security-realm>
  1. 将truststore.jks放到\standalone\configuration目录下
  • 将alice.p12导入浏览器
    在这里插入图片描述
    在这里插入图片描述
  • 重启服务器
    F:\zhibe\keycloak-LoginWithCert\keycloak-10.0.1\bin>standalone
    访问 http://localhost:8080/auth 并登录
    在这里插入图片描述
    在这里插入图片描述
    启动正常
    接着访问 https://localhost:8443/auth 并登录
    在这里插入图片描述
    点击右上方的锁logo,查看证书信息
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    登录正常
    到x509realm中在clients菜单中点击https://localhost:8443/auth/realms/x509/account/
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    证书登入成功

参考资料:
配置keycloak支持x509证书登入:https://www.keycloak.org/docs/latest/server_admin/#_x509
docker-compose版本的配置视频:https://www.youtube.com/watch?v=yq1hzNs1JQU
openssl生成自签名证书指令及过程:https://gist.github.com/dasniko/b1aa115fd9078372b03c7a9f7e9ec189
感谢
Niko Köbler 给我的指引
thank you!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值