Configurer OpenSSL pour l'encapsulation de clés manuelle

Pour pouvoir importer une clé dans Cloud KMS, elle doit être encapsulée à l'aide du schéma PKCS#11 CKM_RSA_AES_KEY_WRAP, qui inclut à la fois RSA-OAEP (inclus dans OpenSSL 1.1 par défaut) et l'encapsulation de clé AES avec remplissage (non inclus). Ce mécanisme n'est pas inclus dans OpenSSL.

Nous vous recommandons d'utiliser la Google Cloud CLI pour encapsuler automatiquement chaque clé lors de l'importation. Si vous devez encapsuler vos clés manuellement en raison de contraintes réglementaires ou de conformité, vous devez d'abord recompiler OpenSSL pour la prise en charge de l'encapsulation de clé AES avec remplissage. Après avoir recompilé OpenSSL, vous pouvez encapsuler la clé manuellement.

Avant de commencer

Ne remplacez pas les fichiers binaires OpenSSL intégrés à votre système par les versions corrigées des fichiers binaires générées en suivant les procédures décrites dans cette rubrique. Par exemple, n'installez pas le correctif OpenSSL directement dans /usr. Si vous suivez rigoureusement cette procédure, la version corrigée OpenSSL est compilée dans $HOME/build et installée dans $HOME/local/bin.

Si ${HOME}/local/bin existe déjà, sauvegardez son contenu ou déplacez ces fichiers ailleurs avant de suivre les étapes décrites dans cette rubrique.

Appliquer le correctif et installer OpenSSL v1.1.0.

Si vous choisissez d'utiliser OpenSSL pour encapsuler manuellement vos clés avant de les importer dans Cloud KMS, OpenSSL v1.1.0 est requis, avec le correctif suivant appliqué. Vous devez compiler OpenSSL et l'installer dans un emplacement distinct de l'installation OpenSSL par défaut de votre système.

  1. Téléchargez la source de la version OpenSSL 1.1.0l depuis l'adresse https://www.openssl.org/source. Il s'agit de la dernière version de la ligne de code 1.1.0. N'utilisez pas une version plus récente d'OpenSSL, telle que la version 1.1.1, dans cette procédure, auquel cas le correctif échouera.

  2. Extrayez l'archive vers ${HOME}/build/openssl/ à l'aide de la commande suivante. Cette commande ignore le répertoire par défaut, qui inclut la version d'OpenSSL et change régulièrement. Remplacez /path/to/downloaded-openssl.tar.gz par le chemin d'accès de l'archive .tar.gz téléchargée.

    # Create the directory for the eventual OpenSSL binaries
    mkdir -p ${HOME}/local/ssl
    
    # Create the build directory
    mkdir -p ${HOME}/build/openssl
    
    # Extract the archive to ${HOME}/build/openssl
    tar xzvf /path/to/downloaded-openssl.tar.gz \
      -C ${HOME}/build/openssl/ \
      --strip-components 1
    
  3. Appliquez un correctif personnalisé à la source OpenSSL extraite, en utilisant les commandes suivantes. Le correctif active l'indicateur EVP_CIPHER_CTX_FLAG_WRAP_ALLOW.

    cd ${HOME}/build
    cat <<-EOF | patch -d . -p0
    --- orig/openssl/apps/enc.c 2020-01-17 14:39:54.991708785 -0500
    +++ openssl/apps/enc.c  2020-01-17 14:41:33.215704269 -0500
    @@ -482,6 +482,7 @@
              */
    
             BIO_get_cipher_ctx(benc, &ctx);
    +   EVP_CIPHER_CTX_set_flags(ctx, EVP_CIPHER_CTX_FLAG_WRAP_ALLOW);
    
             if (!EVP_CipherInit_ex(ctx, cipher, NULL, NULL, NULL, enc)) {
                 BIO_printf(bio_err, "Error setting cipher %s\n",
    EOF
    

  4. Exécutez les commandes suivantes pour créer les binaires et les bibliothèques OpenSSL à partir de la source corrigée, testez la validité de la compilation, et installez les binaires et les bibliothèques dans le répertoire ${HOME}/local.

    CPUS=$(getconf _NPROCESSORS_ONLN)
    cd ${HOME}/build/openssl
    ./config --prefix=${HOME}/local --openssldir=${HOME}/local/ssl
    make -j${CPUS}
    make test
    make install
    

    N'omettez pas ou ne modifiez pas les indicateurs --prefix ou --openssldir, pour vous assurer de ne pas écraser l'installation OpenSSL du système.

  5. Exécutez la commande suivante pour vérifier que le nouveau binaire OpenSSL a bien été installé :

    test -x ${HOME}/local/bin/openssl || echo FAIL
    

    Vous ne devriez voir aucun résultat si les fichiers binaires sont correctement installés. Si FAIL s'affiche, vérifiez le résultat des commandes make, make test et make install que vous avez exécutées précédemment.

  6. Les binaires OpenSSL corrigés sont liés de manière dynamique aux bibliothèques OpenSSL dans ${HOME}/local/ssl/lib/, mais la commande ld ne les indexe pas par défaut. Exécutez les commandes suivantes pour créer un script wrapper qui ajoute les bibliothèques corrigées à ${LD_LIBRARY_PATH} avant d'appeler la CLI pour le correctif OpenSSL.

    cat > ${HOME}/local/bin/openssl.sh <<-EOF
    #!/bin/bash
    env LD_LIBRARY_PATH=${HOME}/local/lib/ ${HOME}/local/bin/openssl "\$@"
    EOF
    chmod u+x ${HOME}/local/bin/openssl.sh
    

  7. Vérifiez que la version d'OpenSSL démarrée par le script correspond à la version que vous venez de créer et d'installer, à l'aide de la commande suivante :

    ${HOME}/local/bin/openssl.sh version
    

Vous pouvez maintenant appeler le script wrapper ${HOME}/local/bin/openssl.sh pour encapsuler manuellement les clés à importer.