Mengonfigurasi OpenSSL untuk penggabungan kunci manual

Sebelum dapat mengimpor kunci ke Cloud KMS, kunci harus digabungkan menggunakan skema PKCS#11 CKM_RSA_AES_KEY_WRAP, yang mencakup RSA-OAEP (yang disertakan dalam OpenSSL 1.1 secara default) dan AES Key Wrap dengan Padding (yang tidak termasuk). Mekanisme tersebut tidak disertakan dalam OpenSSL.

Sebaiknya gunakan Google Cloud CLI untuk menggabungkan setiap kunci secara otomatis selama proses impor. Jika Anda harus menggabungkan kunci secara manual karena persyaratan kepatuhan atau peraturan, Anda harus mengompilasi ulang OpenSSL terlebih dahulu guna menambahkan dukungan untuk AES Key Wrap dengan Padding. Setelah mengompilasi ulang OpenSSL, Anda dapat menggabungkan kunci secara manual.

Sebelum memulai

Jangan menimpa biner OpenSSL bawaan sistem Anda dengan biner yang di-patch yang dihasilkan dengan mengikuti prosedur dalam topik ini. Misalnya, jangan menginstal OpenSSL yang di-patch langsung ke /usr. Jika Anda mengikuti prosedur ini dengan tepat, OpenSSL yang di-patch dibangun di $HOME/build dan diinstal ke $HOME/local/bin.

Jika ${HOME}/local/bin sudah ada, cadangkan kontennya atau pindahkan file tersebut ke tempat lain sebelum mengikuti langkah-langkah dalam topik ini.

Mem-patch dan menginstal OpenSSL v1.1.0

Jika Anda memilih menggunakan OpenSSL untuk menggabungkan kunci Anda secara manual sebelum mengimpornya ke Cloud KMS, OpenSSL v1.1.0 diperlukan, dengan patch berikut diterapkan. Anda harus mengompilasi OpenSSL dan menginstalnya ke lokasi yang terpisah dari penginstalan OpenSSL default sistem Anda.

  1. Download sumber untuk rilis OpenSSL 1.1.0l dari https://www.openssl.org/source. Ini adalah rilis terbaru pada baris kode 1.1.0. Jangan gunakan versi OpenSSL yang lebih baru, seperti v1.1.1, dalam prosedur ini. Patch akan gagal diterapkan.

  2. Ekstrak arsip ke ${HOME}/build/openssl/ menggunakan perintah berikut. Perintah ini mengganti direktori default, yang menyertakan versi OpenSSL dan sering berubah. Ganti /path/to/downloaded-openssl.tar.gz dengan jalur ke arsip .tar.gz yang didownload.

    # 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. Terapkan patch kustom ke sumber OpenSSL yang diekstrak, menggunakan perintah berikut.Patch ini mengaktifkan flag 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. Jalankan perintah berikut untuk mem-build biner dan library OpenSSL dari sumber yang di-patch, menguji build untuk validitasnya, dan menginstal biner dan library ke direktori ${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
    

    Jangan menghilangkan atau mengubah tanda --prefix atau --openssldir, untuk memastikan Anda tidak menimpa penginstalan OpenSSL sistem.

  5. Jalankan perintah berikut untuk memastikan biner OpenSSL yang baru berhasil diinstal:

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

    Anda tidak akan melihat output jika biner diinstal dengan benar. Jika Anda melihat FAIL, periksa output perintah make, make test, dan make install yang Anda jalankan sebelumnya.

  6. Biner OpenSSL yang di-patch ditautkan secara dinamis ke library OpenSSL di ${HOME}/local/ssl/lib/, tetapi perintah ld tidak mengindeks library ini secara default. Jalankan perintah berikut untuk membuat skrip wrapper yang menambahkan library yang di-patch ke ${LD_LIBRARY_PATH} sebelum memanggil CLI untuk OpenSSL yang di-patch.

    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. Periksa apakah versi OpenSSL yang dimulai oleh skrip adalah versi yang baru saja Anda buat dan instal, menggunakan perintah berikut:

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

Sekarang Anda dapat memanggil skrip wrapper ${HOME}/local/bin/openssl.sh untuk menggabungkan kunci untuk diimpor secara manual.