java - HTTPS REST 客户端响应

标签 java rest https

我需要从客户端进行 HTTPS 调用。我不需要向服务器发送证书,只需要验证服务器的证书即可。

我研究了这个主题,这是我的理解。您能确认一下吗?我还没有测试服务来验证我的代码......但仍然需要在截止日期前完成......任何建议/输入都会有所帮助。

我将其添加到我的类(class)中:

private static String appKeyFile = "/project/src/security/cert_file.jck";  
private static String key = "password";  
static {  
    System.setProperty("javax.net.ssl.keyStore", appKeyFile);  
    System.setProperty("javax.net.ssl.keyStorePassword",key);  
    System.setProperty("javax.net.ssl.keyStoreType","JCEKS");  
}  

我正在进行 HTTPS 调用,如下所示:

config = new DefaultClientConfig();  
client = Client.create(config);  
service = client.resource(UriBuilder.fromUri("https://localhost:8081/TestService").build());  
clientResponse = service.path("rs").path("test").path("getCustomerDetail")  
        .accept(MediaType.APPLICATION_XML)  
        .post(ClientResponse.class, customerRequestType);  

if (clientResponse.getStatus() == Response.Status.OK.getStatusCode()) {   
    custResponseType = clientResponse.getEntity(CustResponseType.class);  
    System.out.println("First Name" + 
    custResponseType.getFirstName());  
}

从 SSL/HTTPS/证书等角度来看(除了调试之外)这是否足够?我还需要做其他事情吗,例如加载 keystore 或初始化 SSLContext?

最佳答案

javax.net.ssl.keyStore* 属性( keystore )用于使用它的一方的 key 和证书。也就是说,在服务器上,应该包含服务器证书及其私钥;在客户端,它应该包含客户端证书及其私钥。

相反,信任库(javax.net.ssl.trustStore* 属性)包含用于验证远程方证书的可信证书。在客户端,它用于确定您是否信任服务器证书(通常,通过客户端信任的 CA 证书链);在服务器上,它用于验证客户端证书。

信任库和 keystore 都是 keystore 文件/对象(术语并没有真正的帮助)。

如果您在客户端设置javax.net.ssl.keyStore*,客户端将使用它来提供其证书(该证书只能由服务器请求,并且您可以使用该证书)反正好像没用过)。它仍将使用默认的信任库(随 JRE 一起提供/配置),并且不太可能在 cert_file.jck 中包含特定的证书(这可能是您为该证书生成的自签名证书)服务器)。相反,将 javax.net.ssl.trustStore* 属性设置为指向该文件。

(如果您也希望默认 CA 证书可用,我建议您复制默认信任库中的证书,通常从 $JAVA_HOME/lib/security/jssecacerts$ JAVA_HOME/lib/security/cacerts 到您自己的信任库中。)

关于java - HTTPS REST 客户端响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4130409/

相关文章:

networking - net/http GET 请求错误 tls 收到长度为 20527 的超大记录

java - SCSS !为什么这个简单的测试用例不起作用?

java - 使用ant加载yaml属性文件

java - 将对象列表转换为 Json 字符串时出现 Stackoverflow 错误

angularjs - 请求的资源上不存在 'Access-Control-Allow-Origin' header 。响应的 HTTP 状态代码为 401

javascript - BxSlider 无法在 IE 中通过 https 工作(混合内容警告)

android - 适用于 Android 的代理服务器 - 处理 HTTPS

java - 忽略 jackson I/O 序列化中的字段并忽略未知字段

java - 凯撒密码帮助 ASCII 循环

ajax - 将POST与core-ajax-dart结合使用时无法将JSON数据发送到服务器REST API