https 上的超集 keycloak 集成
superset keycloak integration on https
我们有一个超集 docker 容器,它使用 keycloak 作为身份代理。所有这些设置在 http 上运行良好。此外,我们在 keycloak 上安装了 ssl 证书,同样工作正常。我们的超集和 keycloak 集成代码更改看起来与答案 .
中提到的完全一样
现在,当我们在 superset/docker/pythonpath_dev/client_secret.json
中将 auth uris 从 http
更改为 https
时,在登录流程从 keycloak 重定向到超集后,我们遇到以下错误。
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
来在超集上安装根证书,但仍然没有任何帮助。知道如何解决这个问题吗?
感谢@sventorben 的提示。实际上是 python 无法读取我的 ca 文件。由于我是新手,我会详细说明所有遵循的步骤。但是,其中一些步骤可能是多余的。
- 收到我的根和中间 CA 文件后,我首先使用
openssl
. 将它们转换为 PEM
格式,因为它们是 DER
格式
openssl x509 -inform DER -in myintermediary.cer -out myintermediary.crt
openssl x509 -inform DER -in myroot.cer -out myroot.crt
- 然后,我将这些文件安装到路径
/usr/local/share/ca-certificates/
的超集容器中
- 然后,我登录到我的容器并执行了
update-ca-certificates
命令并验证了在 /etc/ss/certs/
路径中添加了 2 个新的 pem
文件,即 myroot.pem
和 [=24] =].
- 然后,我将这些 CA 文件添加到容器内的 python certifi。为了找出 cacert.pem 的路径,我在
python
终端中执行了以下命令。
import certifi
certifi.where()
exit()
在这里,第二个命令给了我 cacert.pem 的路径,就像 /usr/local/lib/python3.7/site-pacakges/certifi/cacert.pem
.
- 在此之后,我在 cacert.pem
的末尾附加了我的 ca 文件
cat /etc/ssl/certs/myroot.pem /etc/ssl/certs/intermediary.pem >> /usr/local/lib/python3.7/site-pacakges/certifi/cacert.pem
- 最后我退出我的容器并重新启动它。
docker-compose stop
docker-compose up -d
注:
我觉得第 3 步是多余的,因为 python 不会从那里读取 CA 文件。但是,我还是做了,我没有心情恢复并再次测试它。
此外,这是我的临时修复,因为在容器内执行命令没有用,因为它们是短暂的。
更新:
以下是生产部署所遵循的步骤。
- 使用 openssl 将根证书转换为 PEM 格式。
- 将两个 PEM 文件合并到一个新的 PEM 文件中,该文件将作为捆绑包安装。比方说,新的 PEM 文件是
mycacert.pem
并且同样安装在 /app/docker/
.
- 创建一个名为
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()'
- 修改docker-compose.yml并更改命令如下。
command: ["/app/docker/start.sh"]
- 重启超集容器。
docker-compose stop
docker-compose up -d
我们有一个超集 docker 容器,它使用 keycloak 作为身份代理。所有这些设置在 http 上运行良好。此外,我们在 keycloak 上安装了 ssl 证书,同样工作正常。我们的超集和 keycloak 集成代码更改看起来与答案
现在,当我们在 superset/docker/pythonpath_dev/client_secret.json
中将 auth uris 从 http
更改为 https
时,在登录流程从 keycloak 重定向到超集后,我们遇到以下错误。
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
来在超集上安装根证书,但仍然没有任何帮助。知道如何解决这个问题吗?
感谢@sventorben 的提示。实际上是 python 无法读取我的 ca 文件。由于我是新手,我会详细说明所有遵循的步骤。但是,其中一些步骤可能是多余的。
- 收到我的根和中间 CA 文件后,我首先使用
openssl
. 将它们转换为
PEM
格式,因为它们是 DER
格式
openssl x509 -inform DER -in myintermediary.cer -out myintermediary.crt
openssl x509 -inform DER -in myroot.cer -out myroot.crt
- 然后,我将这些文件安装到路径
/usr/local/share/ca-certificates/
的超集容器中
- 然后,我登录到我的容器并执行了
update-ca-certificates
命令并验证了在/etc/ss/certs/
路径中添加了 2 个新的pem
文件,即myroot.pem
和 [=24] =]. - 然后,我将这些 CA 文件添加到容器内的 python certifi。为了找出 cacert.pem 的路径,我在
python
终端中执行了以下命令。
import certifi
certifi.where()
exit()
在这里,第二个命令给了我 cacert.pem 的路径,就像 /usr/local/lib/python3.7/site-pacakges/certifi/cacert.pem
.
- 在此之后,我在 cacert.pem 的末尾附加了我的 ca 文件
cat /etc/ssl/certs/myroot.pem /etc/ssl/certs/intermediary.pem >> /usr/local/lib/python3.7/site-pacakges/certifi/cacert.pem
- 最后我退出我的容器并重新启动它。
docker-compose stop
docker-compose up -d
注:
我觉得第 3 步是多余的,因为 python 不会从那里读取 CA 文件。但是,我还是做了,我没有心情恢复并再次测试它。
此外,这是我的临时修复,因为在容器内执行命令没有用,因为它们是短暂的。
更新:
以下是生产部署所遵循的步骤。
- 使用 openssl 将根证书转换为 PEM 格式。
- 将两个 PEM 文件合并到一个新的 PEM 文件中,该文件将作为捆绑包安装。比方说,新的 PEM 文件是
mycacert.pem
并且同样安装在/app/docker/
. - 创建一个名为
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()'
- 修改docker-compose.yml并更改命令如下。
command: ["/app/docker/start.sh"]
- 重启超集容器。
docker-compose stop
docker-compose up -d