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!

  • 24
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要配置 Linux-1 为 CA 服务器并为其他 Linux 主机颁发证书,可以按照以下步骤操作: 1. 安装 OpenSSL 工具包。在 Linux-1 上执行以下命令: ``` sudo yum install openssl ``` 2. 在 Linux-1 上创建一个新的目录来存储 CA 相关文件。在此示例中,我们将使用 `/opt/ca` 目录。执行以下命令: ``` sudo mkdir /opt/ca sudo chmod 700 /opt/ca ``` 3. 生成 CA 私钥。在 Linux-1 上执行以下命令: ``` sudo openssl genrsa -out /opt/ca/ca.key 2048 ``` 4. 生成 CA 证书。在 Linux-1 上执行以下命令: ``` sudo openssl req -x509 -new -nodes -key /opt/ca/ca.key -sha256 -days 3650 -out /opt/ca/ca.crt ``` 在此过程中,你将需要为 CA 证书提供一些信息,例如组织名称、国家代码、州或省份名称等。请根据需要提供正确的信息。 5. 现在,我们需要创建一个新的 OpenSSL 配置文件来配置证书颁发请求。由于我们不允许修改 `/etc/pki/tls/openssl.conf` 文件,因此我们将创建一个新的配置文件。在 Linux-1 上执行以下命令: ``` sudo mkdir /opt/ca/config sudo cp /etc/pki/tls/openssl.cnf /opt/ca/config/openssl.cnf sudo chmod 600 /opt/ca/config/openssl.cnf ``` 6. 编辑 `/opt/ca/config/openssl.cnf` 文件,找到 `[ v3_ca ]` 部分并取消注释以下行: ``` subjectAltName = @alt_names [alt_names] IP.1 = 10.0.0.1 IP.2 = 10.0.0.2 ``` 在 `IP.1` 和 `IP.2` 行中,将 `10.0.0.1` 和 `10.0.0.2` 替换为你计划颁发证书的 Linux 主机的 IP 地址。你可以添加更多的 `IP.X` 行以包含更多的主机。 7. 现在,我们可以为其他 Linux 主机颁发证书。在 Linux-1 上执行以下命令: ``` sudo openssl genrsa -out /opt/ca/client.key 2048 sudo openssl req -new -key /opt/ca/client.key -out /opt/ca/client.csr sudo openssl x509 -req -in /opt/ca/client.csr -CA /opt/ca/ca.crt -CAkey /opt/ca/ca.key -CAcreateserial -out /opt/ca/client.crt -days 365 -sha256 -extfile /opt/ca/config/openssl.cnf -extensions v3_ca ``` 在此过程中,你将需要为证书请求提供一些信息,例如组织名称、国家代码、州或省份名称等。请根据需要提供正确的信息。 在执行以上命令时,将会为客户端主机生成一个新的密钥和证书,并将其签名为 CA 证书。证书将在 `/opt/ca/client.crt` 文件中生成。 8. 将 `/opt/ca/ca.crt` 文件和 `/opt/ca/client.crt` 文件复制到要使用此证书的 Linux 主机上。将 `/opt/ca/client.key` 文件复制到每个主机的 `/etc/pki/tls/private` 目录中,并确保只有 `root` 用户可以读取此文件。执行以下命令: ``` sudo cp /opt/ca/ca.crt /etc/pki/ca-trust/source/anchors/ sudo update-ca-trust sudo cp /opt/ca/client.crt /etc/pki/tls/certs/ sudo cp /opt/ca/client.key /etc/pki/tls/private/ sudo chmod 600 /etc/pki/tls/private/client.key ``` 最后,重启 `httpd` 服务以确保新的证书文件生效: ``` sudo systemctl restart httpd ``` 现在你已经将 Linux-1 配置为一个 CA 服务器,并为其他 Linux 主机颁发了证书。注意,此示例是为了演示目的而创建的,实际情况中可能需要进行更多的安全配置和调整。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值