EC2上的Jupyter:SSL错误

时间:2016-04-03 15:57:05

标签: python ssl jupyter jupyter-notebook

我试图从EC2提供Jupyter笔记本,但我收到了SSL错误。 我正在使用此AMI:TensorFlow GPU - @nottombrown (ami-8ed4d0e4)。我使用了自签名证书,这可能是问题的一部分。

我已经查看了其他几个有类似错误的帖子,例如thisthisthis,但是他们却收到了错误信息。完全不同的背景,我无法弄清楚如何让解决方案(例如设置verify=False)为我工作。

[E 15:52:44.954 NotebookApp] Exception in callback (<socket._socketobject object at 0x7f5f993dad00>, <function null_wrapper at 0x7f5f99319758>)
    Traceback (most recent call last):
      File "/usr/local/lib/python2.7/dist-packages/tornado/ioloop.py", line 883, 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 274, in accept_handler
        callback(connection, address)
      File "/usr/local/lib/python2.7/dist-packages/tornado/tcpserver.py", line 239, in _handle_connection
        do_handshake_on_connect=False)
      File "/usr/local/lib/python2.7/dist-packages/tornado/netutil.py", line 521, in ssl_wrap_socket
        return ssl.wrap_socket(socket, **dict(context, **kwargs))
      File "/usr/lib/python2.7/ssl.py", line 487, in wrap_socket
        ciphers=ciphers)
      File "/usr/lib/python2.7/ssl.py", line 241, in __init__
        ciphers)
    SSLError: [Errno 336265225] _ssl.c:355: error:140B0009:SSL routines:SSL_CTX_use_PrivateKey_file:PEM lib

5 个答案:

答案 0 :(得分:5)

Try to add https:// to force web browser to use HTTPS-connection.

I got:

[W 08:25:56.148 NotebookApp] SSL Error on 9 ('<jupyter-server-ip>', 62862): [SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:590)

because Chrome tried to use HTTP connection. When using

https://<jupyter-server-ip> 

it finally works :)

答案 1 :(得分:3)

此错误表示无法找到SSL证书。

如果您尚未创建SSL证书:

通过在命令行中键入以下内容(从主目录开始)创建一个:

$ mkdir certs
$ cd certs
$ sudo openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout mycert.pem -out mycert.pem

(来自these instructions

现在您已拥有SSL证书:

你需要告诉Jupyter在哪里找到它。

如果您有jupyter_notebook_config.py(或使用jupyter notebook --generate-config生成一个),请查看c.NotebookApp.certfile = u'/home/ubuntu/certs/mycert.pem' #location of your certificate file

确保您拥有以下一行:

certs

(见the Jupyter Notebook docs

并确保您的自签名SSL证书实际上位于该位置。常见的错误是将.certs(((lambda (fn) (lambda(x)(fn (fn x)))) (lambda (x) (* x 3))) 4) 混为一谈。这样的错误将导致Jupyter无法找到您的SSL证书,并且会导致您获得的错误。

答案 2 :(得分:1)

我发现发生权限问题是因为mycert.pem文件仅具有root权限

drwxrwxr-x 2 ubuntu ubuntu 4096 Mar 20 12:22 .
drwxr-xr-x 9 ubuntu ubuntu 4096 Mar 20 12:09 ..
-rw------- 1 root   root   2949 Mar 20 12:22 mycert.pem

我无法以root用户身份运行jupyter Notebook,因此我更改了权限

sudo chown ubuntu:ubuntu mycert.pem

这解决了问题

答案 3 :(得分:0)

我在使用Unbuntu 14.4下的自签名证书的公共服务器运行jupyter笔记本时遇到了同样的错误。在我的情况下,问题是由于jupyter_notebook_config.py文件中的错误。我错误地设置了 c.NotebookApp.client_ca = u&#39; /../ mycert.pem&#39; 。评论这条线解决了这个问题。

答案 4 :(得分:0)

出现此错误的原因有两个:

  1. 证书颁发
$ mkdir certs
$ cd certs
$ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout mycert.pem -out mycert.pem
  1. 错误的http(s)呼叫。

    • https://ec2-ip:8888 |使用http s

    • 获取ec2-ip curl http://checkip.amazonaws.com