Mengonfigurasi OpenSSL untuk penggabungan kunci manual

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

Sebaiknya gunakan Google Cloud CLI untuk menggabungkan setiap kunci secara otomatis selama impor. Jika Anda harus menggabungkan kunci secara manual karena persyaratan kepatuhan atau peraturan, Anda harus mengompilasi ulang OpenSSL terlebih dahulu untuk 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 instal OpenSSL yang di-patch langsung ke /usr. Jika Anda mengikuti prosedur ini dengan tepat, OpenSSL yang di-patch akan di-build 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.

Melakukan patch dan menginstal OpenSSL v1.1.0

Jika Anda memilih untuk menggunakan OpenSSL untuk menggabungkan kunci secara manual sebelum mengimpornya ke Cloud KMS, OpenSSL v1.1.0 diperlukan, dengan patch berikut diterapkan. Anda harus mengompilasi OpenSSL dan menginstalnya ke lokasi 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 di 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 validitas build, 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 flag --prefix atau --openssldir, untuk memastikan bahwa Anda tidak menimpa penginstalan OpenSSL sistem.

  5. Jalankan perintah berikut untuk memeriksa apakah biner OpenSSL 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 menginindeks 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. Pastikan versi OpenSSL yang dimulai skrip adalah versi yang baru saja Anda build 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 secara manual untuk impor.