如何用Karate DSL判断HTTP请求的SSL/TLS版本及请求安全性?
在Karate中获取TLS版本与验证HTTPS请求安全性
一、快速判断是否为HTTPS请求
不用复杂操作,直接检查请求URL的协议前缀就行:
* def isHttps = karate.requestUrl.startsWith('https://') * print '是否为HTTPS请求:', isHttps
返回true即为HTTPS请求,反之则是HTTP请求。
二、获取TLS版本(Karate无直接API,需自定义工具类)
Karate没有原生提供获取TLS版本的方法,但可以借助底层的Apache HttpClient实现:
- 新建Java工具类(放在项目
src/test/java下对应包路径):
import org.apache.http.conn.ManagedHttpClientConnection; import org.apache.http.conn.routing.HttpRoute; import com.intuit.karate.http.HttpClient; import com.intuit.karate.http.HttpRequest; public class SslUtils { // 获取TLS协议版本 public static String getTlsVersion(HttpClient client, HttpRequest request) { HttpRoute route = new HttpRoute(request.getUri()); ManagedHttpClientConnection conn = (ManagedHttpClientConnection) client.getConnectionManager().getConnection(route, null); if (conn != null && conn.isOpen()) { return conn.getSSLSession().getProtocol(); } return null; } }
- 在Karate脚本中调用这个工具类:
* def SslUtils = Java.type('your.package.SslUtils') // 替换成你的实际包路径 * def tlsVersion = SslUtils.getTlsVersion(karate.httpClient, karate.prevRequest) * print '当前使用的TLS版本:', tlsVersion
运行后会得到类似TLSv1.2或TLSv1.3的结果。
三、额外验证HTTPS安全性
你已经配置了* configure ssl = true,此时Karate会自动验证服务器证书有效性——如果证书过期、不被信任或域名不匹配,请求会直接报错,这本身就是一种安全校验。
如果需要手动查看证书信息,可扩展上面的SslUtils类:
// 在SslUtils类中新增方法 public static String getServerCertSubject(HttpClient client, HttpRequest request) { HttpRoute route = new HttpRoute(request.getUri()); ManagedHttpClientConnection conn = (ManagedHttpClientConnection) client.getConnectionManager().getConnection(route, null); if (conn != null && conn.isOpen()) { return conn.getSSLSession().getPeerCertificates()[0].getSubjectDN().getName(); } return null; }
然后在Karate中调用:
* def certSubject = SslUtils.getServerCertSubject(karate.httpClient, karate.prevRequest) * print '服务器证书主体信息:', certSubject
内容的提问来源于stack exchange,提问作者Rocio Vallejo Ramírez
相关产品推荐
相关产品推荐

