JAX-RS-Clients mit SSL sichern

Sie können die Kommunikation zwischen Ihrer JAX-RS-Anwendung (Java™ API for RESTful Web Services) und Clients, die die Anwendung aufrufen, mit SSL-Sicherheit (Secure Sockets Layer) auf Transportebene sichern.

Vorbereitende Schritte

Diese Task setzt voraus, dass Sie die folgenden Schritte bereits ausgeführt haben:
  • Sie haben ein Zellenprofil für einen Anwendungsserver oder für einen Anwendungsserver erstellt, der in einen Network Deployment-Manager eingebunden ist. Informationen zum Erstellen von Zellenprofilen, die einen eingebunden Anwendungsserverknoten und einen Deployment Manager enthalten, finden Sie im Artikel zum Erstellen von Zellenprofilen.
  • Sie haben Ihre JAX-RS-Anwendung im Anwendungsserver installiert.

Informationen zu diesem Vorgang

JAX-RS-Clientprogramme können die Transportsicherheit mit Secure Socket Layer (SSL) nutzen, um Anforderungen und Antworten von JAX-RS-Ressourcen zu schützen.

Wenn Sie Ihre JAX-RS-Anwendung so konfiguriert haben, dass ein SSL-Kanal für die Transportsicherheit verwendet wird, wenn REST-Ressourcen gestartet werden, muss Ihr JAX-RS-Client die SSL-Verbindung verwenden, um dem Client die Interaktion mit einer JAX-RS-Ressource zu ermöglichen, die in der Umgebung von WebSphere Application Server implementiert ist. Wurde beispielsweise die Basisauthentifizierung in Ihrer JAX-RS-Anwendung konfiguriert, wird gewöhnlich SSL verwendet, damit die Benutzerberechtigungsnachweise über sichere Verbindungen übertragen werden.

Zur Veranschaulichung dieses Szenario wird angenommen, dass Sie einen einzigen Anwendungsserver in Ihrer Zelle haben und dass JAX-RS-Ressourcen in diesem Server implementiert sind. Die JAX-RS-Ressourcen in diesem Server erfordern die Verwendung von SSL. Angenommen, Sie verwenden Thin Client for JAX-RS, einen Java-basierten eigenständigen Client, der mit dem Produkt bereitgestellt wird, um eine dieser sicheren Ressourcen aufzurufen, die die Verwendung von SSL voraussetzt. Thin Client for JAX-RS ermöglicht die Ausführung nicht verwalteter REST-konformer JAX-RS-Web-Service-Clientanwendungen in einer anderen Umgebung als WebSphere, um REST-konforme JAX-RS-Web-Services im Anwendungsserver aufzurufen.

Abbildung 1. JAX-RS-Clients mit SSL sichern
Sie können SSL für JAX-RS-Clientanwendungen konfigurieren, um dem Client die Interaktion mit JAX-RS-Anwendungsressourcen zu ermöglichen, die SSL voraussetzen.
Wichtig: Wenn Sie JAX-RS-Ressourcen über eine Anwendung aufrufen, die in einer Umgebung von WebSphere Application Server ausgeführt wird, z. B. über einen Aufruf an eine nachgeschaltete Komponente, ist keine zusätzliche Konfiguration für SSL erforderlich. Sie müssen keine SSL-Verbindungen für diese Ressource konfigurieren, weil die SSL-Laufzeitumgebung und die SSL-Konfiguration des Anwendungsservers verwendet werden.

Verwenden Sie die folgenden Schritte, um SSL mit Thin Client for JAX-RS zu konfigurieren.

Vorgehensweise

  1. Aktivieren Sie die Sicherheit für Ihre JAX-RS-Anwendung, und konfigurieren Sie Ihre Anwendung so, dass ein SSL-Kanal für Transporte verwendet wird, wenn REST-Ressourcen aufgerufen werden.

    Wenn Sie Anwendungen entwickeln oder implementieren, bearbeiten Sie die die Datei web.xml und fügen eine Integritätsbedingung für die Sicherheit hinzu, die die Verwendung von SSL für Ihre Ressourcen voraussetzt. Weitere Einzelheiten zum Aktivieren von SSL für Ihre Anwendung finden Sie im Artikel zum Sichern von JAX-RS-Anwendungen im Web-Container.

    Das folgende Element innerhalb des Elements "security-constraint" gibt an, dass SSL für die Anwendung umgesetzt werden soll:
    <user-data-constraint id="UserDataConstraint_1">
        <transport-guarantee>CONFIDENTIAL</transport-guarantee>
     </user-data-constraint>
  2. Bearbeiten Sie die Datei "ssl.client.props", und definieren Sie die Eigenschaften für den Keystore und den Truststore.
    Die Datei "ssl.client.props" wird verwendet, um SSL für Clients zu konfigurieren. Das folgende Codebeispiel veranschaulicht die Definition der Eigenschaften für den Keystore und den Truststore.
    # Informationen zum Keystore
    com.ibm.ssl.keystoreName=ClientDefaultKeyStore
    com.ibm.ssl.keyStore= path/to/keystore/file 
    com.ibm.ssl.keyStorePassword=xxxxxxx
    com.ibm.ssl.keyStoreType=PKCS12
    com.ibm.ssl.keyStoreProvider=IBMJCE
    com.ibm.ssl.keyStoreFileBased=true
    
    # Informationen zum Truststore
    com.ibm.ssl.trustStoreName=ClientDefaultTrustStore
    com.ibm.ssl.trustStore=path/to/truststore/file
    com.ibm.ssl.trustStorePassword=xxxxxx
    com.ibm.ssl.trustStoreType=PKCS12
    com.ibm.ssl.trustStoreProvider=IBMJCE
    com.ibm.ssl.trustStoreFileBased=true
    com.ibm.ssl.trustStoreReadOnly=false
  3. Aktivieren oder inaktivieren Sie die Überprüfung des Hostnamens.

    Die Eigenschaft com.ibm.ssl.performURLHostNameVerification erzwingt die Prüfung des URL-Hostnamens, wenn sie den Wert true hat. Werden HTTP-URL-Verbindungen zu Zielservern hergestellt, muss der allgemeine Name (CN, Common Name) des Serverzertifikats mit dem Namen des Zielhosts übereinstimmen. Andernfalls wird die Verbindung von der Prüffunktion für Hostnamen zurückgewiesen. Beim Standardwert false wird diese Prüfung übergangen.

    Die Eigenschaft com.ibm.ssl.validationEnabled validiert jede SSL-Konfiguration beim Laden, wenn sie den Wert true hat. Beim Standardwert false wird diese Prüfung übergangen.

    com.ibm.ssl.performURLHostNameVerification=false
    com.ibm.ssl.validationEnabled=false
  4. Stellen Sie sicher, dass der Unterzeichner des Serverzertifikats im Clienttruststore enthalten ist.

    Verwenden Sie das IBM® Tool "iKeyman" oder das Java-Dienstprogramm "keytool", um festzustellen, ob da Zertifikat bereits im Truststore vorhanden ist. Wenn das Zertifikat nicht im Truststore enthalten ist, importieren Sie das Zertifikat in den Truststore.

    Um beispielsweise die Zertifikate aufzulisten, die im Truststore trust.p12 enthalten sind, geben Sie den folgenden Befehl mit dem vollständigen Pfad des Truststores ein:

    keytool -list -v -storetype pkcs12 -keystore trust.p12
  5. Importieren Sie das Zertifikat.

    Wenn der Unterzeichner des Serverzertifikats nicht im Clienttruststore enthalten ist oder wenn der Server ein selbst signiertes Zertifikat hat, das nicht im Clienttruststore enthalten ist, importieren Sie das Zertifikat.

    Zum Importieren des Zertifikats können Sie je nach Präferenz IBM iKeyman oder das Java-Dienstprogramm "keytool" verwenden. In den folgenden Beispielen wird das Java-Dienstprogramm "keytool" verwendet.

    1. Exportieren Sie das Unterzeichnerzertifikat für Ihren Server in eine Datei.

      Verwenden Sie beispielsweise den folgenden Befehl, um ein Unterzeichnerzertifikat aus dem vorhandenen Truststore servertrust.p12 in dem Eintrag, der dem Aliasnamen "default_signer" entspricht, in die Datei mycert.cer zu exportieren:

      keytool -export -storetype pkcs12 -alias default_signer -file mycert.cer -keystore servertrust.p12
    2. Importieren Sie das Unterzeichnerzertifikat in den Truststore, der von Thin Client for JAX-RS verwendet wird.

      Verwenden Sie beispielsweise den folgenden Befehl, um ein Unterzeichnerzertifikat aus dem vorhandenen Truststore servertrust.p12 aus dem Eintrag, der dem Aliasnamen "default_signer" entspricht, in die Datei mycert.cer zu exportieren:

      keytool -export -storetype pkcs12 -alias default_signer -file mycert.cer -keystore servertrust.p12
  6. Konfigurieren Sie SSL mit Thin Client for JAX-RS 2.0.

    Führen Sie die folgenden Schritte aus, um eine verschlüsselte URL aufzurufen:

    1. Wenn Sie Ihre Thin-Client-Anwendung entwickeln, können Sie Client-SSL aktivieren, indem Sie eine Thin-Client-Eigenschaft in Ihren Clientanwendungscode aufnehmen.

      Setzen Sie den Clienteigenschaftsschlüssel auf com.ibm.ws.jaxrs.client.ssl.config und dessen Wert auf den Server-SSL-Alias. Verwenden Sie das folgende Code-Snippet als Referenz:

      ClientBuilder cb = ClientBuilder.newBuilder();
      cb.property("com.ibm.ws.jaxrs.client.ssl.config", "NodeDefaultSSLSettings");
      Tipp: Der Eigenschaftswert entspricht dem Server-SSL-Alias, den Sie festgelegt haben. Sie können diese Angabe unter Anwendungsserver->Server n (wobei "n" die dem Anwendungsserver zugewiesene Nummer ist) ->Transportketten für Web-Container->WCInboundDefaultSecure->SSL-Kanal für eingehende Anforderungen (SSL_2) im Feld "SSL-Konfiguration" finden.
    2. Führen Sie das folgende Codebeispiel in der Befehlszeile aus, um eine verschlüsselte URL aufzurufen:
      [HP-UX][Linux][Solaris]
      java -Dcom.ibm.SSL.ConfigURL=file:///$WAS_HOME/AppServer/profiles/AppSrv01/properties/ssl.client.props -cp .:$WAS_HOME/AppServer/runtimes/com.ibm.jaxrs1.1.thinclient_$VERSION.jar:$WAS_HOME/AppServer/runtimes/com.ibm.jaxws.thinclient_$VERSION.jar:$WAS_HOME/AppServer/com.ibm.ws.admin.client_$VERSION.jar:$WAS_HOME/AppServer/plugins/com.ibm.ws.security.crypto.jar your_package.SSLThinClientProgram <An encrypted URL>
      [Windows]
      java -Dcom.ibm.SSL.ConfigURL=file:///$WAS_HOME/AppServer/profiles/AppSrv01/properties/ssl.client.props -cp .;$WAS_HOME/AppServer/runtimes/com.ibm.jaxrs1.1.thinclient_$VERSION.jar;$WAS_HOME/AppServer/runtimes/com.ibm.jaxws.thinclient_$VERSION.jar;$WAS_HOME/AppServer/runtimes/com.ibm.ws.security.crypto.jar;$WAS_HOME/AppServer/plugins/com.ibm.ws.security.crypto.jar your_package.SSLThinClientProgram <An encrypted URL>

Ergebnisse

Sie haben eine sichere Verbindung zwischen dem Client und dem Zielserver über SSL definiert, um die Integrität und Vertraulichkeit der Kommunikation zwischen der JAX-RS-Anwendung und Ihrem Client zu gewährleisten.

Beispiel

Das folgende Code-Snippet zeigt eine Beispieldatei "sample ssl.client.props":
# Informationen zum Keystore
com.ibm.ssl.keyStoreName=ClientDefaultKeyStore
com.ibm.ssl.keyStore=c:/jaxrs/test/config/keystore.p12 
com.ibm.ssl.keyStorePassword=testpasswd
com.ibm.ssl.keyStoreType=PKCS12
com.ibm.ssl.keyStoreProvider=IBMJCE
com.ibm.ssl.keyStoreFileBased=true

# Informationen zum Truststore
com.ibm.ssl.trustStoreName=ClientDefaultTrustStore
com.ibm.ssl.trustStore= c:/jaxrs/test/config/truststore.p12
com.ibm.ssl.trustStorePassword=testpasswd
com.ibm.ssl.trustStoreType=PKCS12
com.ibm.ssl.trustStoreProvider=IBMJCE
com.ibm.ssl.trustStoreFileBased=true
com.ibm.ssl.trustStoreReadOnly=false

# Informationen zur Prüfung des Hostnamens
com.ibm.ssl.performURLHostNameVerification=false
com.ibm.ssl.validationEnabled=false

Symbol, das den Typ des Artikels anzeigt. Taskartikel



Symbol für Zeitmarke Letzte Aktualisierung: 25.05.2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_jaxrs_impl_securejaxrs_clientssl
Dateiname:twbs_jaxrs_impl_securejaxrs_clientssl.html