Gestionar certificados con Vault

De forma predeterminada, los contenedores de Docker de HCL Commerce permiten usar Vault como sistema de gestión de certificados.

Para obtener más información sobre Vault, consulte Vault.

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, deberá volver a configurar las conexiones entre contenedores. Para obtener información sobre cómo crear sus propios certificados, consulte Gestionar certificados. De lo contrario, puede utilizar Vault como la autoridad de certificación (CA).

Configurar Vault para que actúe como autoridad de certificación (CA)

Puede configurar Vault como un CA con un sistema de fondo PKI. Si desea utilizar este método, debe codificar el nombre de fondo de PKI como 'selfserve_production_pki' y el rol de PKI como 'generate-cert'. Suponiendo que tiene instalado Vault, no sellado y un entorno que tiene un cliente de Vault que puede conectarse al servidor de Vault con la dirección y señal correctas, puede realizar los siguientes pasos para configurar Vault como CA.
  1. Cree un sistema de fondo de tipo PKI.
    vault secrets enable -path=selfserve_production_pki -description="SelfServe Root CA" -max-lease-ttl=87600h pki 
  2. Habilite la característica PKI de Vault para que actúe como entidad certificadora (CA) para emitir certificados.
    1. Ejecute el mandato para crear un certificado de CA raíz.
      vault write selfserve_production_pki/root/generate/internal  common_name="selfserve_production_pki Root CA"  ttl=87600h  key_bits=4096  exclude_cn_from_sans=true
    2. Ejecute el siguiente mandato para crear un rol que se utilizará para emitir la certificación para cada contenedor de Docker.
      vault write selfserve_production_pki/roles/generate-cert key_bits=2048 max_ttl=8760h allow_any_name=true enforce_hostnames=false
      El mandato se completa con éxito. Datos escritos a: Mensaje selfserve_production_pki/roles/generate-cert.
  3. Verifique si puede obtener la certificación de PKI.
    curl -sS -X POST -H "X-Vault-Token:<Vault_token>" -d "{\"common_name\":\"<common_name>\", \"ttl\":\"1344h\"}" http://<Vault_IP>:8200/v1/selfserve_production_pki/issue/generate-cert
    Debería recibir una respuesta similar a la siguiente salida.
    Key Value
    --- -----
    lease_id cuddletech_ops/issue/web_server/e03318f2-d005-8196-4ed5-a42f9cd55238
    lease_duration 2591999
    lease_renewable false
    certificate -----BEGIN CERTIFICATE-----
    MIIE7jCCAtagAwIBAgIUN+vXFuIf42v1SW+mDROUVAm+lUMwDQYJKoZIhvcNAQEL
    BQAwKTEnMCUGA1UEAxMeQ3VkZGxldGVjaCBPcHMgSW50ZXJtZWRpYXRlIENBMB4X
    DTE2MDcwOTA5MzE1N1oXDTE2MDgwODA5MzIyN1owIjEgMB4GA1UEAwwXc3NsX3Rl
    ...
    issuing_ca -----BEGIN CERTIFICATE-----
    MIIF5DCCA8ygAwIBAgIUdhJTQb4YmCyhUUr48L20o0R+dFkwDQYJKoZIhvcNAQEL
    ...
    private_key -----BEGIN RSA PRIVATE KEY-----
    MIIEowIBAAKCAQEApBabDpPZIloRQUpro3tQEls0FEFvsvfraQzQJLD2dicSPZ2s
    CqYyT8OXMclrapG7KKTYp79AaTW8LgNg3WvCzoMGDfhLL9m0QomzrMDzoW8Q7iQO
    1MV4f6JXjGMbOMMXatKQlO32fLZln8m+/yJ3pOW0S6uatFzZ/N3+ed+gDuUc7eAO
    ...
    private_key_type rsa
    serial_number 37:eb:d7:16:e2:1f:e3:6b:f5:49:6f:a6:0d:13:94:54:09:be:95:43
    '''

Inicio de un contenedor con VAULT_CA=true

Después de configurar Vault como CA, puede iniciar el contenedor con el parámetro VAULT_CA=true . Utilice este método en una plataforma de orquestación de Docker como, por ejemplo, Kubernetes. Cuando VAULT_CA=true, los scripts siguen el
TENANTENVIRONMENTENVTYPEcontainer_name.DOMAIN_NAME
patrón para aplicar las certificaciones. Con esta modalidad, el nombre de host es fijo. Si no proporciona un DOMAIN_NAME, el valor predeterminado es default.svc.cluster.local.

Iniciar un contenedor con VAULT_CA=true pero sin CONTAINER_HOSTNAME=customHostName

A partir de la versión 9.0.0.2 de HCL Commerce, puede iniciar el contenedor con VAULT_CA=true y CONTAINER_HOSTNAME=customHostName. Utilice este método en su propio entorno personalizado en el que no tenga TENANTENVIRONMENTENVTYPE. Cuando se pasa CONTAINER_HOSTNAME, la lógica de inicio de /SETUP/bin/updateCerts.sh aplica la certificación interna basándose en el nombre de host que usted proporcione. Por ejemplo, para iniciar el Store server Docker container con el nombre de host mycustomstore
docker run -d -e LICENSE=accept  \
    -e SPIUSER_NAME=spiuser \
    -e SPIUSER_PWD=<Your spiuser password that you encrypted with wcs_encrypt.sh>
    -e VAULT_TOKEN=<vault_token > \
    -e VAULT_URL=<vault_url. For example, http://IP:Port/v1> \
    -e VAULT_CA=true \  
    -e CONTAINER_HOSTNAME=mycustomstore    
    <Store_Docker_Image>

Certificados externos

Para una comunicación SSL segura entre HCL Commerce y un sistema externo, asegúrese de importar los certificados adecuados en su almacén de claves y almacén de confianza. Asegúrese también de que el código de personalización hace referencia al nombre de certificado correcto para esa comunicación. Puede colocar sus certificados de terceros en Vault para permitir que el script de configuración updateCerts.sh importe automáticamente cualquier certificado en el almacén de claves.

Para incluir certificados externos:
  1. Cree un paquete de certificados (certBundle) para su certificado externo.
    Nota: Si el propósito de un paquete de certificados que está creando es confiar en un certificado asignado para un sistema externo, solo se debe especificar issusing_ca. En este caso, los valores certificate y private_key pueden estar vacíos o quedar fuera de la definición certBundle por completo.
    Un certBundle es un objeto JSON que contiene un certificado, su clave privada y el certificado o la cadena de certificados de la entidad de certificación (CA). Un ejemplo de un certBundle es el siguiente.
    { 
     "certificate": "certificate", 
     "private_key": "private_key", 
     "issuing_ca": "ca_certificates" 
    } 
    El contenido del paquete de certificados es el siguiente.
    • El valor certificate contiene el certificado, en formato PEM base64, que se debe asignar al servidor de aplicaciones HCL Commerce especificado:
      • El valor de este certificado debe ajustarse dentro de las líneas de texto -----BEGIN CERTIFICATE-----\n y -----END CERTIFICATE-----.
      • El valor del certificado debe ser solo una línea de texto y terminar en \n, para denotar el final de la línea.
      • Un ejemplo del valor certificate es el siguiente.
        -----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-----
    • El valor private_key contiene la clave privada que coincide con el certificado y es necesario instalar el certificado para el servidor de aplicaciones de HCL Commerce:
      • El valor de este certificado debe ajustarse dentro de las líneas de texto -----BEGIN RSA PRIVATE KEY-----\n y -----END RSA PRIVATE KEY-----.
      • El valor del certificado debe ser solo una línea de texto y terminar en \n, para denotar el final de la línea.
      • Un ejemplo del valor certificate es el siguiente.
        -----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-----
    • El valor issuing_ca contiene el certificado de entidad de certificación (CA), o cadena de certificados de entidad de certificación, que se utilizan para validar el certificado. Por ejemplo, si el certificado está firmado por un certificado de CA intermedio, tanto el certificado de CA intermedio como su certificado de CA raíz deben incluirse dentro del valor issuing_ca.
      • El valor de este certificado debe ajustarse dentro de las líneas de texto -----BEGIN CERTIFICATE-----\n y -----END CERTIFICATE-----.
      • El valor del certificado debe ser solo una línea de texto y terminar en \n, para denotar el final de la línea.
      • Un ejemplo del valor issuing_ca es el siguiente.
        -----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-----
  2. Escriba los datos de certBundle en Vault.
    Importante: Cada certBundle debe tener un nombre exclusivo. Por ejemplo, cert1 y cert2.
    Por ejemplo, el siguiente comando curl escribe el contenido de certBundle, cert_bundle_json en la definición cert1 de un inquilino y entorno especificados.
    curl -sS -X POST -H "X-Vault-Token:<Vault_token>" -d "{\"value\":<cert_bundle_json>}" http://<Vault_IP>:8200/v1/<tenant>/<environment>/certs/cert1 
  3. Especifique qué certificados certBundle se deben implementar en cada servidor de aplicaciones de HCL Commerce.

    Esto se hace actualizando la definición de certsBundle en el inquilino y el entorno especificados, {tenant}/{environment}/certsBundle, con el siguiente formato de objeto JSON.

    { 
        "tsapp": "cert1,cert2", 
        "crsapp": "cert1,cert2", 
        "searchapp": "cert1,cert2", 
        "xcapp": "cert1,cert2", 
        "storeapp": "cert1,cert2" 
    } 

    En este ejemplo, certsBundle cert1 y cert2 se implementan en cinco servidores de aplicaciones de HCL Commerce y se aplican dentro de ellos.

  4. Implemente las aplicaciones de HCL Commerce para aplicar los certificados externos.

    El script de utilidad de updateCerts.sh no aplicará certificados sin una implementación para desencadenarlo.