我正在尝试使用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自己的安全传输引擎。如果这是我遇到的问题的原因,那么在使用小牛队时遇到类似问题的其他人可能值得了解。
答案 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仍然会产生错误。
但我不能从你发布的代码中说出来。