כדי לייבא מפתח ל-Cloud KMS, צריך לעטוף אותו באמצעות סכמת PKCS#11
CKM_RSA_AES_KEY_WRAP, שכוללת גם את RSA-OAEP (שנכלל ב-OpenSSL 1.1 כברירת מחדל) וגם את AES Key Wrap with Padding (שלא נכלל). המנגנון הזה לא כלול ב-OpenSSL.
מומלץ להשתמש ב-Google Cloud CLI כדי לעטוף כל מפתח באופן אוטומטי במהלך הייבוא. אם אתם צריכים לבצע עטיפה של המפתחות באופן ידני בגלל דרישות תאימות או דרישות רגולטוריות, אתם צריכים קודם לבצע קומפילציה מחדש של OpenSSL כדי להוסיף תמיכה בעטיפת מפתחות AES עם ריפוד. אחרי הידור מחדש של OpenSSL, אפשר לעטוף את המפתח באופן ידני.
לפני שמתחילים
אל תחליפו את קובצי ה-OpenSSL הבינאריים המובנים במערכת בקובצי ה-OpenSSL הבינאריים המתוקנים שנוצרו בעקבות הפעולות שמתוארות בנושא הזה. לדוגמה, אל תתקינו את OpenSSL עם התיקון ישירות ב-/usr. אם תפעלו בדיוק לפי ההליך הזה, גרסת OpenSSL עם התיקון תיווצר ב-$HOME/build ותותקן ב-$HOME/local/bin.
אם ${HOME}/local/bin כבר קיים, צריך לגבות את התוכן שלו או להעביר את הקבצים למקום אחר לפני שמבצעים את השלבים שמתוארים בנושא הזה.
החלת תיקון והתקנה של OpenSSL v1.1.0
אם אתם בוחרים להשתמש ב-OpenSSL כדי לארוז את המפתחות באופן ידני לפני שאתם מייבאים אותם ל-Cloud KMS, אתם צריכים להשתמש ב-OpenSSL מגרסה 1.1.0 ואילך, עם תיקון ה-patch הבא. תצטרכו לקמפל את OpenSSL ולהתקין אותו במיקום נפרד מההתקנה של OpenSSL שמוגדרת כברירת מחדל במערכת.
מורידים את המקור של גרסת OpenSSL 1.1.0l מהכתובת https://www.openssl.org/source. זו הגרסה האחרונה בשורת הקוד 1.1.0. במהלך התהליך הזה, אל תשתמשו בגרסה חדשה יותר של OpenSSL, כמו גרסה v1.1.1. התיקון ייכשל.
מחזירים את הארכיון אל
${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 שעברו תיקון מקושרים באופן דינמי לספריות OpenSSL ב-
${HOME}/local/ssl/lib/, אבל הפקודהldלא מבצעת אינדוקס של הספריות האלה כברירת מחדל. מריצים את הפקודות הבאות כדי ליצור סקריפט wrapper שמוסיף את הספריות המתוקנות אל${LD_LIBRARY_PATH}לפני הפעלת ה-CLI עבור 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כדי לבדוק שגרסת OpenSSL שהסקריפט מפעיל היא הגרסה שבדיוק יצרתם והתקנתם, משתמשים בפקודה הבאה:
${HOME}/local/bin/openssl.sh version
עכשיו אפשר להפעיל את סקריפט העטיפה ${HOME}/local/bin/openssl.sh כדי לעטוף מפתחות באופן ידני לצורך ייבוא.