我正在使用Restlet 2.0.8和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();
SSL工作正常,但它是否接受任何连接,无论他们是否拥有客户端证书!这究竟是什么,我错过了什么?
答案 0 :(得分:1)
有一段时间,直到this patch in the Simple Framework (rev. 1785),Simple总是使用“想要客户端身份验证”,而无法以任何方式配置它(“需要”或“没有”)。
因此,从不支持Simple Restlet连接器的needClientAuthentication
参数,因为Restlet连接器本身无法更改此行为。
据我所知,Simple rev的变化。 1785只删除任何形式的客户端身份验证(没有“需要”或“想要”)。我不确定Restlet 2.0.8是否使用了此补丁之前或之后的Simple版本,但到目前为止,似乎没有任何东西可以提供这种支持。
此处有关于此主题的简单邮件列表的讨论:
有一些解决方法:
needClientAuthentication
。wantClientAuthentication
(提供预先修补的版本Simple)并检查是否确实存在证书,否则禁止请求。 (我认为这就是IIS的方式,即使它“需要”证书。)作为旁注,查看您的代码,我不确定您为什么要坚持客户端同时提供客户端证书和HTTP基本身份验证凭据。基本认证。在客户端证书之上似乎有点矫枉过正。