Frage Wie bekomme ich Client-Zertifikat in einer Java HttpsServer-Implementierung für einen Webservice?


Ich schrieb einen Web-Service-Server mit Sun Ws-Implementierung und ich verwendete einen HttpsServer für die Veröffentlichung (TLS gegenseitige Authentifizierung).

        httpServer=HttpsServer.create(...);
        ssl=SSLContext.getInstance("TLS");
        ...
        ssl.init(keyFactory.getKeyManagers(),trustFactory.getTrustManagers(),new SecureRandom());
        configurator=new HttpsConfigurator(ssl) {
           public void configure (HttpsParameters params) 
           {
               SSLContext context; 
               SSLParameters sslparams;

               context=getSSLContext();
               sslparams=context.getDefaultSSLParameters();
               sslparams.setNeedClientAuth(true);
               params.setSSLParameters(sslparams);
           }
       }; 
       ((HttpsServer)httpServer).setHttpsConfigurator(configurator);
       ...
       endPoint=getSunWsProvider().createEndPoint(...);
       httpContext=httpServer.createContext(...);
       endPoint.publish(httpContext);
       httpServer.start();
       ...

Alles funktioniert gut. Wenn die Implementierung der Serverseite des Web Service von einem Client ausgeführt wird, würde ich gerne wissen, welcher Client den Code ausführt (um Rechte zu verwalten). Wenn ich weiß, dass jeder Client ein eigenes Zertifikat erhält, wie kann ich das Client-Zertifikat für die TLS-Verhandlung vor dem Web Service-Aufruf abrufen? (Ich würde es vorziehen, eine Lösung zu finden, die auf der Clientzertifikatanalyse basiert, anstatt jedem Web-Service-Aufruf eine Identifikationsinformation hinzuzufügen).

Danke für Ihre Hilfe.


9
2017-09-01 13:57


Ursprung


Antworten:


in deinem Handler bekommst du nicht die HttpExchange Instanz aber die Instanz seiner Unterklasse HttpsExchange das hat die extra Methode:

abstrakt SSL-Sitzung getSSLSession ();

Unter vielen anderen Dingen legt eine SSLSession die Peer-Identität offen


3
2017-09-22 02:20



getUserPrincipal() gibt Ihnen das Zertifikat in httpservletrequest.


-2
2018-02-23 08:47