我正在构建一个 REST 服务(使用Spring)供应用程序使用。这是一个非常简单的REST,它只有2个GET和1个POST方法 我想控制谁可以访问POST方法,所以我想到使用X509证书来完成这项工作,问题是我已经在使用带服务器身份验证的HTTPS了,似乎SSL握手期间的客户端身份验证是不可能的。
有问题的POST方法就像代理一样,这里是方法结构:
@RequestMapping(value = "/proxy/{pack}", method = RequestMethod.POST)
public ResponseEntity<String> requestService(
@PathVariable(value = "pack") String pack,
HttpServletResponse response, HttpServletRequest request, @RequestBody byte[] body)
throws IOException, URISyntaxException {
OutputStream writer = response.getOutputStream();
//LOGIC HERE - USING CERTIFICATE IF POSSIBLE
//PROXY STARTS HERE
HttpClient client = HttpClientBuilder.create().build();
HttpPost post = new HttpPost(URL_OK);
HttpEntity entity = new ByteArrayEntity(body);
post.setEntity(entity);
HttpResponse postResponse = client.execute(post);
byte[] result = EntityUtils.toByteArray(postResponse);
writer.write(result);
writer.flush();
writer.close();
return null;
}
我很难找到一种发送/接收证书的方法。 有没有办法将证书附加到HTTP标头?
答案 0 :(得分:0)
是的,你可以在发送的HTTP标题中添加证书,但我不推荐它。
认为在HTTP Post&#39;中提供证书是一个坏主意。或者在HTTP标头中足以检查是否允许发件人执行该操作。任何人都可以向您发送正确的&#39;证书,可以访问您的服务。发件人需要证明他被允许执行某项行动,而这不是通过向您发送证书来完成的。
尝试在SSL / TLS握手中激活客户端身份验证(为此您需要证书和客户端上的相应私有),或者用户需要在调用POST方法之前登录并根据用户是否可以授权该行动。