【问题标题】:How to setup SSL on a local django server to test a facebook app?如何在本地 django 服务器上设置 SSL 以测试 facebook 应用程序?
【发布时间】:2021-10-01 18:32:06
【问题描述】:

我已将本地计算机的 HOSTS 配置配置为在浏览器上点击 http://www.mydomain.com 时访问本地服务器 (@127.0.0.1)。

我正在使用它与 facebook 的图形 api 交互来构建我的应用程序。但是现在 facebook 要求我们有一个 HTTPS url 或者更确切地说是一个 SSL 安全 url 来与他们的 api 交互。

所以问题是 -> 如何在本地 django 服务器上设置 SSL?

【问题讨论】:

标签: django facebook ssl facebook-graph-api https


【解决方案1】:

不要破坏线程,但我发现this tool 非常易于使用。

这是一个预制的 django 应用程序,安装说明非常简单。

安装后,您只需运行以下命令即可添加经过认证的密钥:

python manage.py runsslserver --certificate /path/to/certificate.crt --key /path/to/key.key

我希望这对任何可能看到此内容的路人有所帮助。

【讨论】:

  • 老兄,这太棒了。显然,设置自签名证书是可行的方法,但这很容易。它就是这样做的:设置自签名证书。该死的,希望我能给你+2 ;-) 谢谢。
  • 这个解决方案对我来说很好。我只需要执行 pip install django-sslserver ,然后将 'sslserver' 添加到 INSTALLED_APPS,然后运行 ​​python manage.py runsslserver 就可以了!我的 (localhost:8000) 很快就起来了。不必提供证书路径。竖起大拇指
  • 很好的解决方案。像魅力一样为我工作
  • 对如何在测试期间运行它有什么想法吗?
【解决方案2】:

使用django-extensions,您可以运行以下命令:

python manage.py runserver_plus --cert certname

如果不存在,它会自动生成一个(自签名)证书。简直太简单了。

您只需要安装以下依赖项:

pip install django-extensions
pip install Werkzeug
pip install pyOpenSSL

现在,as Ryan Pergent pointed out in the comments,您最后只需将'django_extensions', 添加到您的INSTALLED_APPS 就可以了。

我之前使用过隧道,这很管用,但这更容易,并且带有许多其他命令。

【讨论】:

  • 重要细节:您必须将“django_extensions”添加到您的 INSTALLED_APPS 才能使其正常工作
  • (感谢@ihhcarus 的编辑,请注意,“stunnel”不是错字,它是用于创建隧道的库的名称)。
  • 在工程文件夹里面,里面有工程的init.py,里面有settings.py文件。在这个文件中,有一个名为 INSTALLED_APPS 的列表。在此处添加“django_extensions”。感谢您提供这个非常有用的答案!
【解决方案3】:

简短的回答是你需要在你的开发机器上设置一个合适的网络服务器。使用您最熟悉的任何一个(Apache、nginx、cherokee 等)。

更长的答案是 django 开发服务器 (manage.py runserver) 不是为执行 SSL 等而设计的,为此付出的努力可能比您想要花费的更多。

在 django-users 列表中查看有关此 passim 的讨论:http://groups.google.com/group/django-users/browse_thread/thread/9164126f70cebcbc/f4050f6c82fe1423?lnk=gst&q=ssl+development+server#f4050f6c82fe1423

【讨论】:

  • 那么我们能确定在 Apache 上运行 django 后我们可以让 SSL 运行吗?
  • 是的,这是一个非常常见且有据可查的设置
【解决方案4】:

在 django 上运行 https 的解决方法。

这可以通过 stunnel 来完成,它让您机器上的 Facebook 服务器和 stunnel 以 SSL 进行通信,而 stunnel 转而以 HTTP 与 Python 进行通信。首先安装stunnel。例如在 Mac OS X 中:

brew install stunnel

然后您需要创建一个设置文件以供 stunnel 执行。您可以在任何地方创建文本文件。例如,您可以创建 dev_https 并输入:

pid=
cert=/usr/local/etc/stunnel/stunnel.pem
foreground=yes
debug=7

[https]
accept=8001
connect=8002
TIMEOUTclose=1

stunnel 创建一个假证书。默认情况下,在 Mac 上,它位于 /usr/local/etc/stunnel/stunnel.pem。它会在您的浏览器上显示一条警告,说明您的网页可能是假的,但 Facebook 操作仍然正常。由于 stunnel 必须监听一个端口,而 Python 的开发服务器不能在同一台服务器上运行,因此您必须使用不同的端口来接受(传入)和连接(内部)。一旦你有了你的 dev_https 文件或任何你称之为的文件,运行

sudo stunnel dev_https

开始隧道。然后启动你的 Python 服务器。

HTTPS=1 python manage.py runserver 0.0.0.0:8002

环境变量 HTTPS 必须设置为 1 才能返回安全响应,并且由于我们之前将内部端口设置为 8002,因此我们从所有传入 IP 监听 8002。然后,您的 IP:8001 可以在不更改网络服务器的情况下接受 HTTPS 连接,并且您可以继续在不同的端口上运行另一个 HTTP Python 服务器实例。

参考: https://medium.com/xster-tech/django-development-server-with-https-103b2ceef893

【讨论】:

  • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。
  • 感谢您的建议,在这里添加了重要部分。
【解决方案5】:

这并不能解决自动测试问题

./manage.py 测试

但要使用 HTTPS 运行服务器,您可以使用 RunServerPlus:http://pythonhosted.org/django-extensions/runserver_plus.html

只需安装 django-extensions 和 pyOpenSSL:

pip install django-extensions pyOpenSSL

然后运行:

python manage.py runserver_plus --cert cert

【讨论】:

  • RunServerPlus URL 是 404ing
【解决方案6】:

我知道这已经得到解答,但为了更清晰的解决方案:

第 1 步:安装库

pip install django-sslserver

第 2 步:在 settings.py 中添加到已安装的应用

INSTALLED_APPS = [
    'sslserver',
    '...'
]

第 3 步: 使用 runsslserver 而不是 runserver 运行代码。证书和密钥是可选的。

python manage.py runsslserver --certificate /path/to/certificate.crt --key /path/to/key.key

【讨论】:

    【解决方案7】:

    我已经能够使用 stunnel 在 django 的测试服务器上设置 ssl。 Here 是一些关于如何设置的信息

    请注意,我无法使用 debian 在 apt-get 中提供的软件包使其正常工作,我必须从源代码安装。如果您必须这样做,请查看关于如何构建 debian 包的优秀说明 debian forums。 网上有很多说明,还有关于如何创建 pem 证书的 stunnel 常见问题解答,但最终 Debian 上的 dpkg-buildpackage 为我构建了它。

    我想在 Windows 上事情实际上可以更直接。

    然后我可以通过在“调试配置”->“环境”->变量下添加 HTTPS=1 环境变量来让 Eclipse 中的 pydev 启动测试服务器(并附加到它)

    【讨论】:

      【解决方案8】:

      我想测试使用 Facebook 注册时遇到了同样的问题。使用来自https://github.com/teddziuba/django-sslserver 的 django SSL 服务器后。这个问题就解决了。你可能也需要它。

      【讨论】:

        【解决方案9】:

        这个讨论页真的很老了,早期的Django不支持SSL,需要通过stunnel或者Werkzeug来完成。 Django 现在支持使用 django-sslserver 进行 SSL 配置: https://djangopackages.org/packages/p/django-sslserver/ 添加安装应用程序并在命令行中传递证书。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-02-08
          • 2011-06-11
          • 1970-01-01
          • 2020-10-22
          • 2016-08-28
          • 1970-01-01
          相关资源
          最近更新 更多