python 证书-在python使用SSL(HTTPS)

近期在研究ssl,主要的开发工具是python。期间走了不少弯路。现在这里总结一下。

在python上使用SSL有许多场景,我主要关注的是使用python访问HTTPS资源,以及使用python提供HTTPS服务。(HTTPS是SSL在WEB上的应用之一)

一、使用python访问HTTPS网站

这应该算是最简单也是最常见的场景了。我们使用python做为客户端去访问公网上的网站,而这个网站为了传输安全(避免被劫持或者窃听)使用了HTTPS服务,传输过程内容都经过了SSL加密。下面来看下具体的python代码,这里使用的是python2.7.11,用的是python自带的urllib2。当然你也可以使用requests或者pycurl等第三方库,都可以,原理都是一样的,只是实现的手段有些差异而已。

import

urllib2

import

ssl

if

__name__ == '__main__':

myurl="https://www.baidu.com"

req

= urllib2.Request(myurl)

try:

response = urllib2.urlopen(req)

print "HTTP return code:%d" % response.getcode()

strResult= response.read()

print strResult

except Exception ,ex:

print "Found Error :%s" % str(ex)

运行它,我们就可以得到这个网站上的内容了。并且传输过程都经过了加密。是不是很简单。整个的传输过程大概是这样的,客户端请求SSL连接握手(其中会跟服务器有些SSL协议之间的交互,这个我们不用详细去研究)服务器把自己的证书传给客户端,客户端对这个证书进行认证(每台客户端电脑上都会默认安装一些权威CA(证书签发机构)的证书,这个认证就是使用这些证书进行的,python的ssl模块会自动加载这些权威CA证书,当然你也可以自己指定,这个后面会谈到),确保这个证书是由可信的CA颁布的(客户端对服务端证书进行认证这个操作,是从python2.7.9开始才有的,以前版本的是不进行认证的),之后就是利用证书交换密钥后,使用密钥对传输内容进行加密传输。

互联网上大部分的正规网站都是会有自己的证书的,这些证书都是经过权威CA认证的,可以被认为是可信的(其实这个也不一定,前段时间就有过谷歌封杀赛门铁克CA签发的证书的事件,有兴趣的可以去网上搜索看看)。但是同样也有不少网站,由于各种各样的原因没有这些经过权威CA认证的证书,毕竟申请这些证书流程比较麻烦,并且要支付一定的费用。这些网站也可以提供安全的HTTPS服务,但由于他们的证书是自签名的或者是由非权威的CA颁发的(这两种证书后面会谈到),所以会被认为是不可信的。当使用浏览器打开这些网站时,浏览器会提醒你这是不安全的连接,当然这个不安全是指网站未经权威认证,所以网站本身可能不安全,但在网络传输层面上来看,传输是安全的。那我们访问这些网站时,使用上面的代码会有错误提示,下面代码就是访问一个这是我自己建立的一个HTTPS网站https://127.0.0.1:8443,该网站使用的是自签名的证书。如果你使用谷歌浏览器访问会提示你:您的连接不是私密连接,如果你强制连接则会提示不安全

import

urllib2

import

ssl

if

__name__ == '__main__':

myurl="https://127.0.0.1:8443"

req

= urllib2.Request(myurl)

try:

response = urllib2.urlopen(req)

print "HTTP return code:%d" % response.getcode()

strResult= response.read()

print strResult

except Exception ,ex:

print "Found Error :%s" % str(ex)

运行这个就会出现错误:

提示证书校验错误。这时如果我们想要访问这样的网站就要把客户端的证书校验关闭。在前面加上一句:ssl._create_default_https_context =

ssl._create_unverified_context即可

import

urllib2

import

ssl

ssl._create_default_https_context =

ssl._create_unverified_context

if

__name__ == '__main__':

myurl="https://127.0.0.1:8443"

req

= urllib2.Reque

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值