id | title | sidebar_label |
---|---|---|
https | HTTPS | 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(url = "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
中引入该keystore
的id
即可
@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
中配置其中任意一个keystore
的id
都可以