Ich entwickle eine Webanwendung, die Clientzertifikate verwendet, um sich bei Webserviceanrufen mit Jersey bei Tomcat zu authentifizieren. Das funktioniert bisher großartig, aber ich brauche ein Web-Frontend im selben Kontext, mit dem ich diese Anwendung verwalten kann. Da die SSL-Konfiguration "per Kontext" ist, scheint die einzige Option, dass das Frontend https verwendet, ein Client-Zertifikat in dem zugreifenden Browser zu installieren, der auch im Tomcat-Truststore aufgeführt ist (entweder oder die Verwendung von https insgesamt zu verwerfen). .Konfigurieren der HTTPS-Zertifikatsverwendung basierend auf der URL in Tomcat
Um zu zeigen, was ich wirklich will:
1. https://url-to-webapp/ws <- Should use client certificate
2. https://url-to-webapp/web <- Should just use a server certificate
die irgendwie in der Tomcat-Konfiguration, oder auch in dem Anwendungscode erreicht werden kann?
aktualisiert
habe ich versucht, die von EJP vorgeschlagene Konfiguration, aber jetzt kann ich nicht unabhängig von meiner Verwendung von Zertifikaten zu Tomcat verbinden - es während des Look-up oder etwas zu versagen scheint. Wenn ich jedoch einen HTTP-Connector auf 8080 erstelle, wird er auf 8443 umgeleitet. Dies ist die Konfiguration, die ich verwende. Irgendwelche Ideen?
tomcat-users.xml
<tomcat-users>
<role rolename="webservice"/>
<user username="CN=ClientCert,OU=Corp,O=Corp,L=London,S=London,C=UK" password="" roles="webservice"/>
</tomcat-users>
server.xml
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="true" sslProtocol="TLS"
keystoreFile="c:\tomcat\keys\server.jks" keystorePass="password"
truststoreFile="c:\tomcat\keys\client.jks" truststorePass="password"/>
web.xml
[...]
<security-constraint>
<display-name>ClientCertificateRequired</display-name>
<web-resource-collection>
<web-resource-name>MyWebService</web-resource-name>
<description/>
<url-pattern>/webservice/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<description/>
<role-name>webservice</role-name>
</auth-constraint>
<user-data-constraint>
<description/>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
<login-config>
<auth-method>CLIENT-CERT</auth-method>
<realm-name>tomcat-users</realm-name>
</login-config>
<security-role>
<description/>
<role-name>webservice</role-name>
</security-role>
[...]
<servlet>
<display-name>Webservice</display-name>
<servlet-name>Webservice</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
[...]
<run-as>
<role-name>webservice</role-name>
</run-as>
</servlet>
[...]
Dank EJP habe ich Ihre Lösung versucht, aber jetzt kann ich keine Verbindung mehr zu Tomcat herstellen (egal ob ich Zertifikate verwende oder nicht). Ich habe meine obigen Versuche gepostet - können Sie einen Fehler finden? – EddyYosso