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
    所有操作完毕后文件夹中的所有文件
    Keycloak建立HTTPS通道 及 TLS / X.509 认证_第1张图片

https通道的建立

为保证安全性,证书需要在安全的通道上去传输,所以在使用证书登录之前,需要建立安全的访问通道,https
启动standalone服务器
F:\zhibe\keycloak-LoginWithCert\keycloak-10.0.1\bin>standalone
访问 http://localhost:8080/auth 并登录
Keycloak建立HTTPS通道 及 TLS / X.509 认证_第2张图片
Keycloak建立HTTPS通道 及 TLS / X.509 认证_第3张图片
项目启动正常
接着访问 https://localhost:8443/auth

Keycloak建立HTTPS通道 及 TLS / X.509 认证_第4张图片

开始配置

  • 将rootCA证书导入浏览器
    Keycloak建立HTTPS通道 及 TLS / X.509 认证_第5张图片
  • 将server.jks导入standalone服务器
  1. 到\standalone\configuration目录下修改standalone.properties及standalone-ha.properties文件

...
	
		     
		            
		                
		            
		        
		       ...
	
...

....

	 ...
	         
	         
	         
					....
				 
	             
	         

.....
  1. 将server.jks放到\standalone\configuration目录下
  • 重启服务器
    F:\zhibe\keycloak-LoginWithCert\keycloak-10.0.1\bin>standalone
    访问 http://localhost:8080/auth 并登录
    Keycloak建立HTTPS通道 及 TLS / X.509 认证_第6张图片
    Keycloak建立HTTPS通道 及 TLS / X.509 认证_第7张图片
    启动正常
    接着访问 https://localhost:8443/auth 并登录
    Keycloak建立HTTPS通道 及 TLS / X.509 认证_第8张图片
    点击右上方的锁logo,查看证书信息
    Keycloak建立HTTPS通道 及 TLS / X.509 认证_第9张图片
    Keycloak建立HTTPS通道 及 TLS / X.509 认证_第10张图片
    Keycloak建立HTTPS通道 及 TLS / X.509 认证_第11张图片
    登录正常
    https通道建立成功

证书登录

  • keycloak服务器设置
    1. 创建一个realm
      Keycloak建立HTTPS通道 及 TLS / X.509 认证_第12张图片
      Keycloak建立HTTPS通道 及 TLS / X.509 认证_第13张图片
    2. 创建一个flow
      Keycloak建立HTTPS通道 及 TLS / X.509 认证_第14张图片
      Keycloak建立HTTPS通道 及 TLS / X.509 认证_第15张图片
      Keycloak建立HTTPS通道 及 TLS / X.509 认证_第16张图片
      Keycloak建立HTTPS通道 及 TLS / X.509 认证_第17张图片
      删除没必要的认证类型后
      Keycloak建立HTTPS通道 及 TLS / X.509 认证_第18张图片
      点击Add execution选择X509/Validate Username Form
      Keycloak建立HTTPS通道 及 TLS / X.509 认证_第19张图片
      在这里插入图片描述

将X509/Validate Username Form 往上移动一格,点选 ALTERNATIVE
Keycloak建立HTTPS通道 及 TLS / X.509 认证_第20张图片
点击action点进config
Keycloak建立HTTPS通道 及 TLS / X.509 认证_第21张图片
Keycloak建立HTTPS通道 及 TLS / X.509 认证_第22张图片
点击保存

点击Bindings菜单
Keycloak建立HTTPS通道 及 TLS / X.509 认证_第23张图片
修改Browser Flow 的选择
Keycloak建立HTTPS通道 及 TLS / X.509 认证_第24张图片
点击保存
3. 创建一个用户
Keycloak建立HTTPS通道 及 TLS / X.509 认证_第25张图片
Keycloak建立HTTPS通道 及 TLS / X.509 认证_第26张图片
Keycloak建立HTTPS通道 及 TLS / X.509 认证_第27张图片
点击保存
Keycloak建立HTTPS通道 及 TLS / X.509 认证_第28张图片

  • 将truststore.jks导入服务器
  1. 到\standalone\configuration目录下修改standalone.properties及standalone-ha.properties文件

      ...
        
            
        

  1. 将truststore.jks放到\standalone\configuration目录下
  • 将alice.p12导入浏览器
    Keycloak建立HTTPS通道 及 TLS / X.509 认证_第29张图片
    Keycloak建立HTTPS通道 及 TLS / X.509 认证_第30张图片
  • 重启服务器
    F:\zhibe\keycloak-LoginWithCert\keycloak-10.0.1\bin>standalone
    访问 http://localhost:8080/auth 并登录
    Keycloak建立HTTPS通道 及 TLS / X.509 认证_第31张图片
    Keycloak建立HTTPS通道 及 TLS / X.509 认证_第32张图片
    启动正常
    接着访问 https://localhost:8443/auth 并登录
    Keycloak建立HTTPS通道 及 TLS / X.509 认证_第33张图片
    点击右上方的锁logo,查看证书信息
    Keycloak建立HTTPS通道 及 TLS / X.509 认证_第34张图片
    Keycloak建立HTTPS通道 及 TLS / X.509 认证_第35张图片
    Keycloak建立HTTPS通道 及 TLS / X.509 认证_第36张图片
    登录正常
    到x509realm中在clients菜单中点击https://localhost:8443/auth/realms/x509/account/
    Keycloak建立HTTPS通道 及 TLS / X.509 认证_第37张图片
    Keycloak建立HTTPS通道 及 TLS / X.509 认证_第38张图片
    Keycloak建立HTTPS通道 及 TLS / X.509 认证_第39张图片
    证书登入成功

参考资料:
配置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!

你可能感兴趣的:(keycloak,keycloak,openssl,x509,https,keytool)