Este artículo se centra en la habilitación de HTTPS sobre un OC4J Standalone, y la utilización de servicios web desplegados en el mismo. Estos pueden ser consumidos por distintos clientes, incluyendo el Oracle Service Bus.
1. Configurar HTTPS en OC4J
1.1. Crear el Keystore
Un keystore es el almacén donde se guardan los certificados. A nivel de desarrollo, se puede realizar a través del keytool de SUN:
keytool -genkey -alias oracle-server -dname "CN=Oracle, OU=Blog O=FMW L=LAD, S=CA, C=US" -keyalg RSA -keypass welcome -storepass welcome -keystore server.keystore
Para simplificar la configuración posterior, se puede copiar el archivo server.keystore a la carpeta $ORACLE_HOME/j2ee/home/config
1.2. Configurar el OC4J
En el OC4J se debe crear un web-site con la configuración de seguridad correspondiente, de modo que se pueda tener configurado HTTP y HTTPS en los puertos 8888 y 4443.
1.2.1. Copiar el archivo default-web-site.xml ($ORACLE_HOME/j2ee/home/config/default-web-site.xml) a secure-web-site.xml
1.2.2. Editar el archivo secure-web-site.xml, donde debe quedar como se muestra a continuación:
<web-site xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://xmlns.oracle.com/oracleas/schema/web-site-10_0.xsd"
port="4443"
secure="true"
display-name="OC4J 10g (10.1.3) Default Web Site"
schema-major-version="10"
schema-minor-version="0" >
...
<ssl-config keystore="server.keystore" keystore-password="welcome" />
...
</web-site>
1.2.3. Importar el secure-web-site.xml en el OC4J, editanto el archivo $ORACLE_HOME/j2ee/home/server.xml en el tag web-site:
...
<web-site default="true" path="./default-web-site.xml" />
<web-site path="./secure-web-site.xml" />
...
Con esta configuración, las aplicaciones están disponibles vía HTTP y HTTPS (puerto 4443). Se puede iniciar el OC4J y probar esta nueva configuración.
2. Consumir el servicio usando HTTPS
2.1. Generar y configurar un keystore de cliente
De forma similar al keystore del lado server, se crea un keystore para el cliente:
keytool -genkey -alias oracle-client -dname "CN=John Doe, OU=Blog O=DummyClient, S=CA, C=US" -keyalg RSA -keypass welcomeClient -storepass welcomeClient -keystore client.keystore
Luego, se debe exportar el certificado del keystore del servidor:
keytool -keystore server.keystore -export -alias oracle-server -file server.cer
Y por último, se debe importar el certificado en el keystore del cliente:
keytool -keystore client.keystore -import -file server.cer
2.2. Generar el proxy
Es posible utilizar el Oracle Web Service Assembler para generar el proxy, especificando el keystore a utilizar.
java -Djavax.net.ssl.trustStore=/Users/tgrall/ssl/client.keystore
-Djavax.net.ssl.keyStore=/Users/tgrall/ssl/client.keystore
-Djavax.net.ssl.trustStorePassword=welcomeClient
-Djavax.net.ssl.keyStorePassword=welcomeClient
-jar $ORACLE_HOME/webservices/lib/wsa.jar
-genProxy
-wsdl https://127.0.0.1:4443/URL_SERVICIO?WSDL
2.3. Ejecutar el proxy generado. En el método main de la clase cliente se puede agregar la siguiente configuración para habilitar el uso de seguridad realizada en las propiedades de ambiente:
System.setProperty("javax.net.ssl.trustStore", client.keystore");
System.setProperty("javax.net.ssl.keyStore", client.keystore");
System.setProperty("javax.net.ssl.trustStorePassword", "welcomeClient");
System.setProperty("javax.net.ssl.keyStorePassword", "welcomeClient");