1.https单向认证。
https单向认证:客户端不需要发送证书,只需要认证服务器端证书是否正确即可。
https单向认证流程:客户端发送请求前,先认证服务器端证书,证书认证通过,则发送请求。
2.https双向认证。
https双向认证:简单来讲,就是客户端需要认证服务器端的证书,服务器端需要认证客户端的证书。
https双向认证流程:客户端发送请求前,先认证服务器端证书,证书认证通过,则发送请求。客户端发送客户端证书到服务器,服务器再进行认证确定客户端证书正确,通过后,返回请求的内容。
3.python 发送https 请求并带证书文件:直接上代码(get和post)
CLIENT_PEM = "C:\\Users\\haha\\Desktop\\client.pem"
KEY_FILE = "C:\\Users\\haha\\Desktop\\mykey.pem"
SERVER_PEM = "C:\\Users\\haha\\Desktop\\server.pem"
context = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
#context.verify_mode = ssl.CERT_REQUIRED
context.check_hostname = False
#context.load_cert_chain(certfile=CLIENT_PEM,keyfile=KEY_FILE,password=getpasswd())
try:
context.load_cert_chain(certfile=SERVER_PEM)
except IOError, ioError:
log.error(ioError)
log.error(u'证书文件%s不存在' % SERVER_PEM)
raise CommonException
try:
f = urllib2.urlopen(url, context=context)
buf = f.read()
f.close()
代码说明:
SERVER_PEM = "C:\\Users\\haha\\Desktop\\server.pem" 此文件中包含了证书信息和私钥信息。
CLIENT_PEM = "C:\\Users\\haha\\Desktop\\client.pem" 此文件中包含证书信息
KEY_FILE = "C:\\Users\\haha\\Desktop\\mykey.pem" 此文件中包含私钥
加载证书可以通过两种方式:
1.将两个文件单独传入:
context.load_cert_chain(certfile=CLIENT_PEM,keyfile=KEY_FILE)
2.只传入单个包含证书和私钥信息的文件
context.load_cert_chain(certfile=SERVER_PEM)
说明:
根据官方文档,python https导证书只支持pem格式的证书:certfile(证书文件,包含证书的信息),keyfile(私钥文件(生成加密证书时的私钥)),主要用于导入证书。
你可以直接传入包含证书和私钥的一个文件,也可以分别传入私钥文件和证书文件。