https 上的 superset keycloak 集成

问题描述 投票:0回答:2

我们有一个超集 docker 容器,它使用 keycloak 作为身份代理。所有这些设置在 http 上运行良好。此外,我们已经在 keycloak 上安装了 ssl 证书,并且同样工作正常。我们的超集和 keycloak 集成代码更改看起来与答案中提到的完全一样here

现在,当我们将

http
中的 auth uris 从
https
更改为
superset/docker/pythonpath_dev/client_secret.json
时,在登录流程从 keycloak 重定向到 superset 后,我们会收到以下错误。

Forbidden

'[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1091)'

我们还尝试通过将根证书安装在

/usr/local/share/ca-certificates
上,然后在容器中执行
update-ca-certificates
来在超集上安装根证书,但仍然没有帮助。知道如何解决这个问题吗?

https ssl-certificate keycloak apache-superset
2个回答
1
投票

感谢@sventorben 的提示。事实上,Python 无法读取我的 ca 文件。由于我对此不熟悉,因此我将详细说明接下来的所有步骤。然而,其中一些步骤可能是多余的。

  1. 收到我的根以及中间 CA 文件后,我首先使用
    PEM
    将它们转换为
    DER
    格式,因为它们是
    openssl
    格式。
openssl x509 -inform DER -in myintermediary.cer -out myintermediary.crt
openssl x509 -inform DER -in myroot.cer -out myroot.crt
  1. 然后,我将这些文件安装到路径
    /usr/local/share/ca-certificates/
  2. 的超集容器中
  3. 然后,我登录到容器并执行
    update-ca-certificates
    命令,并验证在
    pem
    路径中添加了 2 个新的
    /etc/ss/certs/
    文件,即
    myroot.pem
    intermediary.pem
  4. 然后,我将这些 CA 文件添加到容器内的 python certifi 中。为了找出 cacert.pem 的路径,我在
    python
    终端中执行了以下命令。
import certifi
certifi.where()
exit()

在这里,第二个命令给了我 cacert.pem 的路径,就像

/usr/local/lib/python3.7/site-pacakges/certifi/cacert.pem

  1. 在此之后,我将我的 ca 文件附加到 cacert.pem 的末尾
cat /etc/ssl/certs/myroot.pem /etc/ssl/certs/intermediary.pem >> /usr/local/lib/python3.7/site-pacakges/certifi/cacert.pem
  1. 最后我退出了我的容器并重新启动了它。
docker-compose stop
docker-compose up -d

注:

我觉得步骤 3 是多余的,因为 python 不会从那里读取 CA 文件。然而,我仍然这样做了,而且我没有心情恢复并再次测试它。

此外,这是我的临时修复,因为在容器内执行命令没有用,因为它们是临时的。

更新:

以下是生产部署所遵循的步骤。

  1. 使用 openssl 将根证书转换为 PEM 格式。
  2. 将两个 PEM 文件合并为一个新的 PEM 文件,该文件将作为捆绑包安装。可以说,新的 PEM 文件是
    mycacert.pem
    ,并且相同的文件安装在
    /app/docker/
  3. 创建一个名为
    start.sh
    的 sh 文件并编写如下 2 条命令。
cat /app/docker/mycacert.pem >> /usr/local/lib/python3.7/site-pacakges/certifi/cacert.pem

gunicorn --bind  0.0.0.0:8088 --access-logfile - --error-logfile - --workers 5 --worker-class gthread --threads 4 --timeout 200 --limit-request-line 4094 --limit-request-field_size 8190 'superset.app:create_app()'
  1. 修改 docker-compose.yml 并更改命令如下。
    command: ["/app/docker/start.sh"]
  2. 重新启动超集容器。
docker-compose stop
docker-compose up -d

0
投票
OAUTH_PROVIDERS=[{
        'client_kwargs':{
              'verify_signature':False
        }}]
© www.soinside.com 2019 - 2024. All rights reserved.