簡體   English   中英

如何在碼頭服務器的服務器端列出客戶端證書

[英]How to list the client certs on the server side in a jetty server

我已經設置了一個用密鑰和信任庫更新了ssl上下文的Jetty服務器,但是,任何具有服務器信任的有效證書的客戶端都可以建立與服務器的TLS連接。

但是,我需要知道所有可能的受信任客戶端中的哪個客戶端當前正在發出請求; 換句話說,我需要知道在此連接中使用的客戶端證書,尤其是在處理程序中。 有誰知道如何訪問此證書,或者甚至可以訪問?

我想對證書執行一些自定義檢查,以根據證書中存在於服務器上的某些字段進一步過濾客戶端。

PS:我確實嘗試過在線研究和研究,但似乎沒有任何效果。

首先將SecureRequestCustomizer添加到ServerConnector使用的HttpConfiguration中。

反過來,這將添加幾個Request屬性,您可以使用它們來訪問連接上存在的安全信息以及請求/響應交換。

示例(來自LikeJettyXml.java ):

    // === jetty-http.xml ===
    ServerConnector http = new ServerConnector(server,
            new HttpConnectionFactory(http_config));
    http.setPort(8080);
    http.setIdleTimeout(30000);
    server.addConnector(http);


    // === jetty-https.xml ===
    // SSL Context Factory
    SslContextFactory sslContextFactory = new SslContextFactory();
    sslContextFactory.setKeyStorePath("config/etc/keystore");
    sslContextFactory.setKeyStorePassword(...);
    sslContextFactory.setKeyManagerPassword(...);
    sslContextFactory.setTrustStorePath("config/etc/keystore");
    sslContextFactory.setTrustStorePassword(..);

    // SSL HTTP Configuration
    HttpConfiguration https_config = new HttpConfiguration(http_config);
    https_config.addCustomizer(new SecureRequestCustomizer()); // <-- the magic line

    // SSL Connector
    ServerConnector sslConnector = new ServerConnector(server,
        new SslConnectionFactory(sslContextFactory,HttpVersion.HTTP_1_1.asString()),
        new HttpConnectionFactory(https_config));
    sslConnector.setPort(8443);
    server.addConnector(sslConnector);

一旦到位,當您處理請求時,就可以訪問Request屬性...

  • request.getAttribute("javax.servlet.request.X509Certificate") -連接中使用的java.security.cert.X509Certificate數組
  • request.getAttribute("javax.servlet.request.cipher_suite") -協商的密碼套件的名稱(String類型)
  • request.getAttribute("javax.servlet.request.key_size") -密鑰大小(Integer類型)
  • request.getAttribute("javax.servlet.request.ssl_session_id") -SSL會話ID(字符串類型)
  • request.getAttribute("org.eclipse.jetty.servlet.request.ssl_session") -連接正在使用的活動javax.net.ssl.SSLSession

您應該能夠從這些信息源之一中獲取所需的信息。 (請不要更改這些屬性的任何值,否則會冒各種奇怪的行為的風險)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM