Python实现TLS双向认证

概要

本文使用Python实现HTTPS的双向认证,完成客户端和服务端证书的双校验

技术名词解释

TLS:TLS(传输层安全性) 是一种广泛采用的安全协议,用于在互联网通信中提供私密性和数据安全性。它主要用于对Web应用程序和服务器之间的通信进行加密

双向认证:客户端和服务器端都需要验证对方的身份,在建立Https连接的过程中,客户端除了需要从服务器端下载服务器的公钥证书进行验证外,还需要把客户端的公钥证书上传到服务器端给服务器端进行验证,等双方都认证通过了,才开始建立安全通信通道进行数据传输

X509证书:X.509是公钥基础设施(PKI)的标准格式。X.509证书就是基于国际电信联盟(ITU)制定的X.509标准的数字证书

代码实现

	import ssl
	import _ssl
	import urllib3
	from urllib3.util import create_urllib3_context
	# 客户端证书文件 PEM格式
	client_cert = ''
	# 客户端私钥文件 PEM格式
    client_key = ''
    def create_ssl_context(minimum_version=ssl.PROTOCOL_TLSv1_2, maximum_version=ssl.PROTOCOL_TLSv1_2, ca_cert=None):
        context = create_urllib3_context()
        # 设置 TLS 版本
        context.minimum_version = minimum_version
        context.maximum_version = maximum_version
        context.check_hostname = False
        # 客户端设置服务端证书校验
        # CERT_NONE: VerifyMode 不校验
        # CERT_OPTIONAL: VerifyMode 可选
        # CERT_REQUIRED: VerifyMode 必选
        context.verify_mode = ssl.CERT_NONE
        # 如果强制校验客户端证书,则需要提供CA证书
        if ca_cert is not None:
        	context.load_verify_locations(cafile=ca_cert)  # 用于验证服务器证书
        context.load_cert_chain(certfile=client_cert, keyfile=client_key)  # 加载客户端证书和私钥
        return context

    http = urllib3.PoolManager(
        ssl_context=create_ssl_context(minimum_version=_ssl.PROTO_TLSv1_2, maximum_version=_ssl.PROTO_TLSv1_2,
                                       ca_cert=None)
    )
    url = ''
    # 后续就可以使用http实例进行请求了,比如
    response = http.request('GET', url)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值