POST方法中的X509证书

时间:2014-12-11 10:15:05

标签: spring rest http-headers x509certificate

我正在构建一个 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标头

1 个答案:

答案 0 :(得分:0)

是的,你可以在发送的HTTP标题中添加证书,但我不推荐它。

认为在HTTP Post&#39;中提供证书是一个坏主意。或者在HTTP标头中足以检查是否允许发件人执行该操作。任何人都可以向您发送正确的&#39;证书,可以访问您的服务。发件人需要证明他被允许执行某项行动,而这不是通过向您发送证书来完成的。

尝试在SSL / TLS握手中激活客户端身份验证(为此您需要证书和客户端上的相应私有),或者用户需要在调用POST方法之前登录并根据用户是否可以授权该行动。