如何在本地django服务器上设置SSL来测试Facebook应用程序?

Sus*_*usa 23 django ssl https facebook facebook-graph-api

每当我在浏览器上点击http://www.mydomain.com时,我都配置了我本地机器的HOSTS配置来访问本地服务器(@ 127.0.0.1).

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

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

jde*_*ero 50

不是坏死线程,但我发现这个工具非常容易使用.

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

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

python manage.py runsslserver --certificate /path/to/certificate.crt --key /path/to/key.key
Run Code Online (Sandbox Code Playgroud)

我希望这可以帮助任何可能看到这个的路人.

  • 伙计,这太棒了.显然,设置自签名证书是可行的方法,但这很容易.它就是这样做的:设置自签名证书.该死的,希望我能给你+2 ;-)谢谢. (4认同)

Mar*_*ark 15

有了django-extensions你可以运行下面的命令:

python manage.py runserver_plus --cert certname
Run Code Online (Sandbox Code Playgroud)

如果它不存在,它将自动生成(自签名)证书.几乎太简单了.

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

pip install django-extensions
pip install Werkzeug
pip install pyOpenSSL
Run Code Online (Sandbox Code Playgroud)

现在,正如Ryan Pergent在评论中指出的那样,你最后只需要添加'django_extensions',到你的内容中,INSTALLED_APPS并且应该很好.

我之前使用过一个隧道,虽然有效,但是这很容易,还有许多其他命令.

  • 重要细节:您必须将"django_extensions"添加到INSTALLED_APPS才能使其正常工作 (2认同)

Mal*_*Box 7

简而言之,您需要在开发机器上设置合适的Web服务器.使用您最熟悉的任何一个(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

  • 是的,这是一个非常常见且记录良好的设置 (2认同)

mik*_*ike 6

解决方法在django上运行https.

这可以通过stunnel来完成,该stunnel允许您的机器上的Facebook服务器和stunnel在SSL中进行通信,并且stunnel转向与HTTP中的Python通信.首先安装stunnel.例如在Mac OS X中:

brew install stunnel
Run Code Online (Sandbox Code Playgroud)

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

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

[https]
accept=8001
connect=8002
TIMEOUTclose=1
Run Code Online (Sandbox Code Playgroud)

stunnel创建了一个假证书.默认情况下,在Mac上,它位于/usr/local/etc/stunnel/stunnel.pem.它会在您的浏览器上显示一条警告,说您的网页可能是假的,但Facebook操作仍然正常.由于stunnel必须侦听一个端口并且Python的开发服务器无法在同一服务器上运行,因此必须使用不同的端口进行接受(传入)和连接(内部).获得dev_https文件或其他任何名称后,运行

sudo stunnel dev_https
Run Code Online (Sandbox Code Playgroud)

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

HTTPS=1 python manage.py runserver 0.0.0.0:8002
Run Code Online (Sandbox Code Playgroud)

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

参考:http: //tech.xster.net/tips/django-development-server-with-https/

  • 虽然此链接可能会回答这个问题,但最好在此处包含答案的基本部分并提供参考链接.如果链接的页面发生更改,则仅链接的答案可能会无效. (4认同)

Kak*_*hah 6

I understand this has already been answered, but for a clearer solution:

Step 1: Install library

pip install django-sslserver
Run Code Online (Sandbox Code Playgroud)

Step 2: Add to installed apps in settings.py

INSTALLED_APPS = [
    'sslserver',
    '...'
]
Run Code Online (Sandbox Code Playgroud)

Step 3: Run the code using runsslserver instead of runserver. Certificate & key are optional.

python manage.py runsslserver --certificate /path/to/certificate.crt --key /path/to/key.key
Run Code Online (Sandbox Code Playgroud)