Configuración de TLS/SSL con otras herramientas

Destaca los flujos de trabajo de herramientas de clave GnuTLS, NSS y Java para crear y gestionar certificados en Oracle Linux.

Revise las herramientas adicionales que puede considerar para configurar TLS/SSL.

Varios factores pueden influir en la elección de la herramienta. Por ejemplo, algunas herramientas son más ligeras que otras, o algunas están dirigidas a entornos específicos, como la herramienta de claves para Java. Algunos no solo cubren la gestión de la infraestructura de certificados, sino que también incluyen otras funciones, API y bibliotecas para desarrollar aplicaciones que permiten otros protocolos de red seguros y estándares de seguridad. Aunque este libro no proporciona detalles sobre estas características, puede encontrar más información sobre ellas en las páginas manuales correspondientes y la documentación de los proyectos de código abierto.

GnuTLS

Muestra cómo usar certtool para generar claves, CSR y certificados autofirmados.

La herramienta de certificados GnuTLS certtool disponible en Oracle Linux crea solicitudes de firma de certificados, certificados autofirmados y certificados de CA de propiedad privada. GnuTLS es una biblioteca que proporciona implementaciones de los protocolos SSL, TLS y DTLS, junto con las tecnologías relacionadas, para proteger las comunicaciones. Incluye una interfaz de programación de aplicaciones (API) escrita en lenguaje C para acceder a los protocolos de comunicaciones seguras y las API para analizar y escribir estructuras como X.509, PKCS #12 y OpenPGP.

Para utilizar certtool, instale el paquete gnutls-utils disponible en el repositorio de flujo de aplicaciones:
sudo dnf install gnutls-utils

Los siguientes ejemplos muestran cómo utilizar el comando certtool para crear solicitudes de firma de certificados, certificados autofirmados y certificados de CA de propiedad privada.

  1. Para generar una clave privada, ejecute el siguiente comando y sustituya private_key_file por el nombre del archivo de clave privada:
    sudo certtool --generate-privkey --outfile private_key_file
  2. Para generar una CSR, ejecute el siguiente comando y sustituya csr_file por el nombre del archivo CSR:
    sudo certtool --generate-request --load-privkey private_key_file --outfile csr_file
  3. Para generar un certificado autofirmado, ejecute el siguiente comando:
    sudo certtool --generate-self-signed --load-privkey private_key_file --outfile self_signed_certificate_file 

Para obtener más información, consulte la página del manual certtool(1) y el proyecto de código abierto GnuTLS en https://www.gnutls.org/.

NSS

Describe la gestión de certificados y claves con los comandos certutil y pk12util de NSS.

La herramienta de certificado del servicio de seguridad de red (NSS) certutil disponible en Oracle Linux y cómo utilizarla para crear solicitudes de firma de certificados (CSR), certificados autofirmados y certificados de CA de propiedad privada con archivos de base de datos NSS que almacenan certificados y claves privadas para aplicaciones.

NSS es un conjunto de bibliotecas diseñadas para permitir el desarrollo multiplataforma de aplicaciones de servidor y cliente habilitadas para la seguridad. Las Aplicaciones creadas con NSS funcionan con SSL v2 y v3, TLS, PKCS #5, PKCS #7, PKCS #11, PKCS #12, S/MIME, certificados X.509 v3 y otros estándares de seguridad.

Para poder utilizar certutil para gestionar certificados, CSR y claves, debe tener acceso a los archivos de base de datos NSS. Puede utilizar los archivos de bases de datos de seguridad heredadas (cert8.db para certificados, key3.db para claves y secmod.db para la información del módulo PKCS #11) o los nuevos archivos de base de datos SQLite (cert9.db para certificados, key4.db para claves y pkcs11.txt para módulos PKCS #11). En esta sección se proporcionan ejemplos de los nuevos archivos de base de datos.

También puede utilizar el comando pk12util relacionado para exportar e importar certificados y claves de un archivo PKCS #12 a una base de datos NSS o al revés.

Para utilizar certutil y pk12util, instale el paquete nss-tools disponible en el repositorio de flujo de aplicaciones:
sudo dnf install nss-tools

Los siguientes ejemplos muestran cómo utilizar los comandos certutil y pk12util.

  1. Para crear una base de datos NSS, ejecute el siguiente comando, donde database_directory es el directorio raíz donde desea crear los archivos de base de datos NSS cert9.db, key4.db y pkcs11.txt:
    certutil -N -d database_directory
    Por ejemplo, a continuación se crea la base de datos en una carpeta denominada nssdb en el directorio raíz del usuario:
    certutil -N -d $HOME/nssdb
  2. Para generar un certificado autofirmado, ejecute el siguiente comando:
    certutil -d database_directory -S -s subject -n nickname -x -t trust_args -o file
    En este ejemplo:
    • -S indica que desea crear un certificado individual y agregarlo a una base de datos de certificados.
    • -s indica que desea especificar un nombre distintivo en el que subject utilice el formato de nombre distintivo definido en https://www.rfc-editor.org/rfc/rfc1485.html.
    • -n indica que desea especificar un apodo en el que apodo sea el apodo de la entidad que está creando.
    • -x indica que desea generar la firma para un certificado que se está creando o agregando a una base de datos, en lugar de obtener una firma de una autoridad de certificación independiente.
    • -t indica que desea agregar argumentos de confianza donde trust_args son los atributos de confianza que desea aplicar al certificado. Cada certificado tiene tres categorías de confianza, expresadas en el orden SSL, correo electrónico, firma de objetos para cada configuración de confianza. En cada posición de categoría, no utilice ninguno, ninguno o todos los códigos de atributo. Los códigos válidos son:
      • p: peer válido
      • P: peer de confianza (incluye p)
      • c: CA válida
      • C: CA de confianza (incluye c)
      • T: CA de confianza para autenticación de cliente (solo servidor SSL)
    Por ejemplo, el siguiente comando crea un certificado autofirmado para el nombre común www1.example.com con el apodo example_test. Los atributos de confianza son C (Trusted CA) para cada categoría.
    certutil -d $HOME/nssdb/ -S -s 'CN=www1.example.com, O=Example Organization, L=Ottawa, C=CA' -n example_test -x -t C,C,C
  3. Para agregar certificados o certificados existentes generados en otro lugar, ejecute el siguiente comando:
    certutil -A -n nickname -t trust_args -d database_directory -i input-file

    Dónde:

    • -A indica que desea agregar un certificado a una base de datos de certificados.
    • -i indica que desea proporcionar un archivo de entrada, como un archivo de certificado, por ejemplo, un archivo PEM.
    Por ejemplo:
    certutil -A -n "CN=My SSL Certificate" -t C,C,C -d $HOME/nssdb/ -i $HOME/tls-ca-bundle.pem
  4. Para mostrar todos los certificados, ejecute el siguiente comando:
    certutil -L -d database_directory

    Por ejemplo:

    certutil -L -d $HOME/nssdb/
    
    Certificate Nickname                                         Trust Attributes
                                                                 SSL,S/MIME,JAR/XPI
    
    example_test                                                 Cu,Cu,Cu
    CN=My SSL Certificate                                        C,C,C

    Al mostrar certificados, las etiquetas de confianza pueden incluir el indicador u que indica que una clave privada está asociada al certificado.

  5. Para suprimir un certificado de la base de datos, ejecute el siguiente comando:
    certutil -D -d database_directory -n nickname

    En el ejemplo anterior, -D indica que desea suprimir un certificado específico de la base de datos.

  6. Para mostrar todas las claves, ejecute el siguiente comando:
    certutil -K -d database_directory

    Por ejemplo:

    certutil -K -d $HOME/nssdb/
    certutil: Checking token "NSS Certificate DB" in slot "NSS User Private Key and Certificate Services"
    Enter Password or Pin for "NSS Certificate DB":
    < 0> rsa      35f4555f329c1490b3570c9d36e1ec56f2329f08   NSS Certificate DB:example_test
    < 1> rsa      303936d20b3522e9293b75db3dc48f77c1871767   NSS Certificate DB:example_test2
  7. Para mostrar una clave pública en formato PEM, ejecute el siguiente comando:
    certutil -L -d database_directory -a -n nickname

    Por ejemplo:

    certutil -L -d $HOME/nssdb/ -a -n example_test
    -----BEGIN CERTIFICATE-----
    ...[certificate text]
    -----END CERTIFICATE-----
  8. Para exportar un certificado y una clave a un único archivo PKCS #12, ejecute el siguiente comando:
    pk12util -o certs.p12 -n example_test -d sql:database_directory
  9. Para cambiar un certificado, utilice la opción -M. Por ejemplo, lo siguiente cambia los argumentos de confianza de C,C,C a P,P,P para el certificado example_test:
    $ certutil -d database_directory -M -t "P,P,P" -n example_test

Para obtener más información, consulte las páginas del manual certutil(1) y pk12util(1) y el proyecto de código abierto NSS en https://firefox-source-docs.mozilla.org/security/nss/index.html.

Java

Describe acciones de herramienta de claves comunes para inspeccionar almacenes de claves, solicitar certificados e importar cadenas de CA.

La mayoría de las aplicaciones Java utilizan el almacén de claves que se suministra con JDK para almacenar claves criptográficas, información de la cadena de certificados X.509 y certificados protegidos. El almacén de claves JDK por defecto en Oracle Linux es el archivo /etc/pki/java/cacerts. Puede utilizar el comando keytool para generar, instalar y gestionar certificados en el almacén de claves Java.

Los siguientes ejemplos muestran cómo puede usar el comando keytool.

  1. Muestre el contenido del almacén de claves, /etc/pki/java/cacerts:
    sudo keytool -list [-v] -keystore /etc/pki/java/cacerts

    La contraseña del almacén de claves por defecto es changeit. Cambie esta contraseña lo antes posible. Si se especifica, la opción detallada -v muestra información detallada.

  2. Cambie la contraseña de un almacén de claves, por ejemplo, /etc/pki/java/cacerts:
    sudo keytool -storepasswd -keystore /etc/pki/java/cacerts
  3. Cree un almacén de claves (keystore.jks).

    Al crear un almacén de claves, puede:

    • Gestione pares de claves públicas y privadas y certificados de entidades en las que confía.

    • Genere un par de claves pública y privada mediante el algoritmo RSA y una longitud de clave de 3072 bits.

    • Cree un certificado autofirmado que incluya la clave pública y la información de nombre distintivo especificada.

    sudo keytool -genkeypair -alias engineering -keyalg RSA -keysize 3072 \
    -dname "CN=www.unserdom.com, OU=Eng, O=Unser Dom Corp, C=US, ST=Ca, L=Sunnydale" \
    -keypass pkpassword -keystore keystore.jks \
    -storepass storepassword -validity 100

    En el comando, pkpassword es la contraseña de clave privada y storepassword es la contraseña del almacén de claves. En este ejemplo, el certificado es válido durante 100 días y está asociado a la clave privada en una entrada del almacén de claves que tiene el alias engineering.

  4. Visualice el contenido de un archivo de certificado en formato legible por el usuario:
    sudo keytool -printcert [-v] -file cert.cer

    Si se especifica, la opción detallada -v muestra información detallada.

  5. Genere una CSR en el archivo carequest.csr para enviarla a una CA:
    sudo keytool -certreq -alias engineering -keystore keystore.jks \
    -storepass storepassword -file carequest.csr

    La CA firma y devuelve un certificado o una cadena de certificados que autentica la clave pública.

  6. Importe el certificado raíz o la cadena de certificados para la CA del archivo ACME.cer al almacén de claves keystore.jks y asígnele el alias acmeca:
    sudo keytool -importcert -alias acmeca [-trustcacerts] -file ACME.cer \
    -keystore keystore.jks -storepass storepassword

    Si se especifica, la opción -trustcacerts indica a keytool que agregue el certificado solo si puede validar la cadena de confianza con respecto a los certificados de CA raíz existentes en el almacén de claves cacerts. O bien, puede utilizar el comando keytool -printcert para comprobar que la huella del certificado coincide con la huella que publica la CA.

  7. Importe el certificado firmado para la organización una vez que lo haya recibido de la CA:
    sudo keytool -importcert -v -trustcacerts -alias engineering -file ACMEdom.cer \
    -keystore keystore.jks -storepass storepassword

    En este ejemplo, el archivo que contiene el certificado es ACMEdom.cer. La opción -alias especifica la entrada para la primera entidad de la cadena de certificados raíz de la CA. El certificado firmado se agrega al frente de la cadena y se convierte en la entidad a la que se dirige el nombre de alias.

  8. Suprima el certificado con el alias aliasname del almacén de claves keystore.jks:
    sudo keytool -delete -alias aliasname -keystore keystore.jks -storepass storepassword
  9. Exporte el certificado con el alias aliasname como archivo de formato PKCS7 binario, que incluye tanto la cadena de certificados como el certificado emitido:
    sudo keytool -exportcert -noprompt -alias aliasname -file output.p7b \
    -keystore keystore.jks -storepass storepassword
  10. Exporte el certificado con el alias aliasname como un archivo de texto codificado en base64 (también denominado PEM o RFC 1421).
    sudo keytool -exportcert -noprompt -rfc -alias aliasname -file output.pem \
    -keystore keystore.jks -storepass storepassword

    Para una cadena de certificados, el archivo solo incluye el primer certificado de la cadena, que autentica la clave pública de la entidad con alias.

Para obtener más información, consulte la página del manual keytool(1).