14.9. OpenSSL
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 | Subir | Siguiente
14.8. Kerberos5 | Inicio | 14.10. 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>.