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.
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-Thin Client mit SSL sichern
Wichtig: Wenn Sie
JAX-RS-Ressourcen aus einer 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.
- 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>
- 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
- 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
- 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
- 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.
- 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
- 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
- Konfigurieren Sie SSL mit Thin Client for JAX-RS 2.0.
Führen Sie die folgenden Schritte aus, um
eine verschlüsselte URL aufzurufen:
- 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.
- Führen Sie das folgende Codebeispiel in der Befehlszeile aus, um
eine verschlüsselte URL aufzurufen:
![[HP-UX]](../images/hpux.gif)
![[Linux]](../images/linux.gif)
![[Solaris]](../images/solaris.gif)
java -Dcom.ibm.SSL.ConfigURL=file:///$WAS_HOME/AppServer/profiles/AppSrv01/properties/ssl.client.props -cp .:$WAS_HOME/AppServer/runtimes/com.ibm.jaxrs2.0.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]](../images/windows.gif)
java -Dcom.ibm.SSL.ConfigURL=file:///$WAS_HOME/AppServer/profiles/AppSrv01/properties/ssl.client.props -cp .;$WAS_HOME/AppServer/runtimes/com.ibm.jaxrs2.0.thinclient_$VERSION.jar;$WAS_HOME/AppServer/runtimes/com.ibm.jaxws.thinclient_$VERSION.jar your_package.SSLThinClientProgram <An encrypted URL>