Spring X509 POST方法中的证书
我正在使用Spring构建一个REST服务,供应用程序使用。这是一个非常简单的REST,它只有2个GET和1个POST方法。 我想控制谁可以访问POST方法,所以我考虑使用X509证书来完成这项工作,问题是我已经在使用HTTPS进行服务器身份验证,而且SSL握手期间的客户端身份验证似乎是不可能的。 所讨论的POST方法的作用类似于代理,下面是方法结构:Spring X509 POST方法中的证书,spring,rest,http-headers,x509certificate,Spring,Rest,Http Headers,X509certificate,我正在使用Spring构建一个REST服务,供应用程序使用。这是一个非常简单的REST,它只有2个GET和1个POST方法。 我想控制谁可以访问POST方法,所以我考虑使用X509证书来完成这项工作,问题是我已经在使用HTTPS进行服务器身份验证,而且SSL握手期间的客户端身份验证似乎是不可能的。 所讨论的POST方法的作用类似于代理,下面是方法结构: @RequestMapping(value = "/proxy/{pack}", method = RequestMethod.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头?是的,您可以将证书添加到发送的HTTP头,但我不推荐这样做 如果认为“在HTTP Post中提供证书”或在HTTP头中提供证书就足以检查发送方是否被允许执行该操作,这是一个坏主意。任何人都可以向您发送“正确”的证书,并可以访问您的服务。发送者需要证明他被允许执行一项操作,而这并不是通过简单地向您发送证书来完成的 您可以尝试在SSL/TLS握手中激活客户端身份验证,为此,您需要在客户端上提供证书和相应的专用证书,或者用户需要在调用POST方法之前登录,并且您可以根据用户授权或不授权该操作