python发送https请求并验证服务端证书
·
import urllib.request
import ssl
def send_request():
CA_FILE = r"D:\station\python_demo\cert\xxx.cer"
# 如果服务端需要验证客户端证书,则需要额外传入以下两个参数
# KEY_FILE = "client.key"
# CERT_FILE = "client.crt"
# 这里屏蔽了不安全的TLSv1与V1.1协议
context = ssl.SSLContext(ssl.PROTOCOL_TLS)
context.options |= ssl.OP_NO_TLSv1
context.options |= ssl.OP_NO_TLSv1_1
# 这里不检查证书的hostname是否与服务端一致,这是用来连接存储的api管理工具的,一般这个hostname都对不上
context.check_hostname = False
# context.load_cert_chain(certfile=CERT_FILE, keyfile=KEY_FILE)
# 加载受信任的ca列表
context.load_verify_locations(CA_FILE)
# context.verify_mode = ssl.CERT_REQUIRED
try:
# 通过request()方法创建一个请求:
request = urllib.request.Request('https://x.x.x.x:xxxx')
res = urllib.request.urlopen(request, context=context)
print(res.code)
print(res.read().decode("utf-8"))
except Exception as ex:
print("Found Error in auth phase:%s" % str(ex))
if __name__ == '__main__':
send_request()
如果使用requests包则使用一下方法:
import requests
ca_file = r'D:\station\python_demo\cert\xxxx.cer'
ret = requests.get(url="https://8.46.19.193:8088", verify=ca_file)
但是使用该方法目前还不知道怎么跳过hostname验证
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)