Gestionar certificados

Si los certificados internos o de terceros no se almacenan en un centro de gestión de configuración remota como, por ejemplo Vault, también puede definir los certificados localmente en un archivo JSON.

Certificados internos

Para la certificación interna entre los contenedores de Docker de HCL Commerce, debe asegurarse de que el nombre común (CN) del certificado y "SubjectAlternativeName" puedan coincidir con el nombre de host que utilizarán los contenedores de Docker. Además, cuando otros contenedores de origen se conectan a un contenedor de destino, el contenedor de origen debe utilizar el nombre de host del contenedor de destino. Hay una lógica de verificación estricta para comprobar si el nombre de host que se utiliza en una petición es el mismo que el SubjectAlternativeName del certificado en el contenedor de destino. Si los nombres de host no coinciden, la conexión falla.

A continuación se indican los SubjectAlternativeName en la certificación interna predeterminada que se incluye en los contenedores de Docker de HCL Commerce:
SubjectAlternativeName [
  DNSName: *
  DNSName: app
  DNSName: web
  DNSName: search
  DNSName: store
  DNSName: tooling-web
  DNSName: store-web
  DNSName: query
  DNSName: data-query
  DNSName: ingest
  DNSName: nifi
  DNSName: registry
  DNSName: elasticsearch
  DNSName: zookeeper
  DNSName: localhost
  DNSName: search_master
  DNSName: search_repeater
  DNSName: search_slave
]
Si no utiliza los nombres de host predeterminados, debe volver a configurar las conexiones entre contenedores. La siguiente lista señala algunas opciones para volver a configurar las conexiones de contenedor.
  • Cree nuevos certificados y especifique el nombre común (CN) y SubjectAlternativeName adecuados en los certificados.
  • Si está utilizando docker run para desplegar contenedores, utilice la variable --add-host para correlacionar la dirección IP con el nombre de host predeterminado. Para obtener más información, consulte Docker run documentation.
  • Si utiliza docker-compose para desplegar contenedores, aproveche la variable extra_hosts para correlacionar la dirección IP con el nombre de host predeterminado. Para obtener más información, consulte Docker extra_hosts documentation. Por ejemplo, el nombre de host predeterminado para la base de datos es db. Si no está utilizando un contenedor de Docker de base de datos, debe utilizar la variable extra_hosts para correlacionar la dirección IP de base de datos con el nombre de host bd. Por ejemplo,
    extra_hosts:
        - "db:DatabaseServerIP"
    A continuación se muestran dos archivos YAML de ejemplo que puede utilizar como referencia para utilizar la variable extra_hosts.
  • Añada un contenedor de proxy para correlacionar el nombre de host y el servidor de destino predeterminados.
Nota: Si desea sustituir los certificados internos predeterminados, tiene que nombrar el archivo JSON como default.json. De lo contrario, los certificados se importan utilizando el nombre del archivo JSON como alias en la lista de almacén de claves.

Certificados externos

  • Para una comunicación externa segura entre HCL Commerce y el software de terceros, asegúrese de importar la información de certificación unidireccional o bidireccional adecuada. Esto incluye exportar las claves públicas de certificado e importarlas al almacén de confianza de aplicaciones de terceros.
  • Asegúrese de que el código de personalización, que crea para conectarse con el software de terceros, utiliza el nombre de certificado correcto.

Cómo definir la información de certificado en un archivo JSON

Nota: Al copiar los certificados en el archivo JSON, debe sustituir el salto de línea por \n para asegurarse de que toda la serie de certificado está en una sola línea.
  • Para validar el certificado SSL unidireccional, donde una aplicación necesita un certificado para comunicarse con otra aplicación que tenga SSL habilitado, solo tiene que definir el issuing_ca en el archivo JSON. Por ejemplo,
    {
     "issuing_ca": "-----BEGIN CERTIFICATE-----\nMIIFJjCCAw6gAwIBAgIUDUnfHPvwqpztM2lJh40lVUmTjV8wDQYJKoZIhvcNAQEL\nBQAwKzEpMCcGA1UEAwwgc2VsZnNlcnZlX3Byb2R1Y3Rpb25fcGtpIFJvb3QgQ0Ew\nHhcNMTcwODI1MDUwNTEzWhcNMjcwODIzMDUwNTQzWjArMSkwJwYDVQQDDCBzZWxm\nc2VydmVfcHJvZHVjdGlvbl9wa2kgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEBBQAD\nggIPADCCAgoCggIBAM5LpBH9Qyg5VjTkdMj61gt72CVIrqE5s9iD+Bpb2hlLnWdb\n52FtcgCxIRca8kJhCYK53dNVmCP8d7LSzogxdIHyzEe5f405ukJVZIbYEYcA4BLK\n3UU322bYJkTTToABwV+XhlHjLhaze9GLo4snCklxAzafWvqR1C0faB2dPtq5WyQi\n/2uCvGHcpqe/ozNvZON6eYkjQpCwHftR0TwVVb435hvJb6FeeV95MgVq/C0pZFG4\nGLgJNj4GK4BtG2wsIDVMMcaoFrSKfKDqyE+4ekvzYP4nDzbYK5XsgH7/7XB9tL7w\nwMVj0J1mR3TbxVTBZyk509F0oXqBcNb6vvybJevhDlkXMQPgxyOmogm6GUQ3beMX\nsRpN5uotnbWaF0MQbgo8YrgQX3BGrLmKRfk9rIMoBKabptDMRw5Df1ouu5D9Jb3b\n3nlelkRXR5qb0R68CM0S78KqVB32NQsLixQ58YUKmcvlQcaIF9cwC28+LYm4sRq/\nV0tCl68K19PmgZT+Qr0Apakw+vlQ8ojvT+/wTVtg+gphuG7Ovv00xRXa/dpoC3Ff\nOktxUmu3bh4YU/IVCT3+YbwB7vyOfKGTwSmVK+s5gt4MDM65zX58xa85psJI8mqP\nCwKGDleglrAIrHxxg2wKrIibiIriSnjJsKqCzpcm9+6V4zewwQFqdfr1R92rAgMB\nAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW\nBBQNl+8T/jYl1zV4Sct1EKqHBDcUUzANBgkqhkiG9w0BAQsFAAOCAgEAYo+vaKzi\nW2YTogGvuDvWnFzDtRa6zfB1UNqUTiacmr9ISqTDGJPOE7o7+5//31yS63/VuPAb\nsskfjtbywGUcjLEoa//vqDUA5VPQSr2MGpqZItt+QQ7eIQPQEt6IaqohmIxvgyDI\nvV35Ld06slZju9IZJdOx5GyRU49ZrhTciNeHBFJbPTzTWw7swjP1Kj13BJ9++YlU\ndHHnJecMgRPXbbFn8cThcIUwhaTEWFhlC7zc4YUpTm8nmHaCLmG8TM7tYLaymHqd\nypMBa3TrGr4+XIgwkWWb9h9+JnlBXc+aq2pJulErzN3raytzv+iTOwcI+YCufgee\nAf25Zzk9t75KIHjSdqu1U/QXiPSgJgr7o2yrtZbeLT+eMHuhCfbuWduipuRgTlUk\na8hvoiFDabCrlJABDYHNO8WMCIqX9qja0crqA1JbPXAEMiYwdtoU+p27CtNupGVE\nQENamacyYD5VhApTnxACwwakMep0jDYQUXUYTeLz6Aj3vVUJl54/3Uqbh6fxKamh\n8xDeb+HjhO5UKDkfAH0qe17qSGGVftMI3YMPCEqrvnnoVl8VHxpvdVjjJoHEEKoE\ne8mrX4Jp9O3xVcGFItMQQzvWc1A47ewqIy6x+bk+0W8fL6+rKd+8U7aRIvC7LFiw\nluvq3QIacuHULtox36A7HFmlYDQ1ozh+tLI=\n-----END CERTIFICATE-----"
    }
  • Para validar certificados SSL bidireccional, donde SSL está habilitado en ambas aplicaciones, debe definir más información. Por ejemplo,
    {
     "certificate": "-----BEGIN CERTIFICATE-----\nMIIETDCCAjSgAwIBAgIUTrvpjzgpyt6L9AWj2E0W4ps2woswDQYJKoZIhvcNAQEL\nBQAwKzEpMCcGA1UEAwwgc2VsZnNlcnZlX3Byb2R1Y3Rpb25fcGtpIFJvb3QgQ0Ew\nHhcNMTcwOTI2MDQ1NzM3WhcNMTcxMTIxMDQ1ODA3WjAPMQ0wCwYDVQQDEwR0ZXN0\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtuWgQ5P9KjpgplOyejAE\nj5pDgSmQ6mZkbqY6gnIIKlw1I4Vulaigmeiir37NcAHtLA9HrpqafKoQqt3RPIFq\nMq2qb728JUNqdkmgp1QRnXdRVqrvGxT3o6XLMmxpkniwL+f3A/qFzuBgDJVltKLn\n1e0O3conPiiGtqaZ70+1lccKkKviLoin13T+27gFFws6dT74znCxT8c/ikXGMja1\nTDEddd+qkXlo4At104Fo7Uhx95JWorSljSTaCQkEeOjX+8SJHkARSrKeGEvkBESp\nXD23oUY9MlxGQnldioLAI5Eu8fRo3PKQUhuFnuoxTr0pO7R60AEe8E0sVU/cE3Ut\nswIDAQABo4GDMIGAMA4GA1UdDwEB/wQEAwIDqDAdBgNVHSUEFjAUBggrBgEFBQcD\nAQYIKwYBBQUHAwIwHQYDVR0OBBYEFLfcxphP+aSe61Mdi8IDP7bBvGXdMB8GA1Ud\nIwQYMBaAFA2X7xP+NiXXNXhJy3UQqocENxRTMA8GA1UdEQQIMAaCBHRlc3QwDQYJ\nKoZIhvcNAQELBQADggIBAH3oLFPSSgubbwhXycm+oTMnEZyUwKfwAjkc2mykDZ/p\nPPrHZKCfMuWNf8mp7mK0K8O2JjBKbUlUUJZgd/8/9d0vLqU7Hf97Xk/8d0Rxwqgd\n2OmdujQpj49NFoAC+jAcGFXASwvGAzWg4ylTi+zvpUbVpLk0hOpYnJFvxEcXj0ab\nul9Mq0hrjarmkPAoDhmWjUQG8EKiJEelIv5r4OuNIDl+N5B3BNU+g8nz4GWJKIbP\n6dEb98GJh0tFqOHoxewVmrCmMnsGfJYJDqLg+CwXHSNS8xYQnuFzcJXQ4j7Kge5P\nCeMB6fizgTiUXFexjbTv6RUk1DfOywtRu7Wus9joTpDILb/WlIUlGvRj2j395BvK\naq5nLcgSpmO46776uobh6MN6se1kmpJ20sjUZWEtJsKODSAv7LA9jsMWhh1SGEWf\nUuQ1hUKHZ2073hgc0InmYGGyTJAnI3mYIbL+ddprK1CpORAH2cruqn9I192sCWNw\npZIxuMCiRUrFWitKEkFwPfmDbVhPQ/ZvxMcdAHXJ+ZQ9RxcanmcBGnlvCjidOBZa\naLN2/Y99M26z+XcYG9rN0fx5Htf4UDENQ8kp8TITmyHdwvqVox/UXcPWzV3MD7+I\nn0UdA2lqnM2Rv+kg2MGm0u9Y/noZz4IS4YTlfxMbGF212ROcCC9/oQYy321NqBns\n-----END CERTIFICATE-----",
     "private_key": "-----BEGIN RSA PRIVATE KEY-----\nMIIEpQIBAAKCAQEAtuWgQ5P9KjpgplOyejAEj5pDgSmQ6mZkbqY6gnIIKlw1I4Vu\nlaigmeiir37NcAHtLA9HrpqafKoQqt3RPIFqMq2qb728JUNqdkmgp1QRnXdRVqrv\nGxT3o6XLMmxpkniwL+f3A/qFzuBgDJVltKLn1e0O3conPiiGtqaZ70+1lccKkKvi\nLoin13T+27gFFws6dT74znCxT8c/ikXGMja1TDEddd+qkXlo4At104Fo7Uhx95JW\norSljSTaCQkEeOjX+8SJHkARSrKeGEvkBESpXD23oUY9MlxGQnldioLAI5Eu8fRo\n3PKQUhuFnuoxTr0pO7R60AEe8E0sVU/cE3UtswIDAQABAoIBAB3kQ6An1K2NIvSs\nIzRTGru5k6TNfVDB8VIgOtnM90atEUY/7YXqLG1bFxOlnr/aoL+ds7J2tB8B0H2M\niUDhSdEEjyF6GgDhFspEWExgsgxRTuriPvfnIl4Nn7sa+tokfW8m8zkkPbBE/Y2w\n8RFnuoo9FzvqaSWAjBvX+LqjBWN4AGHxPcBcZs/H4U7RvdO0etX2Zbpjs62K/KO3\ni3e4MXgGZtj0Vx2LYD/AYSbqEoo1v8/U1AbGmsCTTNc2EwARhyb1zUgO7yc9yft6\nUoAC6pZjxOFsJtwz26jpNdqXz9t1xml3XnNusqHe+hgStQlIL2mgU8qj18q5pqpu\nkehM9LECgYEAxiU9WA7kQTp8hGKTRqrRbcGBsLTGxsYeILFQggtJBOZ5ngOH35Nd\nUIzQ1EjKODFEzGH9qPBBfE6BNdl3naHuYgIS3Uz8FCAwsOZAW6X8tC7VU/ZrwKUA\nF3Rc2iek+J1bdaz5o3hnR2eY/6kVuNHznxqIzK+JuZ7Dq/wEMlAL4gkCgYEA7Eyb\n4uyQFMXfPLiZPn7opNlgmi4i5lNLbPAjJq0dagdP8HbhLBqQThMcyAnu9rJmNm6t\n2Wu8kkKIpcZiGOVzFQvoTWOm6KGU/nIFFH1p6AAz/hvhATFA8HpLe9B7la9T6c5R\nabbtFbUNrHyoieMsIxkrjPo1zVIThLJeIVdoUNsCgYEAwuhKyV4MpSU06rxUhsTs\nsXwRaJLKnSiw5hPFT8ZuE0XrB8YNV52LwvphSRA46sF8HVeevxlmMTK/4wqBoSty\nZDIKAGoD5IAtpTU4xW4nf845xhe1spAb4PZzh5xLqMqQ9tYp0eVUImcDlyjp1x2e\n+TiOrFlXrqE/dOO39Q3MQpECgYEA5plMd4OMh/kiBcvQIOEQf+9zCoODo2od7U3b\nv96pGdPQ+0XIMJYrxUV5jO3EuhMXFH+mQMuW1tT/LWgQS2N/j0ZziTJ6rAMjt7vl\noT1SoQmxs4XZaqR6TzPJfibStBzJsx2Y7aWKcOijU3TDtOxxIj9p9MYowxoZ2iGH\nItp9/okCgYEAh6lbVbf77NArp1FsocQoeZ2ZL1hsOXpmRwpNmePPA6DfjqJyttpH\ngSh8Z0daqMvojStilhwIkEURy9ITuPYoKt2blWQY8RY//H1zFnwKg2AJR5PvlWcT\n0JBxt4cHMYy6jW2Q8/ZTVuttPd+UVIDehTFN6oyWF6FBgKxLO5bSjzc=\n-----END RSA PRIVATE KEY-----",
     "issuing_ca": "-----BEGIN CERTIFICATE-----\nMIIFJjCCAw6gAwIBAgIUDUnfHPvwqpztM2lJh40lVUmTjV8wDQYJKoZIhvcNAQEL\nBQAwKzEpMCcGA1UEAwwgc2VsZnNlcnZlX3Byb2R1Y3Rpb25fcGtpIFJvb3QgQ0Ew\nHhcNMTcwODI1MDUwNTEzWhcNMjcwODIzMDUwNTQzWjArMSkwJwYDVQQDDCBzZWxm\nc2VydmVfcHJvZHVjdGlvbl9wa2kgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEBBQAD\nggIPADCCAgoCggIBAM5LpBH9Qyg5VjTkdMj61gt72CVIrqE5s9iD+Bpb2hlLnWdb\n52FtcgCxIRca8kJhCYK53dNVmCP8d7LSzogxdIHyzEe5f405ukJVZIbYEYcA4BLK\n3UU322bYJkTTToABwV+XhlHjLhaze9GLo4snCklxAzafWvqR1C0faB2dPtq5WyQi\n/2uCvGHcpqe/ozNvZON6eYkjQpCwHftR0TwVVb435hvJb6FeeV95MgVq/C0pZFG4\nGLgJNj4GK4BtG2wsIDVMMcaoFrSKfKDqyE+4ekvzYP4nDzbYK5XsgH7/7XB9tL7w\nwMVj0J1mR3TbxVTBZyk509F0oXqBcNb6vvybJevhDlkXMQPgxyOmogm6GUQ3beMX\nsRpN5uotnbWaF0MQbgo8YrgQX3BGrLmKRfk9rIMoBKabptDMRw5Df1ouu5D9Jb3b\n3nlelkRXR5qb0R68CM0S78KqVB32NQsLixQ58YUKmcvlQcaIF9cwC28+LYm4sRq/\nV0tCl68K19PmgZT+Qr0Apakw+vlQ8ojvT+/wTVtg+gphuG7Ovv00xRXa/dpoC3Ff\nOktxUmu3bh4YU/IVCT3+YbwB7vyOfKGTwSmVK+s5gt4MDM65zX58xa85psJI8mqP\nCwKGDleglrAIrHxxg2wKrIibiIriSnjJsKqCzpcm9+6V4zewwQFqdfr1R92rAgMB\nAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW\nBBQNl+8T/jYl1zV4Sct1EKqHBDcUUzANBgkqhkiG9w0BAQsFAAOCAgEAYo+vaKzi\nW2YTogGvuDvWnFzDtRa6zfB1UNqUTiacmr9ISqTDGJPOE7o7+5//31yS63/VuPAb\nsskfjtbywGUcjLEoa//vqDUA5VPQSr2MGpqZItt+QQ7eIQPQEt6IaqohmIxvgyDI\nvV35Ld06slZju9IZJdOx5GyRU49ZrhTciNeHBFJbPTzTWw7swjP1Kj13BJ9++YlU\ndHHnJecMgRPXbbFn8cThcIUwhaTEWFhlC7zc4YUpTm8nmHaCLmG8TM7tYLaymHqd\nypMBa3TrGr4+XIgwkWWb9h9+JnlBXc+aq2pJulErzN3raytzv+iTOwcI+YCufgee\nAf25Zzk9t75KIHjSdqu1U/QXiPSgJgr7o2yrtZbeLT+eMHuhCfbuWduipuRgTlUk\na8hvoiFDabCrlJABDYHNO8WMCIqX9qja0crqA1JbPXAEMiYwdtoU+p27CtNupGVE\nQENamacyYD5VhApTnxACwwakMep0jDYQUXUYTeLz6Aj3vVUJl54/3Uqbh6fxKamh\n8xDeb+HjhO5UKDkfAH0qe17qSGGVftMI3YMPCEqrvnnoVl8VHxpvdVjjJoHEEKoE\ne8mrX4Jp9O3xVcGFItMQQzvWc1A47ewqIy6x+bk+0W8fL6+rKd+8U7aRIvC7LFiw\nluvq3QIacuHULtox36A7HFmlYDQ1ozh+tLI=\n-----END CERTIFICATE-----",
     "destination_host": "desthost"  //only required for the Transaction server. 
    }
    issuing_ca
    Esta clave contiene toda la cadena de certificados de la entidad de certificación (CA).
    Por ejemplo, si el certificado está firmado por un certificado intermedio y el certificado intermedio está firmado por un certificado de CA raíz, se debe incluir tanto el certificado intermedio como el certificado de CA raíz dentro de issuing_ca.
    El orden de estos certificados es de certificado intermedio a certificado raíz.
    Por ejemplo, si hay dos certificados intermedios (I1 y I2) y I1 está firmado directamente por el certificado raíz (R), el orden de estas firmas en issuing_ca es: I2, I1, R.
    Cada certificado debe ser envuelto dentro de "-----BEGIN CERTIFICATE-----" y " -----END CERTIFICATE-----"
    destination_host
    Este parámetro solo es necesario en el archivo JSON para el Transaction server Docker container. El Transaction server utiliza el nombre destination_host para generar SSL dinámico en el WebSphere Application Server que se ejecuta en el contenedor.

Generación de certificados autofirmados

A continuación se muestra un ejemplo generalizado de cómo generar un certificado autofirmado. También puede utilizar su propio método de generación de certificados.

  1. Cree un archivo de configuración para incluir la información del certificado. A continuación encontrará una plantilla para un archivo myconfiguration.conf.
    [req]
    default_bits = 2048
    prompt = no
    default_md = sha256
    req_extensions = req_ext
    distinguished_name = dn
    
    [ dn ]
    C=CA
    ST=Ontario
    L=Toronto
    O=HCL
    OU=Commerce
    emailAddress=emailAddress
    CN = current_domain_name
    
    [ req_ext ]
    basicConstraints = CA:TRUE
    keyUsage = nonRepudiation, digitalSignature, keyEncipherment
    subjectAltName = @alt_names
    
    [ alt_names ]
    DNS.0 = current_domain_name
    DNS.1 = ...
  2. Cree una clave privada. Utilice la clave en el archivo server.key.secure como el par nombre/valor de private_key del archivo JSON.
    openssl genrsa -out server.key.secure 2048
    
  3. Cree un certificado de solicitud con los parámetros del archivo de configuración.
    openssl req -new -key server.key.secure -out server.csr -config myconfiguration.conf
    
  4. Cree un certificado con los parámetros del archivo de configuración. Utilice el certificado en el archivo server.crt como el valor del par nombre/valor de certificate en el archivo JSON. En los certificados autofirmados, este valor también es el issuing_ca.
    openssl x509 -req -days 365 -in server.csr -signkey server.key.secure -out server.crt -extensions req_ext -extfile myconfiguration.conf
    Si está utilizando una entidad emisora de certificados (CA), la CA proporciona el issuing_ca.
  5. Compruebe el archivo de solicitud y el certificado para asegurarse de que SubjectAltName existe.
    openssl req -text -noout -in server.csr
    openssl x509 -in server.crt -text -noout

Cargar los archivos JSON en el directorio /SETUP/certs/custom de un contenedor de Docker

A continuación se muestran tres métodos para copiar los archivos JSON en la imagen de Docker.

  • Puede utilizar los dos siguientes mandatos de Docker para copiar manualmente los archivos JSON en los contenedores y crear el directorio personalizado si todavía no existe.
    docker exec -u 0 container mkdir -p /SETUP/certs/custom/
    docker cp default.json container:/SETUP/certs/custom/
    
  • Puede utilizar la instrucción COPIAR en un Dockerfile para copiar los archivos JSON en el directorio /SETUP/certs/custom y crear una nueva imagen de Docker. Por ejemplo, el siguiente Dockerfile copia un archivo default.json en el directorio /SETUP/certs/custom.
    FROM Docker_registry/commerce/crs-app:source_image_tag
    COPY default.json /SETUP/certs/custom/
  • Puede personalizar el programa de utilidad WCB para empaquetar los archivos JSON en el paquete de personalización de salida. A continuación, cuando cree una nueva imagen de Docker con el paquete de personalización, el script /SETUP/bin/applyCustomization.sh coloca automáticamente los archivos JSON en el directorio /SETUP/certs/custom. Para obtener más información, consulte Personalización de la HCL Commerce Build tool.

La importación de los certificados locales del archivo JSON al contenedor de Docker en ejecución se maneja mediante el script /SETUP/bin/updateLocaCerts.sh que se incluye en todos los contenedores de Docker proporcionados por HCL. El script updateLocalCerts.sh busca en el directorio /SETUP/certs/custom y carga todos los archivos JSON.