RESTAssured测试HTTP与HTTPS REST API差异及HTTPS额外测试要点问询
HTTP与HTTPS的REST API测试核心差异
- 协议层逻辑差异:HTTP不需要证书校验、加密协商步骤,HTTPS需要先完成TLS握手,包括服务端证书合法性校验、密钥协商,握手失败会直接返回连接错误,不会进入应用层的请求处理流程
- 端口默认值差异:HTTP默认使用80端口,HTTPS默认使用443端口,端口配置错误会直接导致请求失败
- 传输安全属性差异:HTTP是明文传输,测试不需要验证传输过程的加密有效性,HTTPS需要额外验证传输内容加密、防篡改机制正常
- 异常场景差异:HTTPS存在证书过期、域名与证书不匹配、自签名证书不信任、TLS版本过低等专属异常场景,HTTP不存在这类测试点
given().relaxedHTTPSValidation() 方法作用 这是RESTAssured提供的仅建议在测试环境使用的HTTPS校验跳过方法。默认情况下RESTAssured发起HTTPS请求时,会对服务端证书的合法性、域名匹配度做严格校验,如果测试环境使用自签名证书、测试域名与证书域名不匹配、证书由未被公开信任的根证书签发,会直接抛出SSLHandshakeException异常。调用该方法后会禁用服务端证书合法性校验、主机名校验,直接完成TLS握手,继续后续的接口逻辑测试。
HTTPS请求头额外传递要求
正常情况下HTTPS协议不需要在请求头中额外传递专属参数,TLS握手是在传输层完成的,对应用层的HTTP请求头完全透明。仅两类特殊场景有额外配置要求:
- 服务端开启双向TLS认证(mTLS)时,客户端证书在TLS握手阶段上传,不需要放到请求头中
- 部分业务自定义的鉴权参数、加密标识放在请求头属于业务逻辑要求,和HTTPS协议本身无关
RESTAssured 测试HTTPS接口的额外配置
1. 测试环境临时跳过证书校验(禁止在生产验证场景使用)
// 全局配置,所有请求都跳过证书校验 RestAssured.useRelaxedHTTPSValidation(); // 单请求维度跳过证书校验 given().relaxedHTTPSValidation().when().get("https://test-api.example.com/xxx").then().statusCode(200);
2. 严格证书校验场景指定信任库
需要做证书合法性验证时,可把服务端根证书导入JDK默认信任库,也可在代码中指定信任的证书库:
given().keyStore("path/to/truststore.jks", "keystore_password").when().get("https://prod-api.example.com/xxx").then().statusCode(200);
3. 双向TLS(mTLS)场景配置
服务端要求客户端上传证书时,需要同时配置客户端证书和服务端信任库:
given() .keyStore("path/to/client-keystore.p12", "client_password") // 客户端证书 .trustStore("path/to/truststore.jks", "trust_password") // 服务端信任证书 .when().get("https://mtls-api.example.com/xxx").then().statusCode(200);
4. 指定TLS版本
部分服务端禁用了低版本TLS协议,可主动指定请求使用的TLS版本:
given().relaxedHTTPSValidation("TLSv1.3").when().get("https://test-api.example.com/xxx").then().statusCode(200);
HTTPS接口额外测试项
- 证书合法性校验测试:验证服务端证书过期、域名不匹配、根证书不被信任的场景下,正常客户端会拒绝连接,符合安全预期
- 配置合规性测试:验证服务端是否禁用了TLS1.0、TLS1.1等不安全的协议版本,是否禁用了弱加密套件
- 双向TLS有效性测试(若开启mTLS):验证不上传客户端证书、上传非法客户端证书的场景下请求被拒绝,仅持有合法证书的客户端可正常请求
- 降级防护测试:验证服务端是否禁止HTTP请求访问,或HTTP请求会自动跳转到HTTPS地址,符合安全要求
- 传输加密验证:抓包验证HTTPS传输的内容为密文,不会泄露接口请求参数、响应等敏感信息
内容的提问来源于stack exchange,提问作者Brenda
相关产品推荐
相关产品推荐

