Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.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
Java 如何使Restlet客户端忽略SSL证书问题_Java_Ssl_Https_Restlet - Fatal编程技术网

Java 如何使Restlet客户端忽略SSL证书问题

Java 如何使Restlet客户端忽略SSL证书问题,java,ssl,https,restlet,Java,Ssl,Https,Restlet,我目前正在一个测试环境中工作,其中服务器有一个默认的自签名SSL证书。我正在使用Restlet 2.1-RC2,并像这样实例化客户机资源: Client client = new Client(new Context(), Protocol.HTTP); cr = new ClientResource(String.format(itql_endpoint,riQuery)); cr.setNext(client); 我每次打电话都要重复使用客户端。如何设置客户端以使其忽略有问题的证书。正确的

我目前正在一个测试环境中工作,其中服务器有一个默认的自签名SSL证书。我正在使用Restlet 2.1-RC2,并像这样实例化客户机资源:

Client client = new Client(new Context(), Protocol.HTTP);
cr = new ClientResource(String.format(itql_endpoint,riQuery));
cr.setNext(client);

我每次打电话都要重复使用客户端。如何设置客户端以使其忽略有问题的证书。

正确的方法是使用
keytool
将此自签名证书导入客户端的信任存储,例如:

keytool -import -file server-cert.pem -alias myserver -keystore mytruststore.jks
Series<Parameter> parameters = client.getContext().getParameters();
parameters.add("truststorePath", "/path/to/your/truststore.jks");
// parameters.add("truststorePassword", "password");
// parameters.add("trustPassword", "password");
// parameters.add("truststoreType", "JKS");
您可以直接在JRE的信任存储中执行此操作(
lib/security/cacerts
),这可能会缺乏一些灵活性,也可以在您自己的此文件副本中执行此操作,然后将其设置为信任存储(OSX上的默认密码为
changeit
changeme
)。您可以使用常用的
javax.net.ssl.truststore*
系统属性(例如
-Djavax.net.ssl.truststore=mytruststore
系统属性(以及
-Djavax.net.ssl.trustStorePassword
)为应用程序全局配置此信任库或者,您可以使用服务器上下文参数为Restlet中的特定连接器配置它,例如:

keytool -import -file server-cert.pem -alias myserver -keystore mytruststore.jks
Series<Parameter> parameters = client.getContext().getParameters();
parameters.add("truststorePath", "/path/to/your/truststore.jks");
// parameters.add("truststorePassword", "password");
// parameters.add("trustPassword", "password");
// parameters.add("truststoreType", "JKS");

虽然第一种方法可能比第二种方法显得有点乏味(因为您需要首先获取服务器证书并复制文件),第二个将只是通过不验证服务器证书的任何信息来消除错误消息,从而使其容易受到活动的MITM攻击。这将适用于配置了此
SSLContext
的任何连接。(此“错误的方式不是错误的,因为它使用了自定义的
SSLContext
,它是错误的,因为
SSLContext
)的这种特殊配置是错误的。

否-我特别想问的是如何使用Restlet框架()。我曾在其他情况下使用其他类型的连接进行过此操作,我只想知道使用RESTlet进行此操作的正确方法抱歉,不知何故我没有得到…非常感谢。非常完整的答案!不幸的是,现在坚持使用javax.net.ssl.SSLException:证书中的主机名不匹配。而且似乎没有办法解决此问题:I musI don’我不承认我一时记不起如何调整主机名验证。最好的方法是使用具有正确名称的自签名证书。通常,只在Subject DN中设置CN就可以了,但您也可以设置Subject Alt name(如果仍然使用IP地址,您将需要它),请看,我在Android中使用了自签名证书,此解决方案与修复了我的问题相结合。非常感谢!您好@Bruno,也许您可以分享一些有关此Restlet问题的想法: