【问题标题】:SSL certificate verify failure using django and Mozilla Persona使用 django 和 Mozilla Persona 验证 SSL 证书失败
【发布时间】:2014-09-12 17:47:40
【问题描述】:

我正在尝试使用 Django 构建一个简单的网络应用程序。我想要一个使用 Mozilla Persona 进行验证的最小用户模型。使用 Persona 很顺利,直到 SSL 证书在将身份验证(成功或失败)扔回 Django 应用程序时失败。

我知道 Stack Overflow 上已经有很多关于 SSL 错误的信息,但我还没有发现任何在这种情况下有效的东西。例如,在使用requests 包时尝试使用verify = False 仍然会产生错误。

我能够使用新 Django 项目的默认设置并遵循 django_browserid 的样板安装在一个最小示例应用程序中复制错误。即使这可以被黑客入侵,如果有人知道如何修复这个烦人的错误,那么在 django_browserid 文档或 Persona 文档中可能值得注意。

我已将这个带有说明的最小示例放在 GitHub.com 上:

https://github.com/pedmiston/ssl_error

实际的错误是用 [blob] 代替断言。

Error while verifying assertion [blob] with audience http://localhost:8000.
[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:598)

我在 OSX Mavericks。


更新:通过将以下内容添加到我的 virtualenv 的 src/django_browserid/base.py 中,我能够使用 sigmavirus24 的答案获得通过的最小示例

class RemoteVerifier(object):
    """
    Verifies BrowserID assertions using a remote verification service.

    By default, this uses the Mozilla Persona service for remote verification.
    """
    verification_service_url = 'https://verifier.login.persona.org/verify'
    requests_parameters = {
        'timeout': 5,
        'verify': False,
    }
    # ...

这很棒,它得到了通过的最小示例(并向我保证这不是真正的 django_browserid 或 Persona 错误?)。

但是,它确实绕过了验证程序的优点。既然错误已经被本地化了,有什么解决方法的建议吗?

我一直在读到,当 Mavericks 出现时,OS X 发生了一些变化,从 open_ssl 切换到 Apple 自己的安全传输引擎。如果这是我遇到问题的原因,那么对于在使用 Mavericks 时遇到类似问题的其他人来说可能值得了解。

【问题讨论】:

    标签: django ssl-certificate python-requests python-3.4 persona


    【解决方案1】:

    查看您的示例应用程序,它是唯一依赖项,您的问题似乎来自this line 中的django_browserid。我不熟悉您的应用程序或django_browserid,但如果您可以将verify=False 传递给https://github.com/mozilla/django-browserid/blob/66641335751b869562ba7a554e61ca56bc880257/django_browserid/base.py#L167,这应该可以解决您的问题。换句话说,如果您指定使用哪个验证器,那么它应该执行类似

     verifier = RemoteVerifier()
     verifier.requests_parameters['verify'] = False
    
     # or
    
     verifier.verify(verify=False)
    

    当然,您没有在执行此操作的位置显示任何代码,因此这可能就是您所说的意思:

    例如,在使用 requests 包时尝试使用 verify = False 仍然会产生错误。

    但我无法从您发布的代码中看出这一点。

    【讨论】:

    • 感谢 sigmavirus24。我更新了我的答案,以反映您假设我没有正确传递 verify=False 参数是正确的。但是,我已经移动了一些球门柱:您是否可以帮助我在不绕过验证程序的情况下登录?
    • @pedmiston 不允许移动球门柱。你应该用你的 new 问题打开一个不同的问题。此外,我的建议不是修改库的源代码,而是更改您对它的使用,这似乎是可能的。
    猜你喜欢
    • 1970-01-01
    • 2012-04-06
    • 2012-05-26
    • 2019-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-28
    • 2021-10-08
    相关资源
    最近更新 更多