A) Zertifikate erstellen

Siehe X.509 Authentication in Spring Security

B) Vorgehensweise via Tomcat-Configuration

In $CATALINA_HOME/conf/settings.xml wurde

<Connector
        protocol="org.apache.coyote.http11.Http11NioProtocol"
        port="8443" maxThreads="200"
        scheme="https" secure="true" SSLEnabled="true"
<!-- Für server auth: --> 
        keystoreFile="conf/keystore.jks" keystorePass="changeit"
<!-- Für client auth: --> 
        truststoreFile="conf/truststore.jks" truststorePass="changeit" 
        clientAuth="true" sslProtocol="TLS"/>

eingefügt.
Dies bewirkt, dass unter Port 8443 ein Zugang angeboten wird, der TLS geschlüsselt wird.
Wenn der andere Connector

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" />

im settings.xml drin bleibt, dass ist per se weiterhin auch die HTTP-Adresse offen.

Die Applikation (falls keine eigene darüber installiert wurde ist das die Tomcat-Welcome-Page) ist also immernoch über

http://localhost:8080 und https://localhost:8443 erreichbar.

Wird aber eine Web-App mit web.xml mit Security constraint, wie z.B. im folgenden installiert, dann wird die definierte URL immer auf HTTPS umgeleitet.

<security-constraint>

    <web-resource-collection>
        <web-resource-name>Secured</web-resource-name>
        <url-pattern>/*</url-pattern>
    </web-resource-collection>

    ...

    <user-data-constraint>
        <transport-guarantee>CONFIDENTIAL</transport-guarantee>
    </user-data-constraint>

</security-constraint>

–> Siehe StackOverflow-Artikel über Redirect

Obige Config setzt nicht nur HTTP und Server-Authentication auf, sondern auch Client-Authentication. Das bedeutet, dass wenn man auf https://localhost:8443 zugreifen möchte, man im Browser das Client-Certifikat installieren muss. Ruft man die Seite dann auf, wird einem eine Liste vom möglichen Zerts zur Wahl angeboten.

 

Referenzen: