Cloud KMS に鍵をインポートする前に、PKCS#11 CKM_RSA_AES_KEY_WRAP
スキームを使用してラップする必要があります。このスキームには RSA-OAEP
(デフォルトで OpenSSL 1.1 に含まれている)とパディングによる AES 鍵のラップ(OpenSSL 1.1 には含まれていない)の両方が含まれています。このメカニズムは OpenSSL には含まれていません。
Google Cloud CLI を使用してインポート時に各鍵を自動的にラップすることをおすすめします。コンプライアンスや規制上の要件により、鍵を手動でラップする必要がある場合は、まず OpenSSL を再コンパイルして、パディングによる AES 鍵のラップのサポートを追加する必要があります。OpenSSL をコンパイルした後、鍵を手動でラップできます。
始める前に
システムに組み込まれている OpenSSL バイナリは、このトピックの指示に沿って生成されたパッチ適用済みのバイナリで上書きしないでください。たとえば、パッチを適用した OpenSSL を /usr
に直接インストールしないでください。この手順を正確に行うと、パッチが適用された OpenSSL が $HOME/build
にビルドされ、$HOME/local/bin
にインストールされます。
${HOME}/local/bin
がすでに存在する場合は、その内容をバックアップするか、別の場所に移動してから、このトピックの手順を行ってください。
OpenSSL v1.1.0 のパッチ適用とインストール
鍵を Cloud KMS にインポートする前に OpenSSL を使用して手動でラップする場合は、次のパッチが適用された OpenSSL v1.1.0 が必要です。OpenSSL をコンパイルして、システムのデフォルトの OpenSSL インストールとは別のロケーションにインストールする必要があります。
https://www.openssl.org/source から OpenSSL 1.1.0l リリースのソースをダウンロードします。これは、1.1.0 コード行の最新リリースです。この手順では、v1.1.1 などの新しいバージョンの OpenSSL は使用しないでください。パッチの適用は失敗します。
次のコマンドを使用して、アーカイブを
${HOME}/build/openssl/
に抽出します。 このコマンドは、OpenSSL のバージョンと頻繁に変更されるデフォルト ディレクトリをオーバーライドします。/path/to/downloaded-openssl.tar.gz を、ダウンロードした.tar.gz
アーカイブへのパスに置き換えます。# 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
次のコマンドを使用して、抽出した OpenSSL ソースにカスタムパッチを適用します。パッチは
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
次のコマンドを実行して、パッチが適用されたソースから OpenSSL バイナリとライブラリをビルドし、その有効性をテストして、
${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
システムの OpenSSL インストールを上書きしないように、
--prefix
フラグまたは--openssldir
フラグを省略したり変更したりしないでください。次のコマンドを実行して、新しい OpenSSL バイナリが正常にインストールされたことを確認します。
test -x ${HOME}/local/bin/openssl || echo FAIL
バイナリが正しくインストールされている場合は何も出力されません。
FAIL
が表示された場合は、以前に実行したmake
、make test
、make install
コマンドの出力を確認します。パッチを適用した OpenSSL バイナリは、
${HOME}/local/ssl/lib/
の OpenSSL ライブラリに対して動的にリンクされますが、ld
コマンドはデフォルトではこれらのライブラリをインデックスに登録しません。次のコマンドを実行して、パッチを適用した OpenSSL の CLI を呼び出す前に、パッチを適用したライブラリを${LD_LIBRARY_PATH}
に追加します。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
次のコマンドを使用して、スクリプトが開始する OpenSSL のバージョンが、ビルドしてインストールしたバージョンであることを確認します。
${HOME}/local/bin/openssl.sh version
これで、${HOME}/local/bin/openssl.sh
ラッパー スクリプトから手動で鍵をラップしてインポートが起動できます。