Restlet with Simple - 尽管needClientAuthentication设置为true,但它接受没有客户端证书的任何连接

时间:2011-06-26 01:48:26

标签: authentication ssl restlet

我正在使用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工作正常,但它是否接受任何连接,无论他们是否拥有客户端证书!这究竟是什么,我错过了什么?

1 个答案:

答案 0 :(得分:1)

有一段时间,直到this patch in the Simple Framework (rev. 1785),Simple总是使用“想要客户端身份验证”,而无法以任何方式配置它(“需要”或“没有”)。

因此,从不支持Simple Restlet连接器的needClientAuthentication参数,因为Restlet连接器本身无法更改此行为。

据我所知,Simple rev的变化。 1785只删除任何形式的客户端身份验证(没有“需要”或“想要”)。我不确定Restlet 2.0.8是否使用了此补丁之前或之后的Simple版本,但到目前为止,似乎没有任何东西可以提供这种支持。

此处有关于此主题的简单邮件列表的讨论:

有一些解决方法:

  • 为Restlet应用程序使用与Simple不同的连接器。其他的应该支持needClientAuthentication
  • 继续使用wantClientAuthentication(提供预先修补的版本Simple)并检查是否确实存在证书,否则禁止请求。 (我认为这就是IIS的方式,即使它“需要”证书。)

作为旁注,查看您的代码,我不确定您为什么要坚持客户端同时提供客户端证书和HTTP基本身份验证凭据。基本认证。在客户端证书之上似乎有点矫枉过正。