Manual de FreeBSD
Anterior | Capítulo 14. Seguridad | Siguiente

# 14.9. OpenSSL

Escrito por: Tom Rhodes.

El conjunto de herramientas OpenSSL es una característica de FreeBSD que muchos usuarios pasan por alto. OpenSSL ofrece una capa de cifrada de transporte sobre la capa normal de comunicación, permitiendo la combinación con con muchas aplicaciones y servicios de red.

Algunos usos de OpenSSL son la validación cifrada de clientes de correo, las transacciones basadas en web como pagos con tarjetas de crédito, etc. Muchos ports, como `www/apache13-ssl` y `mail/sylpheed-claws` ofrecen soporte de compilación para OpenSSL.

> Nota: En la mayoría de los casos la colección de ports tratará de compilar el port `security/openssl` a menos que la variable de make `WITH_OPENSSL_BASE` sea puesta explícitamente a “yes”.

La versión de OpenSSL incluida en FreeBSD soporta los protocolos de seguridad de red Secure Sockets Layer v2/v3 (SSLv2/SSLv3) y Transport Layer Security v1 (TLSv1) y puede utilizarse como biblioteca criptográfica general.

> Nota: OpenSSL soporta el algoritmo IDEA pero estáa deshabilitado por defecto debido a patentes en vigor en los Estados Unidos. Si quiere usarlo debe revisar la licencia, y si las restricciones le parecen aceptables active la variable `MAKE_IDEA` en `make.conf`.

Uno de los usos más comunes de OpenSSL es ofrecer certificados para usar con aplicaciones de software. Estos certificados aseguran que las credenciales de la compañia o individuo son válidos y no son fraudulentos. Si el certificado en cuestión no ha sido verificado por uno de las diversas “autoridades certificadoras” o CA, suele generarse una advertencia al respecto. Una autoridad de certificados es una compañia, como VeriSign, que firma certificados para validar credenciales de individuos o compañias. Este proceso tiene un costo asociado y no es un requisito imprescindible para usar certificados, aunque puede darle un poco de tranquilidad a los usuarios más paranóicos.

## 14.9.1. Generación de certificados

Para generar un certificado ejecute lo siguiente:

    # openssl req -new -nodes -out req.pem -keyout cert.pem
    Generating a 1024 bit RSA private key
    ................++++++
    .......................................++++++
    writing new private key to 'cert.pem'
    -----
    You are about to be asked to enter information that will be incorporated
    into your certificate request.
    What you are about to enter is what is called a Distinguished Name or a DN.
    There are quite a few fields but you can leave some blank
    For some fields there will be a default value,
    If you enter '.', the field will be left blank.
    -----
    Country Name (2 letter code) [AU]:US
    State or Province Name (full name) [Some-State]:PA
    Locality Name (eg, city) []:Pittsburgh
    Organization Name (eg, company) [Internet Widgits Pty Ltd]:Mi compañía
    Organizational Unit Name (eg, section) []:Administrador de sistemas
    Common Name (eg, YOUR name) []:localhost.ejemplo.org
    Email Address []:trhodes@FreeBSD.org

    Please enter the following 'extra' attributes
    to be sent with your certificate request
    A challenge password []:UNA CONTRASEÑA
    An optional company name []:Otro nombre

Tenga en cuenta que la respuesta directamente después de “prompt” “Common Name” muestra un nombre de dominio. Este “prompt” requiere que se introduzca un nombre de servidor para usarlo en la verificación; si escribe cualquier otra cosa producirá un certificado inválido. Otras opciones, por ejemplo el tiempo de expiración, alternan algoritmos de cifrado, etc. Puede ver una lista completa en la página de manual de openssl(1).

Debería tener dos ficheros en el directorio donde ha ejecutado la orden anterior. La petición de certificado, `req.pem`, es lo que debe enviar a una autoridad certificadora para que valide las credenciales que introdujo; firmará la petición y le devolverá el certificado. El segundo fichero es `cert.pem` y es la llave privada para el certificado, que debe proteger a toda costa; si cae en malas manos podrí usarse para suplantarle a usted o a sus servidores.

Si no necesita la firma de una CA puede crear y firmar usted mismo su certificado. Primero, genere la llave RSA:

    # openssl dsaparam -rand -genkey -out myRSA.key 1024

A continuación genere la llave CA:

    # openssl gendsa -des3 -out myca.key myRSA.key

Utilice esta llave para crear el certificado:

    # openssl req -new -x509 -days 365 -key myca.key -out new.crt

Deberín aparecer dos nuevos ficheros en su directorio: un fichero de firma de autoridad de certificados (`myca.key`) y el certificado en sí, `new.crt`. Deben ubicarse en un directorio, que se recomienda que sea `/etc`, que es legible solo para `root`. Para terminar, es recomendable asignar permisos 0700 para el fichero con `chmod`.

## 14.9.2. Uso de certificados; un ejemplo

¿Qué pueden hacer estos ficheros? Cifrar conexiones al MTA Sendmail es un buen sitio para usarlos. De este modo eliminará el uso de validación mediante texto en claro para los usuarios que envían correo a través del MTA local.

> Nota: No es el mejor uso en el mundo, ya que algunos MUAs enviarán al usuario un mensaje de error si no tiene instalados localmente los certificados. Consulte la documentación para más datos sobre la instalación de certificados.

Debe añadir las siguientes líneas en su fichero local `.mc`:

    dnl SSL Options
    define(`confCACERT_PATH',`/etc/certs')dnl
    define(`confCACERT',`/etc/certs/new.crt')dnl
    define(`confSERVER_CERT',`/etc/certs/new.crt')dnl
    define(`confSERVER_KEY',`/etc/certs/myca.key')dnl
    define(`confTLS_SRV_OPTIONS', `V')dnl

`/etc/certs/` es el directorio destinado a almacenamiento de los ficheros de certificado y llave en local. El último requisito es una reconstrucción del fichero `.cf` local. Solo tiene que teclear `make` `install` en el directorio `/etc/mail`. A continuación ejecute un `make` `restart`, que debería reiniciar el dæmon Sendmail.

Si todo fué bien no habrá mensajes de error en el fichero `/var/log/maillog` y Sendmail aparecerá en la lista de procesos.

Puede probarlo todo de una forma muy sencilla; conéctese al servidor de correo mediante telnet(1):

    # telnet ejemplo.com 25
    Trying 192.0.34.166...
    Connected to ejemplo.com.
    Escape character is '^]'.
    220 ejemplo.com ESMTP Sendmail 8.12.10/8.12.10; Tue, 31 Aug 2004 03:41:22 -0400 (EDT)
    ehlo ejemplo.com
    250-ejemplo.com Hello ejemplo.com [192.0.34.166], pleased to meet you
    250-ENHANCEDSTATUSCODES
    250-PIPELINING
    250-8BITMIME
    250-SIZE
    250-DSN
    250-ETRN
    250-AUTH LOGIN PLAIN
    250-STARTTLS
    250-DELIVERBY
    250 HELP
    quit
    221 2.0.0 ejemplo.com closing connection
    Connection closed by foreign host.

Si la línea “STARTTLS” aparece en la salida, todo está funcionando correctamente.

Anterior | Inicio | Siguiente
Kerberos5 | Subir | VPN sobre IPsec

Puede descargar éste y muchos otros documentos desde ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

Si tiene dudas sobre FreeBSD consulte la documentación antes de escribir a la lista <questions@FreeBSD.org>.
Envíe sus preguntas sobre la documentación a <doc@FreeBSD.org>.