我们有一个超集 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
来在超集上安装根证书,但仍然没有帮助。知道如何解决这个问题吗?
感谢@sventorben 的提示。事实上,Python 无法读取我的 ca 文件。由于我对此不熟悉,因此我将详细说明接下来的所有步骤。然而,其中一些步骤可能是多余的。
PEM
将它们转换为 DER
格式,因为它们是 openssl
格式。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
命令,并验证在 pem
路径中添加了 2 个新的 /etc/ss/certs/
文件,即 myroot.pem
和 intermediary.pem
。python
终端中执行了以下命令。import certifi
certifi.where()
exit()
在这里,第二个命令给了我 cacert.pem 的路径,就像
/usr/local/lib/python3.7/site-pacakges/certifi/cacert.pem
。
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 文件。然而,我仍然这样做了,而且我没有心情恢复并再次测试它。
此外,这是我的临时修复,因为在容器内执行命令没有用,因为它们是临时的。
更新:
以下是生产部署所遵循的步骤。
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()'
command: ["/app/docker/start.sh"]
docker-compose stop
docker-compose up -d
OAUTH_PROVIDERS=[{
'client_kwargs':{
'verify_signature':False
}}]