启动笔记本电脑的安全公共服务器时出错 - IPython 2.2和tornado 4.0.2(Debian)

mrc*_*rcl 4 ipython-notebook

我创建了一个新的个人资料,并将其设置为可通过https进行公开访问.如IPython文档中所述.

找到我遵循的步骤

生成哈希密码:

In [1]: from IPython.lib import passwd
In [2]: passwd()
Enter password:
Verify password:
Out[2]: 'sha1:67c9e60bb8b6:9ffede0825894254b2e042ea597d771089e11aed'
Run Code Online (Sandbox Code Playgroud)

创建证书:

openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout mycert.pem -out mycert.pem
Run Code Online (Sandbox Code Playgroud)

并创建了一个新的个人资料

ipython profile created publicServer
Run Code Online (Sandbox Code Playgroud)

编辑了〜/ .ipython/profile_publicServer /中的ipython_notebook_config.py文件

c = get_config()

# Kernel config
c.IPKernelApp.pylab = 'inline'  # if you want plotting support always

# Notebook config
c.NotebookApp.certfile = u'/absolute/path/to/your/certificate/mycert.pem'
c.NotebookApp.ip = '*'
c.NotebookApp.open_browser = False
c.NotebookApp.password = u'sha1:bcd259ccf...[your hashed password here]'
# It is a good idea to put it on a known, fixed port
c.NotebookApp.port = 9999
Run Code Online (Sandbox Code Playgroud)

然后我从终端执行ipython以使用创建的配置文件启动笔记本:

ipython notebook --profile=publicServer
Run Code Online (Sandbox Code Playgroud)

当我尝试使用浏览器访问它时,从任何ip(包括localhost)

https://localhost:999
Run Code Online (Sandbox Code Playgroud)

浏览器挂起并且从不加载页面.

在终端上,我收到以下错误消息

ERROR:tornado.application:Exception in callback (<socket._socketobject object at 0x7f76ba974980>, <function null_wrapper at 0x7f76ba918848>)
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/tornado/ioloop.py", line 833, in start
    handler_func(fd_obj, events)
  File "/usr/local/lib/python2.7/dist-packages/tornado/stack_context.py", line 275, in null_wrapper
    return fn(*args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/tornado/netutil.py", line 201, in accept_handler
    callback(connection, address)
  File "/usr/local/lib/python2.7/dist-packages/tornado/tcpserver.py", line 225, in _handle_connection
    do_handshake_on_connect=False)
  File "/usr/local/lib/python2.7/dist-packages/tornado/netutil.py", line 434, in ssl_wrap_socket
    context = ssl_options_to_context(ssl_options)
  File "/usr/local/lib/python2.7/dist-packages/tornado/netutil.py", line 411, in ssl_options_to_context
    context.load_cert_chain(ssl_options['certfile'], ssl_options.get('keyfile', None))
TypeError: coercing to Unicode: need string or buffer, NoneType found
Run Code Online (Sandbox Code Playgroud)

有人可以帮我解决这个问题吗?

干杯

wmo*_*ell 7

我和一个客户遇到了这个问题.看起来Tornado库更新了它的工作方式,需要明确告知openssl生成的证书/密钥是同一个文件.

这就是你需要的:在〜/ .ipython/profile_ {yourprofile} /ipython_notebook_config.py中,添加一行

c.NotebookApp.keyfile = u'/absolute/path/to/your/certificate/mycert.pem'

实质上,复制certfile的同一行,并替换certfile的密钥文件.

请参阅:运行Notebook Server,特别是"使用SSL/HTTPS"部分.