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.
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)
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.- Cree un sistema de fondo de tipo PKI.
vault secrets enable -path=selfserve_production_pki -description="SelfServe Root CA" -max-lease-ttl=87600h pki
- Habilite la característica PKI de Vault para que actúe como entidad certificadora (CA) para emitir certificados.
- 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
- Ejecute el siguiente mandato para crear un rol que se utilizará para emitir la certificación para cada contenedor de Docker.
El mandato se completa con éxito. Datos escritos a: Mensaje selfserve_production_pki/roles/generate-cert.vault write selfserve_production_pki/roles/generate-cert key_bits=2048 max_ttl=8760h allow_any_name=true enforce_hostnames=false
- Ejecute el mandato para crear un certificado de CA raíz.
- Verifique si puede obtener la certificación de PKI.
Debería recibir una respuesta similar a la siguiente salida.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
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
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
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 mycustomstoredocker 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.
- 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 de este certificado debe ajustarse dentro de las líneas de texto
- 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 de este certificado debe ajustarse dentro de las líneas de texto
- 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-----
- El valor de este certificado debe ajustarse dentro de las líneas de texto
- El valor certificate contiene el certificado, en formato PEM base64, que se debe asignar al servidor de aplicaciones HCL Commerce especificado:
- Escriba los datos de certBundle en Vault.Importante: Cada certBundle debe tener un nombre exclusivo. Por ejemplo,
cert1
ycert2
.Por ejemplo, el siguiente comando curl escribe el contenido de certBundle, cert_bundle_json en la definicióncert1
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
- 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
ycert2
se implementan en cinco servidores de aplicaciones de HCL Commerce y se aplican dentro de ellos. - 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.