Mostrando entradas con la etiqueta Tomcat. Mostrar todas las entradas
Mostrando entradas con la etiqueta Tomcat. Mostrar todas las entradas

martes, septiembre 08, 2015

Convertir archivos de Firmas Electronicas P12 a JKS

Generalmente servidores web basados ​​en Java como Tomcat utilizan keytool , una utilidad Java, para crear las claves públicas, privadas y los certificados asociados con este par de claves. 

Los certificados se utilizan como firmas digitales , que proporciona una autenticación segura cuando se conectan los clientes a un servidor. 

Keytool genera un almacen de claves , que tienen certificados de seguridad.

Los Keystores pueden utilizar el formato P12 o JKS . 

P12 archivos son casi universalmente compatibles, pero el formato es extremadamente complejo. 

Es posible utilizar keytool para convertir P12 a JKS , un formato más sencillo sólo se puede acceder a través de las aplicaciones Java. 

Aqui las Instrucciones :

1.- Haga clic en " Inicio". Escriba " cmd" en el cuadro de búsqueda y luego presionar "Enter " para abrir el símbolo del sistema .


2.-Tipo "cd /" sin las comillas en la aplicación de línea de comandos y presione "Enter " para acceder a la carpeta raíz. 


3.- Escriba "cd " seguido por el pleno del ruta de acceso que une al directorio donde se guarda el almacén de claves


4.-Escriba lo siguiente en el símbolo del sistema para convertir P12 a JKS : 

 
keytool- importkeystore - srckeystore keystore.p12 - srcstoretype PKCS12 - deststoretype keystore.jks JKS - destkeystore


Pulse " Enter" después de cada comando para convertir P12 a JKS en Keytool . 

Es posible que se le pida para crear una nueva contraseña para el almacén de claves JKS , se recomienda que utilice la misma contraseña del almacén de claves originales 

Generar y convertir claves y certificados con OpenSSL

 Usando los comandos expuestos en este artículo y con OpenSSL podemos crear una clave pública y privada para usarlo con ssh o para cifrar y descifrar mensajes, un certificado autofirmado que podremos usar en un servidor de aplicaciones para usar un protocolo seguro y también convertir las claves y certificados a uno de los formatos aceptados por la aplicación que usemos.

Para un uso personal como enviar correos o archivos cifrados o firmados digitalmente usar GnuPG es una buena opción. En Internet los servidores también se aprovechan del uso de criptografía para realizar comunicaciones seguras entre el usuario y el servidor.
Para hacer uso en un servidor de una comunicación https donde los datos viajan cifrados y sin que otras partes salvo el usuario y el servidor puedan acceder a los datos necesitamos un certificado digital. Un certificado es un archivo que contiene la clave pública sirviéndonos para verificar su autenticidad. Un certificado autofirmado es un certificado firmado con la misma clave privada asociada a la clave pública que contiene el certificado. Un certificado autofirmado es suficiente para un entorno de pruebas pero en un servidor para proporcionar confianza a los usuarios deberemos solicitar que una autoridad de certificados que nos firme con su clave nuestro certificado, si el usuario confía en esa autoridad de certificado puede de esta manera confiar en nuestro certificado y clave pública. Varias entidades de registro de dominios o halojamiento web ofrecen la compra de certificados SSL, en el artículo Certificado SSL, de empresa, «wildcard» y de validación extendida comento con un poco más detalle los varios tipos de certificados y algunas opciones donde obtenerlos o comprarlos.
Dependiendo del tipo de certificado que solicitemos y nos entregue la autoridad de certificado el usuario podrá ver que está simplemente accediendo a un servidor con conexión segura, ver los detalles de nuestro certificado y en algunos casos el usuario podrá ver en la barra de direcciones en verde el nombre de la entidad, que puede darle al usuario más confianza y ver que realmente está accediendo al servidor correcto y no a uno que esté intentando suplantar una identidad. En este último caso la barra de direcciones no tendría en verde el nombre de la entidad, esto es algo que como usuarios debemos comprobar al acceder a determinados sitios de forma segura.
Con la herramienta OpenSSL y los siguientes comandos podemos generar claves y certificados y realizar las conversiones entre formatos que necesitemos.

Convertir un certificado a otros formatos

Dependiendo de la autoridad de certificado el certificado puede estar en diferentes formatos, dependiendo del servidor donde tengamos idea de usarlo podemos necesitar convertirlo a otro formato. También podemos usar OpenSSL para hacer las conversiones.

Convertir un certificado en formato DER (.crt .cer .der) a PEM

$ cat localhost.key localhost.crt > localhost.pem
$ openssl x509 -in localhost.crt -out localhost.pem
$ openssl x509 -inform der -in localhost.cer -out localhost.pem

Convertir un certificado en formato PEM a DER

$ openssl x509 -outform der -in localhost.pem -out localhost.der
 
Convertir un certificado en formato PEM y una clave privada a PKCS#12 (.pfx .p12)
$ openssl pkcs12 -export -out localhost.p12 -inkey localhost.key -in localhost.crt

Convertir un archivo en formato PKCS#12 (.pfx .p12) que contiene una clave privada y certificado a PEM

$ openssl pkcs12 -in localhost.p12 -out localhost.pem -nodes
 
Convertir PKCS#12 a keystore JKS
$ keytool -importkeystore -destkeystore localhost.keystore -srckeystore localhost.p12 -srcstoretype pkcs12
 
Una vez que disponemos de un certificado y del formato en el que necesitemos podemos hacer uso de él, por ejemplo, en un servidor de páginas web o aplicaciones para proporcionar acceso mediante el protocolo HTTPS y proporcionar seguridad SSL. Pero eso será tema para la entrada Configurar SSL en un servidor Tomcat, JBoss, WildFly, Lighttpd, nginx o Apache.


Aqui unos ejemplos: 

openssl genrsa -out localhost.key 8192


 openssl req -new -key localhost.key -out localhost.csr

openssl req -new -x509 -days 1825 -key localhost.key -out localhost.crt

cat localhost.key localhost.crt > localhost.pem
openssl x509 -in localhost.crt -out localhost.pem
openssl x509 -inform der -in localhost.cer -out localhost.pem

openssl x509 -outform der -in localhost.pem -out localhost.der

openssl pkcs12 -export -out localhost.p12 -inkey localhost.key -in localhost.crt

openssl pkcs12 -in localhost.p12 -out localhost.pem -nodes

keytool -importkeystore -destkeystore localhost.keystore -srckeystore localhost.p12 -srcstoretype pkcs12

openssl rsa -in localhost.key -pubout > localhost.pub


Otra forma enerar y convertir claves y certificados con OpenSSL

En primer lugar, asegúrese de que usted tiene OpenSSL instalado. Muchos sistemas operativos ya lo han instalado como he encontrado con Mac OS X.

Los dos comandos siguientes convertir el archivo pfx a un formato que puede ser abierto como un Java PKCS12 almacén de claves: 


openssl pkcs12 -in mypfxfile.pfx -out mypemfile.pem
openssl pkcs12 -export -in mypemfile.pem -out mykeystore.p12 -name "MyCert"

Tenga en cuenta que el nombre proporcionado en el segundo comando es el alias de tu clave en el nuevo almacén de claves.
Referencia
Usted puede verificar el contenido del almacén de claves utilizando el programa de utilidad keytool de Java con el siguiente comando:

keytool -v -list -keystore mykeystore.p12 -storetype pkcs12
 
Por último, si necesita usted puede convertir esto en un almacén de claves JKS importando el almacén de claves creado anteriormente en un nuevo almacén de claves:

keytool -importkeystore -srckeystore mykeystore.p12 -destkeystore clientcert.jks -srcstoretype pkcs12 -deststoretype JKS

Exportar e Importar con Java Keytool

Informacion de Referencia

Exportar su certificado a un archivo


Si desea respaldar su certificado para utilizar en el mismo u otro servidor web también con Java solo necesita copiar el archivo .keystore a un medio extraible.
Si desea exportar su certificado para importar en otro servidor web sin Java deberá descargar e instalar un programa externo para poder hacerlo ya que la herramienta keytool no cuenta con un comando para extraer la clave privada del .keystore.
Alguno de los programas que le permitirán hacer la exportación de la clave privada son: KeyTool-IUI, Portecle, Keystore Explorer


Importar su certificado desde un archivo


Para utilizar su archivo .pfx o .p12 como keystore para tomcat debe ejecutar el siguiente comando:
keytool -import -alias tomcat -keystore archivo.p12
Su keystore se encuentra ahora listo para ser configurado en tomcat modificando el archivo server.xml de la siguiente forma:

keystoreType="PKCS12"
keystoreFile="archivo.p12"
keystorePass=Contraseña


Convertir su certificado de .pfx o .p12 a .jks

Deberá contar con openssl y alguno de los programas que le permitirán convertir el formato de su certificado como por ejemplo: KeyTool-IUI, Portecle, Keystore Explorer
Cualquiera de estos programas tienen la opción de abrir un .pfx o .p12 y guardarlo como .jks o .keystore cambiando el formato de manera sencilla. En nuestra experiencia, todos ellos fallan en importar el archivo en formato .pfx o .p12 si existe la más mínima diferencia en formatos.
Si estos programas fallan en abrir su .pfx o .p12 deberá seguir estos pasos para convertir su certificado en un formato que estos programas puedan abrir.
(Puede descargar openssl para Windows de aqui)
Extraer su clave privada y convertirla

openssl pkcs12 -in archivo.pfx -nocerts -nodes -out clavepriv.pem
openssl rsa -in clavepriv.pem -out convertpriv.pem


Extraer sus certificados
openssl pkcs12 -in archivo.pfx -nokeys -out cert.pem

Generar keystore
Ahora debe crear un nuevo keystore vacío utilizando alguno de los programas mencionados e importar la clave privada y el certificado extraídos, ya sea por separado (KeyTool-IUI) o concatenando los certificados al archivo de la clave (Portecle)
Concatenar archivos
Windows

copy convertpriv.pem+cert.pem completo.pem

Linux

cat convertpriv.pem cert.pem > completo.pem


Como convertir un Keystore JKS al formato PKCS12 (.p12)

Para convertir un keystore JKS (.jks) a un archivo PKCS12 (p.12), ejecute el siguiente comando:

NOTA: Este comando es compatible con versiones de JDK/JRE 1.6 o mayores. Keytool es una herramienta de terceros.

   keytool -importkeystore -srckeystore [MY_KEYSTORE.jks] -destkeystore [MY_FILE.p12]
   -srcstoretype JKS - deststoretype PKCS12 -deststorepass [PASSWORD_PKCS12]


Lista de parametros:

   MY_KEYSTORE.jks: ruta del archivo keystore que desea convertir.
   MY_FILE.p12: ruta del archivo PKCS12 (.p12 o extension .pfx) que se crear.
   PASSWORD_PKCS12: la contraseña del archivo PKCS12.


Para verificar el contenido del archivo PKCS12, ejecute el siguiente comando:

   keytool -list -v -keystore MY_FILE.p12 -storetype pkcs12



Java Archivo .JKS Creación de un .PFX

Convertir de Formatos de Certificado de .PFX al .JKS

Tenga en cuenta que el objetivo de estas instrucciones es para mostrar cómo separar los certificados SSL y la llave privada para generar un archivo .PFX y combinarlos en un Keystore "Almacén de Llaves" de Java.
Esta operación requirirá las dos programas Keytool y OpenSSL, y una utilidad de Weblogic específicas también.
Convertir PFX al JKS En Weblogic
PFX es un formato de certificados SSL que se utilice en Windows que combina ambos el archivo de todos los certificados SSL de la cadena de confianza que contine el archivo de la llave pública y la llave privada asociada en un solo archivo .PFX.
Con el fin de convertir sus archivos de certificado en un formato que se puede utilizar por un servidor basado en Java, usted tendrá que extraer primero los certificados y la llave privada de su archivo PFX mediante el programa OpenSSL, y luego importar el CERT a su Keystore "Almacén de Llaves" usando el programa Keytool.
  • En segundo lugar, ejecute el siguiente comando de OpenSSL para extraer sus certificados y la llave privada del archivo .PFX: 
openssl pkcs12-in-out suDominio.pfx certificado_temporario.crt -nodes 
  • Ahora debería tener un archivo llamado certificado_temporario.crt. Abra este archivo con un editor de texto (como WordPad) y verá la llave privada aparece en primer lugar, seguido por los archivos de su certificado:
----- BEGIN RSA PRIVATE KEY -----
(Bloque de Texto Cifrado)
----- END RSA PRIVATE KEY -----


  • Cortar y pegar todo la llave privada, incluyendo el BEGIN y END etiquetas a un archivo de texto y guardarlo como su_dominio_com.key
  • Los certificados que queda en su certificado_temporario.crt será en el siguiente orden, Certificado de Servidor, Certificado Intermedio, Certificado Raíz, dependiendo de su exportación PFX podría haber entre 2 y 4 certificados por separado dentro de este fichero.
  • Con tal que haya exportado el certificado correctamente, tendrá toda lo necesario para guardar el certificado. Asegúrese de que la llave privada se quitó del archivo, y luego seguir adelante y guarde este archivo como su_dominio_com.pem.
  • Si usted tiene acceso para iniciar sesión en su cuenta DigiCert, seguir adelante e iniciar sesión en, haga clic en el número de pedido y descargue el archivo TrustedRoot.crt.
  • Si no, vaya de nuevo en el archivo vaya a abrir el archivo certificado_temporario.crt en un editor de texto y copie el segundo certificado incluso las etiquetas BEGIN CERTIFICATE y END CERTIFICATE en un archivo nuevo y nombre este archivo TrustedRoot.crt.
  • Usted puede asegurarse de que haya elegido el archivo correcto, verificando que su TrustedRoot.crt se emitió por la misma organización. Nota: Debido al hecho de que DigiCert frecuentamente emite certificados firmado por unas otras autoridades de certificación para mejorar la compatibilidad en varias tipos de servidores y aplicaciones de cliente y servidor, la información de su certificado raíz puede ser diferente de lo que se muestra en la imagen de abajo.
    Ejemplar de Certificado de Autoridad Certificadora
  1. Cree una Almacén de Llaves de Autoridad Confiada-
    Ejecutar las siguientes dos líneas como un comando (en una linea) en Keytool:

    keytool -import -trustcacerts -file TrustedRoot.crt -alias servidor
    -Keystore nuevo_almacen_confiado.jks -storepass NUEVACONTRASEÑA

     
    Usted debe ingresar su contraseña después de -storepass en el código de encima.

  2. A continuación, se creará un Identidad Almacén de Certificados, Ejecute el siguiente comando: 
  3.   java utils.ImportPrivateKey -keystore nuevo_almacen_identidad.jks -storepass
    CONTRASEÑA -storetype JKS -keypass NUEVACONTRASEÑA -alias
    servidor -certfile certificado_temporario.crt -keyfile su_dominio_com.key
    -Keyfilepass PFXCONTRASEÑA

     
    Entre su propia contraseña para el storepass-y-keypass atributos, por encima, y la contraseña de PFX que se habrían creado cuando el archivo PFX fue creado.
  4. Ahora debe tener dos archivos, nuevo_almacen_confiado.jks y nuevo_almacen_identidad.jks. Estos archivos deben estar listos para estar habilitado para SSL en su servidor basado en Java.

Autenticación de cliente SSL en web services con Axis2

Normalmente uso Axis2 para crear mis clientes de web services; es bastante sencillo ya que solamente hay que ejecutar el script wsdl2java pasando el WSDL del web service y se genera una clase que contiene todo lo necesario para invocar los métodos publicados en el servicio.
Recientemente, me topé con un web service que en pruebas funcionó muy bien pero resulta que en producción había que activar SSL (o sea https://blabla en el URL en vez de solamente http://blabla) y además tuve que implementar un esquema muy poco usual (aunque sea un estándar): autenticación de cliente con PKI (Public Key Infrastructure - Infraestructura de Llave Pública).
El funcionamiento de SSL por lo general es que solamente el servidor se autentica con el cliente, y luego el cliente se autentica de alguna forma específica a la aplicación. La manera en que funciona la autenticación del servidor en una conexión SSL es via PKI; el servidor utiliza un certificado X509 que contiene su información, una fecha de expiración, una llave pública (RSA por lo general) y algunos datos del emisor de dicho certificado. En PKI se maneja el concepto de cadena de confianza, que consiste en que para poder aceptar el certificado de alguien más como válido, es necesario conocer al emisor o emisores de dicho certificado, hasta llegar al certificado raíz; si todos son considerados válidos y conocidos por el cliente, entonces se puede considerar válido el certificado del servidor.
Con Axis2 o cualquier otra herramienta para web services, todo este mecanismo de autenticar al servidor se maneja ya de forma automática. De hecho quien se encarga es el mismo JRE, porque con el ambiente Java ya vienen incluidos los certificados raíz más populares, por lo que cualquier certificado emitido por ellos será aceptado como válido (siempre y cuando cumpla las otras condiciones, como que esté vigente, etc).
Pero en SSL también el servidor puede autenticar a los clientes de la misma forma, es decir, solicitando al cliente su certificado X509 para validarlo. Esto ya no se maneja de manera tan transparente en Java; una opción para lograr esto es tener el certificado cliente y la correspondiente llave privada, almacenados en el KeyStore del usuario que corre el programa que quiere hacer la conexión que requiere autenticación de cliente. Pero entonces hay que estar configurando el KeyStore de cada cliente, y eso puede ser problemático, o bien puede ser que ni siquiera tengamos permiso de modificar ese KeyStore y por lo tanto hay que usar un KeyStore privado.
Esto último fue mi caso: tengo una aplicación que invoca distintos web services y solamente uno de ellos me pide este esquema, por lo que no quiero modificar todo el KeyStore porque hay que hacerlo en desarrollo y luego en producción y cualquier otra persona que quiera invocar el web service tiene que hacer lo mismo. De modo que preferí hacer un KeyStore privado para este web service. En Axis2, necesitamos primero que nada crear una fábrica de sockets para el HttpClient que usa el cliente del web service. De modo que hay que implementar la interfaz org.apache.commons.httpclient.protocol.SecureProtocolSocketFactory. En mi caso, recibí el certificado y la llave privada en un archivo de tipo PKCS#12, un formato que permite almacenar precisamente una serie de llaves privadas y sus correspondientes certificados, protegido todo por un password. Afortunadamente, Java permite leer este tipo de archivos como un KeyStore. Simplemente hay que hacer lo siguiente:

String password = "el password del archivo PKCS12"
java.security.KeyStore ks = KeyStore.getInstance("PKCS12");
InputStream stream = //obtener de alguna manera un InputStream para el contenido del archivo PKCS12
ks.load(stream, password.toCharArray());
stream.close();
Ya que tenemos el KeyStore, necesitamos crear una KeyManagerFactory con el mismo:

javax.net.ssl.KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
kmf.init(ks, password.toCharArray());

Finalmente, ya que tenemos el KeyManagerFactory, debemos crear un SSLContext que es con el que vamos a crear los sockets que necesita el web service para enviar y recibir datos:

javax.net.ssl.SSLContext ssl = SSLContext.getInstance("SSL"); //Otra opcion es TLS
ssl.init(kmf.getKeyManagers(), null, null);
//El segundo parametro es una lista de TrustManagers, si pasamos null se usan los de default de Java //El tercer parametro es un SecureRandom, si pasamos null si usa el default de Java
El objeto SSLContext es el que se debe usar en los métodos para crear sockets de nuestra implementación de SecureProtocolSocketFactory. La implementación es bastante directa, simplemente en cada método hay que devolver un socket creado por el SSLContext con los parámetros recibidos, por ejemplo:

public Socket createSocket(String host, int port, InetAddress localHost, int localPort)
    throws IOException, UnknownHostException {
  return ssl.getSocketFactory().createSocket(host, port, localHost, localPort);
}
Con esto apenas tenemos lo necesario para poder crear sockets SSL con un contexto que permite autenticar al cliente si el servidor lo requiere. Ahora tenemos que registrar este SecureProtocolSocketFactory con nuestro web service, para el protocolo https (podríamos ponerle el nombre que sea al protocolo; siempre y cuando usemos ese protocolo en el URL, se va a usar nuestra fábrica de sockets). Si el web service lo generamos usando Axis2 ADB con el programa wsdl2java (yo usé Axis2 1.5) entonces:

NuestraSubclaseDeSecureProtocolSocketFactory fabrica = //esta la debemos tener ya lista
org.apache.commons.httpclient.protocol.Protocol proto = new Protocol("https", fabrica, 443);
//El protocolo tiene el nombre, la fabrica de sockets, y el puerto default a donde deben conectarse
miWebServiceStub._getServiceClient().getOptions().setProperty(HTTPConstants.CUSTOM_PROTOCOL_HANDLER, proto);

Con lo anterior, si le pasamos al web service un URL que comience con https:// entonces se va a usar nuestra fábrica de sockets, la cual tiene el SSLContext que contiene el certificado y llave privada del archivo PKCS12 para poder autenticarse con el server. Si el servidor tiene un certificado válido emitido por una de las autoridades certificadas reconocidas por nuestra instalación de Java, ya estamos listos para invocar el web service via SSL.
Adicionalmente, si el servidor usa un certificado auto-firmado, al invocar el web service vamos a obtener un error porque Java no reconoce el certificado del servidor; en este caso, hay que hacer algo de trabajo adicional. Necesitamos obtener el certificado del servidor, y guardarlo en un archivo de KeyStore. Por seguridad, no recomiendo usar el KeyStore default del usuario, sino usar uno separado. Para ello necesitamos un archivo con el certificado y luego lo importamos a un nuevo KeyStore con la herramienta keytool (esto no es tan relevante para este post, simplemente hay que ver la documentación del programa keytool; al final tendremos un archivo tipo JKS protegido por un password).
Una vez que tenemos el archivo, debemos crear un TrustManagerFactory, de preferencia en el mismo lugar donde creamos el KeyManagerFactory (dentro de nuestra fábrica de sockets, antes de crear el SSLContext):

String pass2 = "el password del keystore que contiene el certificado del servidor";
javax.net.ssl.TrustManagerFactory tmf = TrustManagerFactory.getInstance(
  TrustManagerFactory.getDefaultAlgorithm());
KeyStore ks2 = KeyStore.getInstance("JKS"); InputStream stream2 = //obtener un InputStream al archivo tipo JKS que generamos con keytool y que contiene el certificado auto-firmado del servidor
ks2.load(stream2, pass2.toCharArray());
stream2.close();
tmf.init(ks2);
//Modificamos el inicializador de nuestro SSLContext, el segundo parametro ya tiene valor
ssl.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);

Con esto, ya tenemos un SSLContext que crea sockets para conexiones SSL donde se reconoce únicamente el certificado auto-firmado del servidor y que se van a autenticar con el certificado y llave privada del archivo PKCS12.
Estuve peleándome un buen rato con esto porque no hay mucha documentación, espero le sirva a alguien en el futuro. Aplica para Axis2, lo hice con 1.5 pero supongo que funciona con algunas versiones anteriores.
De hecho esto funciona para autenticar a un cliente con cualquier servidor SSL; en el caso de web services hay que encapsular todo esto en la implementación de SecureProtocolSocketFactory pero en caso de usar SSL puro, el código será muy similar aunque vaya encapsulado en algún componente distinto.


martes, diciembre 16, 2014

Ejecutar un programa al iniciar el Tomcat

Para ejecutar un programa automaticamente cuando inicia el TOMCAT, se requiere un SERVLET.

Para ello se debe modificar el archivo descriptor, dentro del webapps\aplicacion\WEB-INF se debe crear un archivo web.xml, el mismo debe contener una etiqueta con lo siguiente:
<servlet>
    <servlet-name>enviar_correos</servlet-name>
    <servlet-class>com.proceso.enviarcorreos</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

Este metodo sirce para depurar registros temporales enviar correos etc etc.

A continuacion se detalle el ejemplo del servlet.
Cuando inicie el Tomcat, se desplegarà el siguiente mensaje, en su LOG.

miércoles, agosto 13, 2014

Ejecutar un programa al momento de iniciar Tomcat

En el WEB:XML, debe constar lo siguiente:

<servlet>
    <servlet-name>programaAutomatico</servlet-name>    // Nombre del Programa a Ejecutarse
    <servlet-class>nombre.paquete</servlet-class>          // Nombre del Paquete
    <load-on-startup>1</load-on-startup>
</servlet>
 
 
Programa en Java
 
package nombre.paquete;
 
import javax.servlet.*;
import javax.servlet.http.HttpServlet;
 

@SuppressWarnings("serial")
public class programaAutomatico extends HttpServlet
{
 
    public void init() throws ServletException
    {
          System.out.println("----------");
          System.out.println("---------- Programa Automatico Ejecutado Correctamente ----------");
          System.out.println("----------");
    }
}
 

sábado, marzo 08, 2014

Aumentar Memoria en Tomcat7 y ubicacion para Genexus

  • Mmodificar el archivo CATALINA.BAT y asignar el siguiente valor 
  • set JAVA_OPTS=%JAVA_OPTS% -Xms512M -Xmx1024M -XX:PermSize=64m -XX:MaxPermSize=256m
  • Ejecutar startup.bat
  • Revisar si existe la asignación de memoria
Si el Genexus no recone automatica mente la ubicacion del Tomcat7, generalmente esto sucede cuando no realizamos la instalación, en lugar de ello se descomprime el archivo ZIP.

Debemos revisar que exista en el registro lo siguiente:

[HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation]
[HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Tomcat]
[HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Tomcat\6.0]
[HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Tomcat\7.0]
[HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Tomcat\7.0\Tomcat7]
"InstallPath"="C:\\Tomcat7"
"Version"="7.0.50"

Si no existe cargar esos datos, hacer con REGEDIT y  registrar los datos arriba citados

Si requerimos hacerlo en linux ejecutar lo siguiente:

Linux:
JAVA_OPTS="$JAVA_OPTS -server -Xms256M -Xmx512M -XX:PermSize=64m -XX:MaxPermSize=128m"


Su significado:

-Xms256M => memoria heap inicial alocada

-Xmx512M => memoria heap máxima
-XX:PermSize=64m => perm gen inicial asignado
-XX:MaxPermSize=128m => perm gen máximo

martes, junio 26, 2012

Instalar Tomcat 7 y Java Rockit en Centos.


Lunes Feb 28, 2011


En este post, vamos a instalar Tomcat 7, el nuevo JDK 7, configurar Tomcat como un servicio, cree un inicio / parada guión, y (opcionalmente) configurar Tomcat para funcionar bajo un usuario no root.También vamos a configurar el acceso básico al Administrador de Tomcat y echar un vistazo rápido a la gestión de memoria utilizando JAVA_OPTSPara esta instalación, usaremos Tomcat 7.0.23, la versión estable actual de Tomcat 7.Para empezar, tendrá que instalar el Java Development Kit (JDK) 7JDK 1.6 es la versión mínima de JDK para Tomcat 7.
Paso 1: Instale el JDK 1.7.0

Puede descargar la última versión del JDK aquí:
http://www.oracle.com/technetwork/java/javase/downloads/index.html

Otra Pagina de Java: Java Rockit

Vamos a instalar la última versión del JDK, que es JDK 7, Update 1. El JDK es específico de 32 y 64 bits.Mi caja de CentOS es de 64 bits, así que voy a necesitar: jdk-7u2-linux-x64.tar.gz.Si usted está en 32 bits, necesitará: jdk-7u2-linux-i586.tar.gzDescargar el JDK y guárdelo en un directorio. Lo estoy guardando en / root.Crear un nuevo directorio / usr / java.

  1. [root@srv6 ~]# mkdir /usr/java    

Cambie al directorio / usr / java directorio que hemos creado

  1. [root@srv6 ~]# cd /usr/java    
  2. [root@srv6 java ]#   


Mover o copiar jdk-7u2-linux-x64.tar.gz al directorio / usr / java:


  1. [root@srv6 java]# mv jdk-7u2-linux-x64.tar.gz /usr/java/jdk-7u2-linux-x64.tar.gz    


Desepaquete Jdk-7u2-linux-x64.tar.gz en el directorio / usr / java archivo con tar-xzf:
  1. [root@srv6 java]# tar -xzf jdk-7u2-linux-x64.tar.gz  
Esto creará el directorio / usr/java/jdk1.7.0
  1. [root@srv6 ~]# cd /usr/java  
  2. [root@srv6 java]# ls  
  3. jdk1.7.0_02  

Establecer la ruta JAVA_HOME. Aquí es donde tenemos instalado nuestro JDK anterior.Para su instalación para la sesión actual, puede dictar lo siguiente de la CLI:
  1. [root@srv6 java]# JAVA_HOME=/usr/java/jdk1.7.0_02  
  2. [root@srv6 java]# export JAVA_HOME  
  3. [root@srv6 java]# PATH=$JAVA_HOME/bin:$PATH  
  4. [root@srv6 java]# export PATH  

Para establecer el JAVA_HOME permanentemente, añadir a continuación a cualquiera de los ~ /. Bashrc o ~ /. Bash_profile del usuario (en este caso, la raíz).También podemos añadir que el archivo / etc / profile y luego a dar origen a todos los usuarios.
  1. JAVA_HOME=/usr/java/jdk1.7.0_02  
  2. export JAVA_HOME  
  3. PATH=$JAVA_HOME/bin:$PATH  
  4. export PATH  
Una vez que haya añadido los anteriores a ~ /. Bashrc bash_profile o ~ /., Debe cerrar la sesión, vuelva a iniciarla y comprobar que el JAVA_HOME están correctamente ajustadas.
  1. [root@srv6 ~]#  echo $JAVA_HOME  
  2. /usr/java/jdk1.7.0_02  


Paso 2: Descargar y descomprimir Tomcat 7.0.23



Descargar apache-tomcat-7.0.23.tar.gz Desde esta URL
Guarde el archivo en un directorio. Me estoy guardando a / root/apache-tomcat-7.0.23.tar.gzAntes de continuar, debe verificar la suma de comprobación MD5 para la descarga Tomcat (o cualquier otra descarga).Como nos salvó la descarga Tomcat / root/apache-tomcat-7.0.23.tar.gz, vamos a ir al directorio / root y utilice el comando md5sum
  1. [root@srv6 ~]# md5sum apache-tomcat-7.0.23.tar.gz  
  2. d8dcd5fb07dd1769d571fdabade9cc68 *apache-tomcat-7.0.23.tar.gz  

Comparar la salida anterior a la suma de verificación MD5
Revisar desde aqui para Apache Tomcat MD5 y asegurarse de que coinciden exactamente

Ahora, mueva (mv) o copia (cp) el archivo en el directorio / usr / share:
  1. [root@srv6 ~]# mv apache-tomcat-7.0.23.tar.gz /usr/share/apache-tomcat-7.0.23.tar.gz  
Sitúese en el directorio / usr / share y descomprimir el archivo con tar-xzf:
  1. [root@srv6 ~]# cd /usr/share  
  2. [root@srv6 share ]# tar -xzf apache-tomcat-7.0.23.tar.gz    
Esto creará el directorio / usr/share/apache-tomcat-7.0.23
Paso 3: Configurar Tomcat para ejecutar como un servicio.



Ahora vamos a ver cómo ejecutar Tomcat como un servicio y crear un inicio simple / Parar / Reiniciar secuencia de comandos, así como para iniciar Tomcat en el arranque.Cambie al directorio / etc / init.d y crear un script llamado 'gato', como se muestra a continuación.
  1. [root@srv6 share]# cd /etc/init.d  
  2. [root@srv6 init.d]# vi tomcat  
Y aquí está el script que va a utilizar.

  1. #!/bin/bash  
  2. # description: Tomcat Start Stop Restart  
  3. # processname: tomcat  
  4. # chkconfig: 234 20 80  
  5. JAVA_HOME=/usr/java/jdk1.7.0_02  
  6. export JAVA_HOME  
  7. PATH=$JAVA_HOME/bin:$PATH  
  8. export PATH  
  9. CATALINA_HOME=/usr/share/apache-tomcat-7.0.23  
  10.   
  11. case $1 in  
  12. start)  
  13. sh $CATALINA_HOME/bin/startup.sh  
  14. ;;   
  15. stop)     
  16. sh $CATALINA_HOME/bin/shutdown.sh  
  17. ;;   
  18. restart)  
  19. sh $CATALINA_HOME/bin/shutdown.sh  
  20. sh $CATALINA_HOME/bin/startup.sh  
  21. ;;   
  22. esac      
  23. exit 0  
El script anterior es simple y contiene todos los elementos básicos que necesita para ponerse en marcha.Como se puede ver, simplemente estamos llamando a los guiones y startup.sh shutdown.sh ubicados en el directorio bin de Tomcat (/ usr/share/apache-tomcat-7.0.23/bin).Se puede ajustar la secuencia de comandos de acuerdo a sus necesidades y, en los puestos siguientes, vamos a ver más ejemplos.CATALINA_HOME es el directorio inicial de Tomcat (/ usr/share/apache-tomcat-7.0.23)Ahora, establecer los permisos para la secuencia de comandos para que sea ejecutable:
  1. [root@srv6 init.d]# chmod 755 tomcat  
Ahora usamos la utilidad chkconfig para que arranque Tomcat en el arranque. En mi script de arriba, estoy usando chkconfig: 234 20 80. 2345 son los niveles de ejecución y el 20 y 80 de la parada de inicio y las prioridades respectivamente. Se puede ajustar según sea necesario.

  1. [root@srv6 init.d]# chkconfig --add tomcat  
  2. [root@srv6 init.d]# chkconfig --level 234 tomcat on  
Compruebe que:
  1. [root@srv6 init.d]# chkconfig --list tomcat  
  2. tomcat          0:off   1:off   2:on    3:on    4:on    5:off   6:off  
Ahora, vamos a probar nuestro script.Inicie Tomcat:
  1. [root@srv6 ~]# service tomcat start  
  2. Using CATALINA_BASE:   /usr/share/apache-tomcat-7.0.23  
  3. Using CATALINA_HOME:   /usr/share/apache-tomcat-7.0.23  
  4. Using CATALINA_TMPDIR: /usr/share/apache-tomcat-7.0.23/temp  
  5. Using JRE_HOME:        /usr/java/jdk1.7.0_02  
  6. Using CLASSPATH:       /usr/share/apache-tomcat-7.0.23/bin/bootstrap.jar:/usr/share/apache-tomcat-7.0.23/bin/tomcat-juli.jar  
Detenga Tomcat:

  1. [root@srv6 ~]# service tomcat stop  
  2. Using CATALINA_BASE:   /usr/share/apache-tomcat-7.0.23  
  3. Using CATALINA_HOME:   /usr/share/apache-tomcat-7.0.23  
  4. Using CATALINA_TMPDIR: /usr/share/apache-tomcat-7.0.23/temp  
  5. Using JRE_HOME:        /usr/java/jdk1.7.0_02  
  6. Using CLASSPATH:       /usr/share/apache-tomcat-7.0.23/bin/bootstrap.jar:/usr/share/apache-tomcat-7.0.23/bin/tomcat-juli.jar  
Reiniciar Tomcat (debe ser iniciado primero):

  1. [root@srv6 ~]# service tomcat restart  
  2. Using CATALINA_BASE:   /usr/share/apache-tomcat-7.0.23  
  3. Using CATALINA_HOME:   /usr/share/apache-tomcat-7.0.23  
  4. Using CATALINA_TMPDIR: /usr/share/apache-tomcat-7.0.23/temp  
  5. Using JRE_HOME:        /usr/java/jdk1.7.0_02  
  6. Using CLASSPATH:       /usr/share/apache-tomcat-7.0.23/bin/bootstrap.jar:/usr/share/apache-tomcat-7.0.23/bin/tomcat-juli.jar  
  7. Using CATALINA_BASE:   /usr/share/apache-tomcat-7.0.23  
  8. Using CATALINA_HOME:   /usr/share/apache-tomcat-7.0.23  
  9. Using CATALINA_TMPDIR: /usr/share/apache-tomcat-7.0.23/temp  
  10. Using JRE_HOME:        /usr/java/jdk1.7.0_02  
  11. Using CLASSPATH:       /usr/share/apache-tomcat-7.0.23/bin/bootstrap.jar:/usr/share/apache-tomcat-7.0.23/bin/tomcat-juli.jar  
Debemos revisar el registro de catalina.out encuentra en / usr/share/apache-tomcat-7.0.23/logs/catalina.out y comprobar que no existen errores.
  1. [root@srv6 init.d]# more /usr/share/apache-tomcat-7.0.23/logs/catalina.out  
Ahora podemos acceder a la página Administrador de Tomcat en:

http://sudominio.com:8080 o http://suip:8080 y deberíamos ver la página de inicio de Tomcat.



Paso 4: Configuración de Access Manager Tomcat.



Tomcat 7 contiene una serie de cambios que ofrecen un grano más fino-roles.Por razones de seguridad, ningún usuario ni contraseñas se crean para las funciones del gestor de Tomcat de forma predeterminada. En un despliegue de producción, siempre es mejor para quitar la aplicación Manager.Para definir roles, nombre de usuario (s) y contraseña (s), tenemos que configurar el archivo tomcat-users.xml ubicado en $ CATALINA_HOME / conf / tomcat-users.xml.En el caso de nuestra instalación, $ CATALINA_HOME se encuentra en / usr/share/apache-tomcat-7.0.23.Por defecto, el Tomcat 7 tomcat-users.xml tendrá los elementos entre las etiquetas y comentada. .Nuevas funciones para Tomcat 7 oferta de grano fino de acceso y las funciones siguientes están disponibles:
manager-gui
manager-status
manager-jmx
manager-script
admin-gu
admin-script.

Podemos definir el rol manager-gui, por ejemplo, de la siguiente manera
  1. <tomcat-users>  
  2. <role rolename="manager-gui"/>  
  3. <user username="tomcat" password="secret" roles="manager-gui"/>  
  4. </tomcat-users>  


Se debe tener precaución en la concesión, para no varias funciones a la seguridad bajo-mente.
Paso 5 (Oprtional): Administrar el uso de memoria Uso de JAVA_OPTS.

Obtención de los valores de almacenamiento dinámico de memoria adecuados para su instalación dependerá de un número de factores.Para simplificar, vamos a configurar nuestro tamaño de la pila inital, Xms y nuestro tamaño máximo de almacenamiento dinámico, Xmx, con el mismo valor de 128 MbSimliarly, hay varios enfoques que puede tomar en cuanto a dónde y cómo establecer sus JAVA_OPTSUna vez más, para simplificar, vamos a añadir nuestros parámetros de memoria JAVA_OPTS en nuestro fichero Catalina.sh.Por lo tanto, abra el archivo Catalina.sh encuentra en / usr/share/apache-tomcat-7.0.23/bin con un editor de texto o vi.Ya que estamos usando 128 Mb por tanto el tamaño de almacenamiento dinámico inicial y máximo, añada la siguiente línea a Catalina.sh

  1. JAVA_OPTS="-Xms128m -Xmx128m"   


Por lo general sólo tiene que añadir esto en la segunda línea del archivo para que se vea como tal:
  1. #!/bin/sh  
  2. JAVA_OPTS="-Xms128m -Xmx128m"   
  3. # Licensed to the Apache Software Foundation (ASF) under one or more  
  4. # contributor license agreements.  See the NOTICE file distributed with  
  5. # this work for additional information regarding copyright ownership.  
  6. # The ASF licenses this file to You under the Apache License, Version 2.0  
  7. # (the "License"); you may not use this file except in compliance with  
  8. # the License.  You may obtain a copy of the License at  

Paso 6 (Opcional): Cómo ejecutar Tomcat utilizando mínimamente Priviligaiado (no root) del usuario.En nuestra configuración Tomcat anterior, se está ejecutando Tomcat como referencia.Por razones de seguridad, siempre es mejor correr con los servicios sólo los permisos que sean necesarios.Hay algunos que hacer un caso fuerte de que esto no es necesario, pero siempre es mejor errar en el lado de la precaución.Para ejecutar Tomcat como usuario no root, hay que hacer lo siguiente:1. Crear 'tomcat' del grupo:
  1. [root@srv6 ~]# groupadd tomcat  
2. Crear 'tomcat' el usuario y agregar este usuario al grupo tomcat que hemos creado anteriormente.
  1. [root@srv6 ~]# useradd -s /bin/bash -g tomcat tomcat  
Lo anterior, se creará un directorio principal para el usuario tomcat en el home del usuario por defecto como / home / tomcatSi queremos que el directorio de inicio para estar en otro lugar, simplemente especificar lo que usar la opción-d.
  1. [root@srv6 ~]# useradd -g tomcat -d /usr/share/apache-tomcat-7.0.23/tomcat tomcat  
Lo anterior creará el directorio de inicio del usuario tomcat como / usr/share/apache-tomcat-7.0.23/tomcat3. Cambie la propiedad de los archivos tomcat tomcat al usuario que hemos creado anteriormente:
  1. [root@srv6 ~]# chown -Rf tomcat.tomcat /usr/share/apache-tomcat-7.0.23/  
Nota: es posible mejorar nuestra seguridad aún más haciendo ciertos archivos y directorios de sólo lectura. Esto no se trata en este post y se debe tener cuidado al establecer esos permisos.4. Ajuste el guión de servicio de arranque / parada que hemos creado anteriormente. En nuestro nuevo guión, necesitamos su para el usuario tomcat:
  1. #!/bin/bash  
  2. # description: Tomcat Start Stop Restart  
  3. # processname: tomcat  
  4. # chkconfig: 234 20 80  
  5. JAVA_HOME=/usr/java/jdk1.7.0_02  
  6. export JAVA_HOME  
  7. PATH=$JAVA_HOME/bin:$PATH  
  8. export PATH  
  9. CATALINA_HOME=/usr/share/apache-tomcat-7.0.23/bin  
  10.   
  11. case $1 in  
  12. start)  
  13. /bin/su tomcat $CATALINA_HOME/startup.sh  
  14. ;;   
  15. stop)     
  16. /bin/su tomcat $CATALINA_HOME/shutdown.sh  
  17. ;;   
  18. restart)  
  19. /bin/su tomcat $CATALINA_HOME/shutdown.sh  
  20. /bin/su tomcat $CATALINA_HOME/startup.sh  
  21. ;;   
  22. esac      
  23. exit 0  


Paso 7 (Opcional): Cómo ejecutar Tomcat en el puerto 80 como usuario no root.

Nota: el siguiente es aplicable cuando se está ejecutando Tomcat en "stand alone" con Tomcat Tomcat ejecutando bajo el usuario mínimamente privilegiado que hemos creado en el paso anterior.Para ejecutar servicios por debajo del puerto 1024 como un usuario distinto de root, puede añadir lo siguiente a las tablas de PI:

  1. [root@srv6 ~]# iptables -t nat -A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080    
  2. [root@srv6 ~]# iptables -t nat -A PREROUTING -p udp -m udp --dport 80 -j REDIRECT --to-ports 8080    


Asegúrese de guardar y reiniciar tu IP Tables.Puestos relacionados con Tomcat

URL - Relacionadas con TOMCAT

Más información sobre Apache Tomcat7 Apache Tomcat Foundation Tomcat 7