Gestion des certificats avec Vault
Par défaut, les conteneurs Docker HCL Commerce prennent en charge de l'utilisation de Vault comme système de gestion des certificats.
Pour plus d'informations, voir Vault.
Certificats internes
Pour la certification interne entre les conteneurs Docker HCL Commerce, vous devez vous assurer que le nom commun (CN) de votre certificat et "SubjectAlternativeName" peuvent correspondre au nom d'hôte que les conteneurs Docker utiliseront. De plus, lorsque d'autres conteneurs source se connectent à un conteneur cible, le conteneur source doit utiliser le nom d'hôte du conteneur cible. Il existe une logique de vérification stricte pour vérifier si le nom d'hôte utilisé dans une requête est le même que SubjectAlternativeName dans le certificat du conteneur cible. Si les noms d'hôte ne correspondent pas, la connexion échoue.
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 vous n'utilisez pas les noms d'hôte par défaut, vous devez reconfigurer les connexions entre les conteneurs. Pour apprendre à créer vos propres certificats, voir Gestion manuelle des certificats. Sinon, vous pouvez utiliser Vault comme autorité de certification (CA).
Configuration de Vault pour agir en tant qu'autorité de certification (CA)
selfserve_production_pki" et le rôle PKI comme "generate-cert". En supposant que Vault est installé, déscellé et que vous avez un environnement doté d'un client Vault qui peut se connecter au serveur Vault avec l'adresse et le jeton appropriés, vous pouvez effectuer les étapes suivantes pour configurer Vault en tant qu'autorité de certification.- Créez un backend de type PKI.
vault secrets enable -path=selfserve_production_pki -description="SelfServe Root CA" -max-lease-ttl=87600h pki - Activez la fonctionnalité PKI de Vault pour agir en tant qu'organisation de l'autorité de certification (CA) pour délivrer des certificats.
- Exécutez la commande pour créer un certificat d'autorité de certification racine.
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 - Exécutez la commande suivante pour créer un rôle qui sera utilisé pour délivrer la certification pour chaque conteneur Docker.
La commande se termine avec un message Réussite ! Les données sont consignées dans : 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
- Exécutez la commande pour créer un certificat d'autorité de certification racine.
- Vérifiez si vous pouvez obtenir la certification de PKI.
Vous devriez recevoir une réponse similaire à la sortie qui suit :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-certKey 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 '''
Démarrage d'un conteneur avec VAULT_CA=true
TENANTENVIRONMENTENVTYPEcontainer_name.DOMAIN_NAME modèle d'application des certifications. Avec ce mode, le nom d'hôte est corrigé. Si ce DOMAIN_NAME n'est pas renseigné, la valeur par défaut est default.svc.cluster.local.Démarrage d'un conteneur avec VAULT_CA=true et CONTAINER_HOSTNAME=customHostName
TENANTENVIRONMENTENVTYPE. Lorsque CONTAINER_HOSTNAME est transféré, la logique de démarrage /SETUP/bin/updateCerts.sh applique la certification interne en fonction du nom d'hôte que vous fournissez. Par exemple, pour commencer Store server Docker container avec le nom d'hôte 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>Certificats externes
Pour une communication SSL sécurisée entre HCL Commerce et un système externe, assurez-vous d'importer les certificats appropriés dans votre magasin de clés et votre magasin de confiance. Assurez-vous également que votre code de personnalisation référence le bon nom de certificat pour cette communication. Vous pouvez placer vos certificats tiers dans Vault pour permettre au script de configuration updateCerts.sh d'importer automatiquement les certificats dans votre magasin de clés.
- Créez un groupement de certificats (certBundle) pour votre certificat externe.Remarque : Si l'objectif d'un groupement de certificats que vous créez est de faire confiance à un certificat affecté à un système externe, vous devez uniquement indiquer issusing_ca. Dans ce cas, les valeurs certificate et private_key peuvent être vides ou entièrement exclues de la définition certBundle.Un certBundle est un objet JSON contenant un certificat, sa clé privée et le certificat ou la chaîne de certificats de l'autorité de certification (CA). Voici un exemple de certBundle.
{ "certificate": "certificate", "private_key": "private_key", "issuing_ca": "ca_certificates" }Le contenu du groupement de certificats est le suivant.- La valeur certificate contient le certificat, au format PEM base64, qui doit être affecté au serveur d'applications HCL Commerce spécifié :
- La valeur de ce certificat doit être encapsulée dans les lignes de texte
-----BEGIN CERTIFICATE-----\net-----END CERTIFICATE-----. - La valeur du certificat ne doit être constituée que d'une ligne de texte et se terminer par un
\n, pour indiquer la fin de la ligne. - Voici un exemple de valeur 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-----
- La valeur de ce certificat doit être encapsulée dans les lignes de texte
- La valeur private_key contient la clé privée correspondant au certificat, et elle est requise pour installer le certificat pour le serveur d'applications HCL Commerce :
- La valeur de ce certificat doit être encapsulée dans les lignes de texte
-----BEGIN RSA PRIVATE KEY-----\net-----END RSA PRIVATE KEY-----. - La valeur du certificat ne doit être constituée que d'une ligne de texte et se terminer par un
\n, pour indiquer la fin de la ligne. - Voici un exemple de valeur certificate.
-----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-----
- La valeur de ce certificat doit être encapsulée dans les lignes de texte
- La valeur issuing_ca contient le certificat de l'autorité de certification (CA) ou la chaîne de certificats de l'autorité de certification qui sont utilisés pour valider le certificat. Par exemple, si le certificat est signé par un certificat de CA intermédiaire, le certificat de CA intermédiaire et son certificat de CA racine doivent être tous deux inclus dans la valeur issuing_ca.
- La valeur de ce certificat doit être encapsulée dans les lignes de texte
-----BEGIN CERTIFICATE-----\net-----END CERTIFICATE-----. - La valeur du certificat ne doit être constituée que d'une ligne de texte et se terminer par un
\n, pour indiquer la fin de la ligne. - Voici un exemple de valeur 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-----
- La valeur de ce certificat doit être encapsulée dans les lignes de texte
- La valeur certificate contient le certificat, au format PEM base64, qui doit être affecté au serveur d'applications HCL Commerce spécifié :
- Ecrivez les données certBundle dans Vault.Important : Chaque certBundle doit avoir un nom unique. Par exemple,
cert1etcert2.Par exemple, la commande curl suivante écrit le contenu du certBundle, cert_bundle_json, dans la définitioncert1sous un client et un environnement spécifiés.curl -sS -X POST -H "X-Vault-Token:<Vault_token>" -d "{\"value\":<cert_bundle_json>}" http://<Vault_IP>:8200/v1/<tenant>/<environment>/certs/cert1 - Indiquez quels certificats certBundle doivent être déployés sur chaque serveur d'applications HCL Commerce.
Pour ce faire, mettez à jour la définition de
certsBundlesur le client et l'environnement spécifiés, {tenant}/{environment}/certsBundle, au format d'objet JSON suivant.{ "tsapp": "cert1,cert2", "crsapp": "cert1,cert2", "searchapp": "cert1,cert2", "xcapp": "cert1,cert2", "storeapp": "cert1,cert2" }Dans cet exemple, les certsBundle
cert1etcert2sont déployés et appliqués dans cinq serveurs d'applications HCL Commerce. - Déployez vos applications HCL Commerce pour appliquer les certificats externes.
Les certificats ne seront pas appliqués par le script d'utilitaire updateCerts.sh sans déploiement pour le déclencher.