Java HTTPS REST客户端响应

Java HTTPS REST客户端响应,java,rest,https,Java,Rest,Https,我需要从客户端打一个HTTPS电话。我不需要向服务器发送证书,只需要验证来自服务器的证书 我研究了这个话题,这是我的理解。你能确认一下吗?我还没有一个测试服务来验证我的代码。。。但仍然需要在最后期限前完成。。任何建议/意见都会有帮助 我在课堂上添加了以下内容: private static String appKeyFile = "/project/src/security/cert_file.jck"; private static String key = "password"; s

我需要从客户端打一个HTTPS电话。我不需要向服务器发送证书,只需要验证来自服务器的证书

我研究了这个话题,这是我的理解。你能确认一下吗?我还没有一个测试服务来验证我的代码。。。但仍然需要在最后期限前完成。。任何建议/意见都会有帮助

我在课堂上添加了以下内容:

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/certs等角度来看,这是否足够(调试除外)?是否需要执行其他操作,如加载密钥库或初始化SSLContext?

如果您使用的是自签名证书,则可能会遇到与SSL证书验证相关的问题。讨论此问题。

如果使用自签名证书,则可能会遇到与SSL证书验证相关的问题。讨论此问题。

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

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

truststore和keystore都是密钥库文件/对象(术语没有真正的帮助)

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


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

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

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

truststore和keystore都是密钥库文件/对象(术语没有真正的帮助)

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


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

是的,我通过了该链接,并做了一个导入证书的说明。。您还看到了其他问题吗?是的,我浏览了该链接,并记录了导入证书的过程。。您还看到了其他问题吗?您使用的是哪个面向REST的库?您使用的是哪个面向REST的库?谢谢您的回复!最后,我正确地理解了信任库和密钥库之间的区别。现在我对解决方案更有信心…感谢您的回复!最后,我正确地理解了信任库和密钥库之间的区别。现在我对解决方案更有信心了。。。