使用django和Mozilla Persona验证SSL证书失败

时间:2014-09-12 17:47:41

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

我正在尝试使用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&s; 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错误吗?)。

然而,它确实绕过了验证程序的优点。既然错误已经过本地化,那么有关如何修复错误的建议吗?

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

1 个答案:

答案 0 :(得分:1)

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

的操作
 verifier = RemoteVerifier()
 verifier.requests_parameters['verify'] = False

 # or

 verifier.verify(verify=False)

当然,你没有显示任何你正在做的代码,这可能就是你所说的那样:

  

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

但我不能从你发布的代码中说出来。