2012-06-29 170 views
5

试图设置一个简单的SSL服务器。过去我从未有任何SSL为我工作。我对SSL证书和签名的理解有些松散。Python简单SSL套接字服务器

代码很简单

import socket, ssl 

context = ssl.SSLContext(ssl.PROTOCOL_TLSv1) 
context.load_cert_chain(certfile="mycertfile") ############### 

bindsocket = socket.socket() 
bindsocket.bind(('', 2099)) 
bindsocket.listen(5) 

while True: 
    newsocket, fromaddr = bindsocket.accept() 
    sslsoc = context.wrap_socket(newsocket, server_side=True) 
    request = sslsoc.read() 
    print(request) 

线在那里与###年代后它是心不是工作之一。我不知道我需要用openssl来生成一个能在这里工作的PEM文件。

任何人都可以启发我如何使这个简单的套接字工作。

顺便说一句,这不用于HTTP。

+0

如果你愿意使用扭曲,这里有一个很好的例子使用OpenSSL:http://twistedmatrix.com/documents/current/core/howto/ssl.html 看起来像需要一个证书和一个公用密钥,证书用公钥的私钥对进行签名。 – jozzas

+0

这很好,它看起来更简单,但我需要的是生成正确的文件使用的命令。我刚才尝试过,但得到了很奇怪的错误。显然,我没有正确签署或使用正确的文件。 – Caprin

+0

看起来有很多这方面的教程,你有没有尝试跟着这个,例如? http://devsec.org/info/ssl-cert.html – jozzas

回答

8

您可以使用此命令生成自签名证书

openssl req -new -x509 -days 365 -nodes -out cert.pem -keyout cert.pem 

OpenSSL的框架会要求你输入一些信息,比如你的国家,城市等只需按照指示,和你将获得一个cert.pem文件。输出文件将同时具有您可以生成公钥的RSA私钥和证书。 输出文件看起来是这样的:

-----BEGIN RSA PRIVATE KEY----- 
# your private key 
-----END RSA PRIVATE KEY----- 
-----BEGIN CERTIFICATE----- 
# your certificate 
-----END CERTIFICATE----- 

只是加载它,而SSL模块将处理剩下的给你:

context.load_cert_chain(certfile="cert.pem", keyfile="cert.pem") 

顺便说一句,有没有 “的SSLContext” 在python2。谁正在使用python2家伙,包装插槽时,只需指定PEM文件:

newsocket, fromaddr = bindsocket.accept() 
connstream = ssl.wrap_socket(newsocket, 
          server_side=True, 
          certfile="cert.pem", 
          keyfile="cert.pem", 
          ssl_version=YOUR CHOICE) 

可用的SSL版本:ssl.PROTOCOL_TLSv1ssl.PROTOCOL_SSLv2ssl.PROTOCOL_SSLv3ssl.PROTOCOL_SSLv23。如果你不知道,ssl.PROTOCOL_SSLv23可能是你的选择,因为它提供了与其他版本的最大兼容性。

+1

来创建'context',调用'ssl.create_default_context'函数(它也适用于最新的Python 2版本)。 – jfs

+0

我知道这是一个旧帖子,但由于POODLE漏洞,没有人应该建议使用TLS上的SSLv3。更多信息请访问https://en.wikipedia.org/wiki/POODLE – fileinster

相关问题