Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring X509 POST方法中的证书_Spring_Rest_Http Headers_X509certificate - Fatal编程技术网

Spring X509 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)

我正在使用Spring构建一个REST服务,供应用程序使用。这是一个非常简单的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头?

是的,您可以将证书添加到发送的HTTP头,但我不推荐这样做

如果认为“在HTTP Post中提供证书”或在HTTP头中提供证书就足以检查发送方是否被允许执行该操作,这是一个坏主意。任何人都可以向您发送“正确”的证书,并可以访问您的服务。发送者需要证明他被允许执行一项操作,而这并不是通过简单地向您发送证书来完成的

您可以尝试在SSL/TLS握手中激活客户端身份验证,为此,您需要在客户端上提供证书和相应的专用证书,或者用户需要在调用POST方法之前登录,并且您可以根据用户授权或不授权该操作