2016-04-15 46 views
3

我从下面位置复制代码:创建一个简单的HTTPS服务器

https://www.piware.de/2011/01/creating-an-https-server-in-python/

而且创造了新的PEM文件象下面这样:

sh-3.2# openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 10 
Generating a 2048 bit RSA private key 
.......................+++ 
...............................+++ 
writing new private key to 'key.pem' 
Enter PEM pass phrase: 
Verifying - Enter PEM pass phrase: 
----- 
You are about to be asked to enter information that will be incorporated 
into your certificate request. 
What you are about to enter is what is called a Distinguished Name or a DN. 
There are quite a few fields but you can leave some blank 
For some fields there will be a default value, 
If you enter '.', the field will be left blank. 
----- 
Country Name (2 letter code) [GB]:US 
State or Province Name (full name) [Berkshire]:CA 
Locality Name (eg, city) [Newbury]:CA 
Organization Name (eg, company) [My Company Ltd]:Test 
Organizational Unit Name (eg, section) []:Test 
Common Name (eg, your name or your server's hostname) []:mybox.com 
Email Address []:[email protected] 

它创造了2个文件cert.pem和key.pem。所以,我最后的代码是:

import BaseHTTPServer, SimpleHTTPServer 
import ssl 

httpd = BaseHTTPServer.HTTPServer(('localhost', 4443), SimpleHTTPServer.SimpleHTTPRequestHandler) 
httpd.socket = ssl.wrap_socket (httpd.socket, certfile='/myhome/cert.pem', server_side=True) 
httpd.serve_forever() 

,我跑我的程序:

python myserver.py 

但是,当我尝试从浏览器访问它:

https://mybox.com:4443 

我无法建立连接但是当我尝试像下面这样:

python -m SimpleHTTPServer 4443 

然后尝试通过浏览器访问我得到下面的错误:

An error occurred during a connection to mybox.com:4443. SSL received a record that exceeded the maximum permissible length. Error code: SSL_ERROR_RX_RECORD_TOO_LONG 

我打算做一个简单的HTTPS服务器。请让我知道我该如何解决这个问题?更新========================= ========

我复制了key.pem文件cert.pem

cat key.pem >> cert.pem 

现在,当我把我的服务器:

python ./try.py 

和命中URL

https://mybox.com:15368/ 

我看到浏览器状态“连接到mybox.com:4443“但不断等待响应页面。虽然在框我看到下面的输出中:

# python try.py 
Enter PEM pass phrase: 
Enter PEM pass phrase: 
Enter PEM pass phrase: 
Enter PEM pass phrase: 
Enter PEM pass phrase: 
Enter PEM pass phrase: 
Enter PEM pass phrase: 
Enter PEM pass phrase: 
Enter PEM pass phrase: 
Enter PEM pass phrase: 
Enter PEM pass phrase: 
Enter PEM pass phrase: 

我需要不断进入,我在创建的证书和PEM文件

回答

0

我假设你使用相同的密码短语有mybox.com在设置您的主机文件,但您需要包含端口。 HTTPS默认尝试访问443。你需要指定端口

HTTPS://mybox.com:4443

+0

是其在/ etc/hosts文件中有和访问同样的方式https://mybox.com:4443 - 更新了我的问题 – Prakash

+0

您certFile中的位置你应该包括'。'为当前目录或实际上是在根? certfile ='。/ myhome/cert.pem' –

+0

路径是正确的只有我使用了绝对路径和相对路径 – Prakash

-1

请改变你的最后第二行如下 - 添加密钥文件,然后再试一次。它的工作原理在我身边(Ubuntu的,python2.7)

httpd.socket = ssl.wrap_socket (httpd.socket, certfile='cert.pem', server_side=True, **keyfile="key.pem"**) 
+0

文件“try.py”,第6行 httpd.socket = ssl。语法错误:无效语法 Python 2.7.3(默认2013年2月7日, 12:12:45) – Prakash

+0

嗨我的Python版本是Python 2.7.6(默认,2015年6月22日,17:58:13) –