0

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

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

我能够使用新 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 时遇到类似问题的其他人来说可能值得了解。

4

1 回答 1

1

查看您的示例应用程序,它是唯一的依赖项,您的问题似乎来自. django_browserid我不熟悉您的应用程序,或者django_browserid如果您可以传递verify=Falsehttps://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 仍然会产生错误。

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

于 2014-09-13T04:16:38.163 回答