py3270连接大型机报The target principal name is incorrect错如何解决
错误原因说明
你遇到的SSL: InitializeSecurityContext: error 0x80090322 (The target principal name is incorrect.)报错是TLS握手阶段的证书校验失败导致,触发原因是你访问的大型机服务器返回的SSL证书,与你访问的主机地址不匹配,或者证书不在系统信任列表中。
解决方案
方法1:直接在初始化Emulator时传入关闭证书验证的参数
py3270底层调用wc3270/x3270模拟器进程,你可以在创建Emulator实例时通过args参数传递模拟器的命令行配置,直接关闭证书验证,修改你的代码如下:
import time, sys from py3270 import Emulator delayt = 1 # 单位秒,降低运行速度方便观察屏幕更新 mylogin = '[xxxxxx]' mypass = '[xxxxxxx]' myhost = '[xxxxxxxxx]:5037' screenrows = [] # 新增-noverifycert参数关闭证书验证,部分版本还可补充-nohostverify关闭主机名校验 my3270 = Emulator(visible=True, args=['-noverifycert', '-nohostverify']) # TSO登录 my3270.connect(myhost) my3270.wait_for_field() #my3270.send_clear()
方法2:全局配置wc3270参数
你也可以直接修改wc3270的配置文件,添加如下两行配置,全局生效不需要每次传参:
verifyHostCert: false hostNameValidation: false
注意事项
- 关闭证书验证会降低连接安全性,仅建议在内部测试环境使用
- 生产环境建议优先将大型机服务器的SSL证书导入到系统信任证书库,或者确认访问的主机名与证书中配置的主机名一致,避免关闭验证带来的安全风险
内容的提问来源于stack exchange,提问作者Dheeraj Bhatt
相关产品推荐
相关产品推荐

