使用Karate工具做REST API测试时遭遇SSL握手异常求助
解决Karate测试中的SSLHandshakeException错误
嘿,这个SSL握手错误在Karate做REST API测试时挺常见的,本质就是Java虚拟机不信任目标API的SSL证书导致的。给你几个实用的解决办法,根据你的测试场景选就行:
方法1:快速禁用SSL证书验证(仅测试环境用)
如果是测试环境的自签名证书,最省事的方式就是让Karate跳过证书验证,直接在你的feature测试文件里加一行配置:
* configure ssl = false
注意:这个方法只适合测试环境折腾用,生产环境绝对不能碰,会带来严重的安全风险。
方法2:把证书导入JVM全局信任库
要是需要长期信任目标API的证书,可以把证书加到Java默认的信任库cacerts里:
- 先拿到目标API的证书:可以通过浏览器导出,或者用
openssl命令提取:
openssl s_client -connect your-api-domain:443 < /dev/null | openssl x509 -outform PEM > api-cert.pem
- 用
keytool命令导入证书(默认密码是changeit):
keytool -importcert -file api-cert.pem -alias api-cert-alias -keystore $JAVA_HOME/jre/lib/security/cacerts
小提示:如果是JDK 9及以上版本,信任库路径是
$JAVA_HOME/lib/security/cacerts
方法3:在Karate里指定自定义信任库
不想修改全局信任库的话,可以自己建一个信任库文件,然后让Karate单独用它:
- 先创建自定义信任库并导入证书:
keytool -importcert -file api-cert.pem -alias api-cert-alias -keystore my-truststore.jks -storepass my-password
- 在feature文件里配置使用这个信任库:
* configure ssl = { trustStore: 'classpath:my-truststore.jks', trustStorePassword: 'my-password' }
记得把my-truststore.jks放到测试资源目录下哦。
方法4:升级Karate版本
你现在用的是0.7.0版本,这个版本有点老了,后续的Karate版本修复了不少SSL相关的兼容性问题。建议升级到最新稳定版,修改pom.xml里的依赖版本就行,比如:
<dependency> <groupId>com.intuit.karate</groupId> <artifactId>karate-apache</artifactId> <version>1.4.1</version> <scope>test</scope> </dependency> <dependency> <groupId>com.intuit.karate</groupId> <artifactId>karate-junit4</artifactId> <version>1.4.1</version> <scope>test</scope> </dependency>
内容的提问来源于stack exchange,提问作者karthik holla
相关产品推荐
相关产品推荐

