Version: 1.5.x

HTTPS

为保证网络访问安全,现在大多数企业都会选择使用SSL验证来提高网站的安全性。

所以Forest自然也加入了对HTTPS的处理,现在支持单向认证和双向认证的HTTPS请求。

单向认证

如果访问的目标站点的SSL证书由信任的Root CA发布的,那么您无需做任何事情便可以自动信任

public interface Gitee {
@Request(url = "https://gitee.com")
String index();
}

Forest的单向验证的默认协议为SSLv3,如果一些站点的API不支持该协议,您可以在全局配置中将ssl-protocol属性修改为其它协议,如:TLSv1.1, TLSv1.2, SSLv2等等。

forest:
...
ssl-protocol: TLSv1.2

全局配置可以配置一个全局统一的SSL协议,但现实情况是有很多不同服务(尤其是第三方)的API会使用不同的SSL协议,这种情况需要针对不同的接口设置不同的SSL协议。

/**
* 在某个请求接口上通过 sslProtocol 属性设置单向SSL协议
*/
@Get(
url = "https://localhost:5555/hello/user",
sslProtocol = "SSL"
)
ForestResponse<String> truestSSLGet();

在一个个方法上设置太麻烦,也可以在 @BaseRequest 注解中设置一整个接口类的SSL协议

@BaseRequest(sslProtocol = "TLS")
public interface SSLClient {
@Get("https://localhost:5555/hello/user")
String testSend();
}

双向认证

若是需要在Forest中进行双向验证的HTTPS请求,也很简单。

在全局配置中添加keystore配置:

forest:
...
ssl-key-stores:
- id: keystore1 # id为该keystore的名称,必填
file: test.keystore # 公钥文件地址
keystore-pass: 123456 # keystore秘钥
cert-pass: 123456 # cert秘钥
protocols: SSLv3 # SSL协议

接着,在@Request中引入该keystoreid即可

@Request(
url = "https://localhost:5555/hello/user",
keyStore = "keystore1"
)
String send();

另外,您也可以在全局配置中配多个keystore

forest:
...
ssl-key-stores:
- id: keystore1 # 第一个keystore
file: test1.keystore
keystore-pass: 123456
cert-pass: 123456
protocols: SSLv3
- id: keystore2 # 第二个keystore
file: test2.keystore
keystore-pass: abcdef
cert-pass: abcdef
protocols: SSLv3
...

随后在某个具体@Request中配置其中任意一个keystoreid都可以

Last updated on