最近一直被keycloak的证书问题困扰了很久,老是提示ssl安全连接,由于不会java,只好硬着头皮用python测试。 我这里的证书是自己签注的证书,导入系统的是CA根证书。
from keycloak import KeycloakOpenID
# 1. 配置 Keycloak 客户端
keycloak_openid = KeycloakOpenID(
server_url="https://127.0.0.1:8433/auth/",
client_id="api-cli",
realm_name="xxxxxxxxx",
client_secret_key="xxxxxxxxxxx", # 如果需要 client_secret_key
verify=True # 设置为 False 如果你不想验证 SSL(开发环境)
)
# 2. 使用用户名和密码进行身份验证(获取 Token)
token = keycloak_openid.token("aaa", "123456")
# 3. 使用访问 Token 获取用户信息
userinfo = keycloak_openid.userinfo(token['access_token'])
# 打印用户信息
print(userinfo)
这个是正确的登陆
错误的提示
keycloak.exceptions.KeycloakConnectionError: Can’t connect to server (HTTPSConnectionPool(host=‘101.33.xxx.xxx’, port=8433): Max retries exceeded with url: /auth/realms/bbt/protocol/openid-connect/token (Caused by SSLError(SSLCertVerificationError(1, ‘[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1007)’))))
解决上面的错误有好几种办法,代码解决也行,我直接使用了系统导入证书解决。
将自定义证书添加到系统信任的 CA 库
你也可以将自签名的 CA 证书添加到系统的信任 CA 列表,这样可以全局解决 SSL 证书验证失败的问题。
在 Linux 系统上,可以将自签名证书放到 /usr/local/share/ca-certificates/ 目录下,并更新 CA 列表:
sudo cp your-ca-cert.pem /usr/local/share/ca-certificates/
sudo update-ca-certificates
在 Linux 系统中,如果执行 update-ca-certificates 后发现 /usr/local/share/ca-certificates/ 中的证书没有被加载,将 .pem 文件转换为 .crt 文件:
sudo cp your-ca-cert.pem /usr/local/share/ca-certificates/your-ca-cert.crt
sudo chmod 644 /usr/local/share/ca-certificates/your-ca-cert.crt
sudo update-ca-certificates