Ce guide fournit des instructions pour configurer un serveur Apache afin d'utiliser un Clé Cloud HSM pour la signature TLS sur Debian 11 (Bullseye). Vous devrez peut-être modifier ces commandes pour qu'elles fonctionnent avec votre système d'exploitation ou votre distribution Linux.
Vous trouverez une version du plan basée sur Terraform de ce tutoriel dans la dépôt GitHub kms-solutions.
Avant de commencer
Avant de commencer, effectuez la configuration décrite dans Configuration d'OpenSSL
Une fois la configuration d'OpenSSL terminée, assurez-vous qu'une version récente d'Apache est installée :
sudo apt-get update
sudo apt-get install apache2
Configuration
Créer une clé de signature hébergée par Cloud KMS
Créez une clé de signature EC-P256-SHA256
Cloud KMS dans votre projet Google Cloud, dans le trousseau de clés que vous avez précédemment configuré pour OpenSSL :
gcloud kms keys create "KEY_NAME" --keyring "KEY_RING" \
--project "PROJECT_ID" --location "LOCATION" \
--purpose "asymmetric-signing" --default-algorithm "ec-sign-p256-sha256" \
--protection-level "hsm"
Créer un certificat autosigné avec OpenSSL
Générer un certificat autosigné avec l'instance hébergée par Cloud KMS clé de signature. Vous pouvez utiliser OpenSSL pour utiliser un URI PKCS #11 au lieu d'un chemin de fichier. et identifier la clé par son étiquette. Dans la clé Cloud KMS PKCS #11 l'étiquette de clé correspond au nom de la CryptoKey.
openssl req -new -x509 -days 3650 -subj '/CN=CERTIFICATE_NAME/' \
DIGEST_FLAG -engine pkcs11 -keyform engine \
-key PKCS_KEY_TYPE=KEY_IDENTIFIER > PATH_TO_CERTIFICATE
Remplacez les éléments suivants :
CERTIFICATE_NAME
: nom du certificat.DIGEST_FLAG
: algorithme de condensé utilisé par la signature asymétrique . Utilisez-sha256
,-sha384
ou-sha512
selon la clé.PKCS_KEY_TYPE
: type d'identifiant utilisé pour identifier la clé. Pour utiliser la dernière version de clé, utilisezpkcs11:object
avec le nom de la clé. À utilisez une version de clé spécifique, utilisezpkcs11:id
avec l'ID de ressource complet de version de clé.KEY_IDENTIFIER
: identifiant de la clé. Si vous utilisezpkcs11:object
, utilisez le nom de la clé (par exemple,KEY_NAME
). Si vous utilisezpkcs11:id
, indiquez l'ID de ressource complet de la clé ou de la clé. version (par exemple,projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME/cryptoKeyVersions/KEY_VERSION
PATH_TO_CERTIFICATE
: chemin d'accès où vous souhaitez enregistrer le certificat .
Si cette commande échoue, il est possible que PKCS11_MODULE_PATH
ait été défini de manière incorrecte.
vous ne disposez peut-être pas des autorisations nécessaires pour utiliser l'API Cloud KMS
clé de signature.
Vous devriez maintenant avoir un certificat semblable à celui-ci :
-----BEGIN CERTIFICATE-----
...
...
...
-----END CERTIFICATE-----
Configurer le serveur Apache
Créez un répertoire dans
/etc/apache2
pour stocker votre certificat autosigné dans :sudo mkdir /etc/apache2/ssl sudo mv ca.cert /etc/apache2/ssl
Modifiez les fichiers de configuration de l'hôte virtuel
000-default.conf
situés dans/etc/apache2/sites-available
pour fournir le chemin d'accès au fichier de certificat et vous assurer que SSLEngine est activé.Voici un exemple de configuration écoutant sur le port 443 :
<VirtualHost *:443> ServerAdmin webmaster@localhost DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined SSLEngine on SSLCertificateFile /etc/apache2/ssl/ca.cert SSLCertificateKeyFile "PKCS_KEY_TYPE=KEY_IDENTIFIER" </VirtualHost>
Assurez-vous qu'Apache exporte correctement les variables d'environnement en les ajoutant au fichier
/etc/apache2/envvars
à l'aide de l'éditeur de texte de votre choix. Vous devrez peut-être modifier le fichier en tant que racine à l'aide desudo
. Ajoutez les lignes suivantes à la ligne à la fin du fichier:export PKCS11_MODULE_PATH="<var>PATH_TO_LIBKMSP11</var>" export KMS_PKCS11_CONFIG="<var>PATH_TO_PKCS11_CONFIG</var>" export GRPC_ENABLE_FORK_SUPPORT=1
Remplacez les éléments suivants :
PATH_TO_LIBKMSP11
: chemin d'accès àlibkmsp11.so
.PATH_TO_PKCS11_CONFIG
: chemin d'accès àpkcs11-config.yaml
.
GRPC_ENABLE_FORK_SUPPORT
est nécessaire pour que gRPC prenne en charge la duplication et exécute correctement la bibliothèque PKCS #11 de Cloud KMS au sein du serveur Apache.Si vous souhaitez vous authentifier à l'aide d'une clé de compte de service, vous devez également exporter une valeur pour la variable d'environnement
GOOGLE_APPLICATION_CREDENTIALS
.
Exécuter votre serveur
Activez le module SSL Apache, activez la configuration virtualhost et ajoutez une page Web de test dans votre dossier DocumentRoot :
sudo a2enmod ssl
sudo a2ensite 000-default.conf
echo '<!doctype html><html><body><h1>Hello World!</h1></body></html>' | \
sudo tee /var/www/html/index.html
Redémarrez votre serveur Apache et vérifiez que la configuration fonctionne comme prévu en procédant au test avec curl
. L'option --insecure
est nécessaire pour ignorer les vérifications de certificat autosigné.
sudo systemctl restart apache2
curl -v --insecure https://127.0.0.1
Si vous rencontrez des erreurs, le journal d'erreurs Apache est un bon point de départ pour identifier le problème. Les problèmes d'authentification sont une source fréquente d'erreurs. Si des erreurs PERMISSION_DENIED
s'affichent, assurez-vous d'être entièrement authentifié et que le fichier d'identifiants dispose des autorisations appropriées. Pour vous assurer d'être entièrement authentifié, exécutez la commande suivante :
gcloud auth application-default login
Pour confirmer que l'authentification a réussi, le résultat doit inclure le
ligne Credentials saved to file: [/path/to/credentials.json]
.