dify 在进行HTTP请求时,能够切换SSL验证的能力,

zwghvu4y  于 4个月前  发布在  其他
关注(0)|答案(5)|浏览(52)

自我检查

  • 我已搜索现有的问题,包括已关闭的问题。
  • 我确认我使用英语提交这份报告(我已阅读并同意)。
  • 请不要修改此模板 :) 并填写所有必需的字段。

1. 此请求是否与您正在经历的挑战相关?

当我们尝试在OpenShift中添加一个运行在本地的Ollama模型提供商时,我们遇到了一个SSL问题,因为我们在实验室环境集群中的SSL证书是自签名的。
当我们尝试在工作流编辑器中使用HTTP响应节点/块针对使用自签名证书的服务器时,也会出现类似的问题。
在这两种情况下,似乎都没有任何明显的选项可以在webgui中打开或关闭这种行为。

2. 描述您希望看到的功能

当添加模型提供商以及在使用工作流编辑器中的HTTP请求节点进行HTTP请求时,有一个滑块或复选框可以启用或禁用SSL验证:

3. 此功能将如何改善您的工作流程或体验?

它将使我能够在不在我实验室环境中的Kubernetes集群上配置多个机器上的SSL证书的情况下使用该工具。

4. 附加上下文或评论

如果有一种方法可以在没有功能请求的情况下启用此功能,我将非常感激!如果没有,我可以想象还有其他人正在经历相同的问题,因为我以前看到其他人提到过类似的问题。

5. 你能帮助我们实现这个功能吗?

  • 我对贡献此功能感兴趣。
0lvr5msh

0lvr5msh1#

请解决这个问题,拜托了。

eblbsuwk

eblbsuwk2#

@Yeuoly,你能看一下这个问题吗?

58wvjzkj

58wvjzkj3#

我猜你们需要一个环境变量来指定是否忽略SSL验证,但这不是一个推荐的方法。自签名证书对于HTTPS请求来说毫无意义,为什么不直接使用HTTP呢?顺便问一下,你是在使用我们的云版本还是自己托管的Dify示例?对于第一个,我们目前有一个计划,至于下一个,我们可以引入一个环境变量。

8fsztsew

8fsztsew4#

我猜你们需要一个环境变量来指定是否忽略SSL验证,但这不是一个推荐的方法。自签名证书对于HTTPS请求来说没有意义,为什么不直接使用HTTP呢?顺便问一下,你们是在使用我们的云版本还是自托管的Dify示例?对于第一个,我们目前有一个计划,至于下一个,我们可以引入一个环境变量。

将此实现为HTTP请求阻止的选项是否可行?环境变量很好,但它可能会影响到比预期更多的内容。
在我的案例中,这是一个自托管的示例。它需要调用一些我们自己的API。这些服务器在互联网上公开,但它们没有域名,所以没有办法为它们获取CA签名的证书(真的很难让CA为IP地址签名证书)。因此,为了防止有人(例如恶意的ISP或其他网络链中的参与者)看到请求内容并更改响应,我们为这些IP地址添加了自签名证书。这与使用HTTP在某种程度上有所不同:

  • SSL仍然在使用,只是证书的CA没有被验证。
  • 如果只是HTTP,网络链上的任何人都可以查看你发送和接收的内容。

嵌入式设备(如路由器或NAS)通常也会使用自签名证书。但我目前没有与Dify交互这些设备。
目前的解决方法是将证书合并到Dify的API容器中,如下所示:

docker cp mycert.crt docker-api-1:/tmp/
docker compose exec api bash
# And in the container:
cat /tmp/mycert.crt >> python -c 'import certifi;print(certifi.where())'

这会强制信任自签名证书,从而不会发生SSL错误。但每次容器重新创建时,你都需要这样做。如果Dify团队决定不添加“禁用SSL验证”,也许添加额外可信任证书的选项(适用于我的场景)也会起作用。

7tofc5zh

7tofc5zh5#

我正在本地构建Dify,并已经设置了Ollama和NGINX的自签名SSL。
当我尝试在Dify上注册Ollama模型时,还遇到了证书错误。因此,我采取了以下措施:

  1. 进入Dify API容器:
docker exec -it docker-api-1 bash
  1. 修改Ollama调用代码:
vi core/model_runtime/model_providers/ollama/llm/llm.py
  1. 在第238行附近,将verify=False添加到requests.post调用中:
# Send a post request to validate the credentials
response = requests.post(
    endpoint_url, headers=headers, json=data, timeout=(10, 300), stream=stream, verify=False
)
  1. 重启Docker容器:
# not 'docker compose down'
docker compose stop && docker compose up -d

希望这对您有所帮助。

相关问题