Karate 1.1.0配置代理后请求API报unrecognized_name SSL错误如何解决
解决方案
SSLHandshakeException: Received fatal alert: unrecognized_name错误是HTTPS请求经过代理时,SNI(服务器名称指示)扩展和代理端配置不匹配导致的,你可以按照以下步骤依次排查解决:
方案1:调整Karate代理配置(优先尝试)
原来的字符串形式代理配置参数不全,替换为全量对象格式配置,关闭SNI扩展:
在karate-config.js中修改代理配置为:
karate.configure('proxy', { uri: 'http://<你的代理地址及端口>', nonProxyHosts: ['localhost', '127.0.0.1'], // 不需要走代理的内网地址可添加到此处 enable: true, ssl: { disableSni: true } });
方案2:添加JVM启动参数关闭SNI
如果方案1无效,在Jenkins执行测试的启动命令中添加JVM参数,全局禁用SNI扩展:
- 如果是Maven项目,执行命令修改为:
mvn test -Djsse.enableSNIExtension=false - 如果是Gradle项目,在test任务中添加jvmArgs配置:
test { jvmArgs '-Djsse.enableSNIExtension=false' }
方案3:导入代理服务器证书到JDK信任库
如果你的代理服务器使用自签名证书,需要将代理的根证书导入到Jenkins节点运行测试所用JDK的信任库,执行命令如下:keytool -import -alias proxy-ca -file /path/to/proxy_ca.crt -keystore $JAVA_HOME/jre/lib/security/cacerts
信任库默认密码为changeit。
验证
配置完成后先在Jenkins节点本地手动执行测试,确认接口可以正常请求后再接入流水线。
内容的提问来源于stack exchange,提问作者brian
相关产品推荐
相关产品推荐

