denniskniep/keycloak-hsm-crypki
GitHub: denniskniep/keycloak-hsm-crypki
Keycloak 扩展,通过 Crypki 服务对接底层 HSM 或 PKCS#11 设备进行安全签名,实现私钥的硬件级保护。
Stars: 2 | Forks: 2
# Keycloak HSM Crypki
Keycloak 扩展,该扩展使用 [Crypki Service](https://github.com/theparanoids/crypki) 通过底层 HSM(Hardware Security Module,硬件安全模块)或其他 PKCS #11 设备进行签名。
此扩展基于 [Keycloak HSM Extension](https://github.com/denniskniep/keycloak-hsm)。本项目的当前目的是展示如何使用 [Keycloak HSM Extension](https://github.com/denniskniep/keycloak-hsm)。
## 演示
### 快速开始
```
sudo docker-compose up --build
```
### 配置
* 打开 http://localhost:8080/admin/master/console/ (凭据:`admin:password`)
* 导航至 "Realm Settings > Keys > Providers"
* 点击 "Add Provider"
* 选择 "crypki-hsm"
* 设置以下数值:
```
URL: https://crypki:4443
Name: sign-blob-key
mTLS CA Certificate Path: /opt/keycloak/crypki/tls-crt/ca.crt
mTLS Client Certificate Path: /opt/keycloak/crypki/tls-crt/client.crt
mTLS Client Private Key Path: /opt/keycloak/crypki/tls-crt/client.key
Server Certificate Path: /opt/keycloak/crypki/tls-crt/server.crt
```
### 详情
Crypki 在公共 registry 中没有 docker image。因此,[这个 fork](https://github.com/denniskniep/crypki) 在 ghcr.io 上托管了该镜像
## 开发、测试与调试
构建 Keycloak Extension
```
mvn clean install
```
使用 docker-compose 启动环境
```
sudo docker-compose -f docker-compose.debug.yaml up --build
```
连接到 debug 端口(例如使用 IntelliJ)
```
Host: localhost
Port: 8787
Args: -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:8787
```
## Crypki
### RestAPI
获取所有密钥
```
curl -X GET https://localhost:4443/v3/sig/blob/keys
```
获取公钥
```
curl -X GET https://localhost:4443/v3/sig/blob/keys/sign-blob-key
```
签名摘要
```
curl -X POST -H "Content-Type: application/json" https://localhost:4443/v3/sig/blob/keys/sign-blob-key --data '{"digest": "myS064oomwdla8bVuvufU4WNpXmmsDReGstK0frG7K4=", "hash_algorithm": "SHA256"}'
```
### SoftHSM 命令
通过 Docker exec 进入 crypki 容器
列出所有插槽:
```
pkcs11-tool --module "/usr/lib/softhsm/libsofthsm2.so" --pin 123456 -L
```
测试特定插槽
```
pkcs11-tool --module "/usr/lib/softhsm/libsofthsm2.so" --login --slot 0x70fc6051 --pin 123456 --test
```
列出对象
```
pkcs11-tool --module "/usr/lib/softhsm/libsofthsm2.so" --login --slot 0x70fc6051 --pin 123456 --list-objects
```
读取公钥
```
pkcs11-tool --module "/usr/lib/softhsm/libsofthsm2.so" --login --slot 0x70fc6051 --pin 123456 --read-object --type pubkey --label sign_blob | base64
```
支持的机制
```
pkcs11-tool --module "/usr/lib/softhsm/libsofthsm2.so" --login --slot 0x70fc6051 --pin 123456 --label sign_blob -M
```
签名
```
echo -n '' | base64 --decode > data
cat data | pkcs11-tool --module "/usr/lib/softhsm/libsofthsm2.so" --login --slot 0x70fc6051 --pin 123456 --label sign_blob --sign --mechanism RSA-PKCS > data.sig
```
标签:Crypki, CVE, Docker Compose, HSM, IdM, JS文件枚举, Keycloak, mTLS, PKCS#11, REST API, 令牌签名, 单点登录, 双向认证, 域名收集, 域名枚举, 安全基础设施, 扩展插件, 数字签名, 智能代码审计, 硬件安全模块, 请求拦截, 身份与访问管理