首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

15.5  使用OpenSSL

除了使用Python内置的SSL之外,还有一个对OpenSSL的绑定,称为pyOpenSSL,也可以用在Python中。使用pyOpenSSL和使用内置的SSL感觉上类似,它也是为socket建立一个包装(wrapper)。然而,pyOpenSSL的包装要比默认的更强大,而且功能更完整,更显著地是,它不需要您在basic-wrap.py中看到的那种为socket.ssl进行的粘合。

在您的程序使用OpenSSL之前,您需要取得pyOpenSSL。如果您的操作系统不提供,您可以从http://pyopenssl.sourceforge.net/下载。Windows的用户可以从http://twistedmatrix.com/products/ download下载一个编译好的版本。运行本节程序之前,需要安装它。这些例子需要0.5.1或以上版本。

下面是一个使用OpenSSL的基本例子:

#!/usr/bin/env python

# Basic OpenSSL example - Chapter 15 - osslbasic.py

import socket, sys

from OpenSSL import SSL

# Create SSL context object

ctx = SSL.Context(SSL.SSLv23_METHOD)

print "Creating socket...",

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

print "done."

# Create SSL connection object

ssl = SSL.Connection(ctx, s)

print "Establishing SSL...",

ssl.connect(('www.openssl.org', 443))

print "done."

print "Requesting document...",

ssl.sendall("GET / HTTP/1.0\r\n\r\n")

print "done."

while 1:

    try:

        buf = ssl.recv(4096)

    except SSL.ZeroReturnError:

        break

    sys.stdout.write(buf)

ssl.close()

运行这个例子(您可以使用./osslbasic.py),您将看到它会使用SSL连接www.openssl.org,并取得该站点的主页。为了这样做,它首先通过调用SSL.Context建立了一个Context对象。接着,像平常那样建立一个socket。然后,建立一个SSL Connection对象,这时就不需要socket对象了。打开一个连接,进行正常的通信——就像是使用一个标准的socket。事实上,您可以把Connection对象传递给任何希望得到socket对象的函数。一旦连接被建立起来,只要对这个对象的读取代码做少许修改,它就可以和已有的代码一起工作。

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论