有谁知道这是为什么,或者如何修复它?
我正在使用android通过httpclient连接 - 简单连接器恢复连接就好了,但是Jetty每次都会执行新的握手!代码是一样的,它只是我在构建路径上的连接器。不断重做握手会占用大量的数据和电池 - 问题是我需要客户端身份验证,正如我发现的那样,使用Simple连接器无法正常工作。这里有什么我想念的吗?我正在使用如下的标准连接设置。
component = new Component();
component.getClients().add(Protocol.FILE);
Server httpsServer = component.getServers().add(Protocol.HTTPS, 444);
Series<Parameter> parameters = httpsServer.getContext().getParameters();
File pwd = new File(".");
String path = pwd.getCanonicalPath();
String keystorePath = path + "/keystore/keypair.jks";
parameters.add("SSLContextFactory", "org.restlet.ext.ssl.PkixSslContextFactory");
parameters.add("keystorePath", keystorePath);
parameters.add("keystorePassword", "xxx");
parameters.add("keyPassword", "xxx");
parameters.add("keystoreType", "JKS");
parameters.add("threadMaxIdleTimeMs", "60000"); //default idle time
parameters.add("needClientAuthentication", "true");
// Guard the restlet with BASIC authentication (encrypted under SSL).
ChallengeAuthenticator guard = new ChallengeAuthenticator(null, ChallengeScheme.HTTP_BASIC, "xxx");
//new pagerreceiver
Restlet resty = new PagerReceiverApplication();
LoginChecker loginVerifier = new LoginChecker();
guard.setVerifier(loginVerifier);
guard.setNext(resty);
component.getDefaultHost().attachDefault(guard);
overrideStatus statusService = new overrideStatus();
component.setStatusService(statusService);
component.start();
答案 0 :(得分:1)
不确定您使用的Jetty版本或配置方式,但查看http://wiki.eclipse.org/Jetty/Howto/Configure_SSL,有一个名为allowRenegotiate
的参数默认为false
。也许如果你能弄清楚如何将其设置为真,你将能够恢复会话吗?
答案 1 :(得分:0)
我还没试过,但是值得尝试通过Jetty的SslSelectChannelConnector
使用NIO连接器和Restlet参数type=1
。 (default是使用SslSocketConnector
和type=2
。)