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

时间:2011-09-30 12:31:11

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

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

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

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

8 个答案:

答案 0 :(得分:39)

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

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

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

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

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

答案 1 :(得分:12)

使用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,这样就可以了。

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

答案 2 :(得分:7)

简短的回答是,您需要在开发计算机上设置正确的网络服务器。使用你最熟悉的任何一个(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

答案 3 :(得分:6)

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

这可以通过stunnel完成,该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连接而无需更改您的Web服务器,您可以继续在另一个端口上运行另一个HTTP Python服务器实例。

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

答案 4 :(得分:3)

这不能通过

解决自动测试问题

./ manage.py test

但要使用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

答案 5 :(得分:1)

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

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

我认为在Windows上事情可能更直接。

然后我能够通过在“Debug Configurations”下添加HTTPS = 1环境变量来启动测试服务器(并附加到eclipse)中的pydev - > “环境” - >变量

答案 6 :(得分:1)

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

第 1 步:安装库

# Beware that this will modify the dataframe inplace,
# meaning that, it does not return a new dataframe.
df_dropped.reset_index(drop=True, inplace=True)

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

pip install django-sslserver

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

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

答案 7 :(得分:0)

我想测试使用Facebook注册时遇到了同样的问题。从https://github.com/teddziuba/django-sslserver使用django SSL Server之后。这个问题解决了。您可能也需要它。