יצירת מפתחות ואישורים ל-SSO

‫Google Workspace מציעה את שירות הכניסה היחידה (SSO) ללקוחות עם Google Workspace או Google Workspace for Education. שירות הכניסה היחידה של Google Workspace מקבל מפתחות ציבוריים ואישורים שנוצרו באמצעות אלגוריתם RSA או DSA. כדי להשתמש בשירות, צריך ליצור קבוצה של מפתחות ציבוריים ופרטיים ואישור X.509 שמכיל את המפתח הציבורי. אחרי שיש לכם מפתח ציבורי או אישור, אתם צריכים לרשום אותו ב-Google. כדי לעשות את זה, פשוט מעלים את המפתח או האישור דרך מסוף Google Admin.

הדרך שבה יוצרים מפתחות ותעודות תלויה בדרך כלל בפלטפורמת הפיתוח ובהעדפות שפה. יש כמה דרכים שונות ליצור את המפתחות והאישור שנדרשים לשירות ה-SSO של Google Workspace.

שימוש ב-OpenSSL

יש הרבה שיטות ליצירת זוגות מפתחות ציבוריים ופרטיים, אבל כלי הקוד הפתוח OpenSSL הוא אחד מהפופולריים ביותר. הוא הועבר לכל הפלטפורמות העיקריות ומספק ממשק פשוט של שורת פקודה ליצירת מפתחות.

יצירת המפתח הפרטי של RSA

כדי ליצור מפתח פרטי של RSA באמצעות OpenSSL, צריך לבצע רק שלב אחד:

openssl genrsa -out rsaprivkey.pem 2048

הפקודה הזו יוצרת מפתח פרטי בקידוד PEM ושומרת אותו בקובץ rsaprivkey.pem. בדוגמה הזו נוצר מפתח של 2048 ביט, שאמור להתאים כמעט לכל מטרה. המפתח הפרטי שנוצר צריך להישמר בסוד, והוא משמש לחתימה על נתונים ולפענוח שלהם.

בהטמעות מסוימות, במיוחד כאלה שמבוססות על Java, יכול להיות שיהיה צורך ב-DER או ב-PKCS8. אפשר ליצור אותם, לדוגמה, באמצעות השלבים הנוספים הבאים:

  1. openssl rsa -in rsaprivkey.pem -pubout -outform DER -out rsapubkey.der
  2. openssl pkcs8 -topk8 -inform PEM -outform DER -in rsaprivkey.pem -out rsaprivkey.der -nocrypt

בשלב 1 נוצר המפתח הציבורי בפורמט DER.

בשלב 2 נוצר המפתח הפרטי בפורמט pkcs8 ו-DER. אחרי שיוצרים את המפתחות, אפשר להשתמש בהם (rsapubkey.der ו-rsaprivkey.der).

יצירת מפתח פרטי של DSA

יצירת מפתח DSA כוללת שני שלבים:

  1. openssl dsaparam -out dsaparam.pem 2048
  2. openssl gendsa -out dsaprivkey.pem dsaparam.pem

בשלב הראשון נוצר קובץ פרמטרים של DSA, ‏ dsaparam.pem, שבמקרה הזה מורה ל-OpenSSL ליצור מפתח של 2048 ביט בשלב 2. הקובץ dsaparam.pem הוא לא מפתח, ואפשר למחוק אותו אחרי שיוצרים את המפתחות הציבוריים והפרטיים. בשלב השני נוצר המפתח הפרטי בקובץ dsaprivkey.pem, שצריך לשמור בסוד.

כדי לייצא את המפתח לפורמט DER (בינארי), אפשר לבצע את השלבים הבאים:

  1. openssl dsa -in dsaprivkey.pem -outform DER -pubout -out dsapubkey.der
  2. openssl pkcs8 -topk8 -inform PEM -outform DER -in dsaprivkey.pem -out dsaprivkey.der -nocrypt

בשלב 1, המפתח הציבורי מחולץ לפורמט DER.

בשלב 2, המפתח הפרטי מומר לפורמט pkcs8 ו-DER. אחרי שתעשו את זה, תוכלו להשתמש בזוג המפתחות הציבורי (dsapubkey.der) והפרטי (dsaprivkey.der)

יצירת אישור

אחרי שיש לכם זוג מפתחות, קל ליצור אישור X.509. האישור מכיל את המפתח הציבורי התואם, יחד עם מטא-נתונים שקשורים לארגון שיצר את האישור. כדי ליצור אישור בחתימה עצמית ממפתח פרטי של RSA או DSA:

openssl req -new -x509 -key dsaprivkey.pem -out dsacert.pem

אחרי שתענו על כמה שאלות, האישור ייווצר ויישמר בתור dsacert.pem. זה הקובץ שמעלים ל-Google Workspace דרך לוח הבקרה כשמגדירים את ה-SSO.

יצירת טביעת אצבע לאישור

באפליקציות מסוימות נדרשת טביעת אצבע לאישור X.509, ולא אישור X.509 עצמו. טביעת אצבע היא תקציר של האישור בפורמט בינארי x509. סוג טביעת האצבע תלוי באלגוריתם שמשמש ליצירת טביעת האצבע, כמו SHA-1 או SHA-256.

כדי ליצור טביעת אצבע מסוג SHA-256 מאישור X.509, משתמשים בפקודה הבאה (ומחליפים את שם הקובץ של האישור בפועל ב-‎ .pem):

openssl x509 -noout -fingerprint -sha256 -inform pem -in "GoogleIDPCertificate-domain.com.pem"

שימוש ב-Microsoft Visual Studio ל-‎ .NET

ב-Microsoft Visual Studio 2005 יש כלי עזר (בספרייה Common7ToolsBin) שאפשר להשתמש בהם כדי ליצור אישור לשימוש ב-Google Workspace. כדי ליצור את זוג המפתחות הציבורי והפרטי ואת האישור ב-‎ .NET, פועלים לפי השלבים הבאים:

  1. makecert -r -pe -n "CN=Test Certificate" -sky exchange -sv testcert.pvk testcert.cer
  2. pvk2pfx -pvk testcert.pvk -spc testcert.cer -pfx testcert.pfx

כברירת מחדל, אלגוריתם RSA משמש בפקודות שלמעלה. בשלב 1 משתמשים בכלי ליצירת אישורים (makecert.exe) כדי ליצור אישור X.509 עם חתימה עצמית בשם testcert.cer ואת המפתח הפרטי התואם.

בשלב 2 משתמשים בכלי pvk2pfx (pvk2pfx.exe) כדי ליצור קובץ Personal Information Exchange ‏ (PFX) מקובץ CER ו-PVK. קובץ ה-PFX מכיל את המפתח הציבורי והמפתח הפרטי שלכם.

אפשר להעלות את הקובץ testcert.cer שנוצר בשלב 1 ל-Google Workspace באמצעות לוח הבקרה, ולהשתמש ב-testcert.pfx משלב 2 כדי ליצור מכונה של X509Certificate2 (‎.NET 2.0+‎) לחתימה על התגובה של SAML.

שימוש ב-Keytool ב-Java

מפתחי Java יכולים להשתמש בכלי keytool שנמצא ב-JDK הרגיל כדי ליצור את זוג המפתחות הציבורי/הפרטי ואת אישור X.509. ‫keytool הוא כלי לניהול מפתחות ואישורים שמאפשר למשתמשים לנהל את זוגות המפתחות הציבוריים/הפרטיים שלהם ואת האישורים המשויכים, לשימוש בסכימות אימות שדורשות חתימות דיגיטליות. ‫keytool מאחסן מפתחות ואישורים ב"מאגר מפתחות", שבברירת המחדל הוא פשוט קובץ (.keystore) בספריית הבית של המשתמש. המפתחות הפרטיים מוגנים באמצעות סיסמאות.

יצירת זוגות מפתחות DSA

  1. keytool -genkey -alias dsassokey -keyalg "DSA" -keysize 2048 -validity 180 -sigalg "SHA256withDSA"
  2. keytool -export -alias dsassokey -file dsasso.cer

בשלב 1 נוצר זוג מפתחות ציבורי/פרטי בגודל 2048 ובתוקף של 180 ימים באמצעות אלגוריתם DSA.

בשלב 2 נוצר אישור X.509‏ (dsasso.cer) מהמפתח הציבורי. לאחר מכן, מעלים את dsasso.cer ל-Google Workspace באמצעות לוח הבקרה.

יצירת זוגות מפתחות RSA

  1. keytool -genkey -alias rsassokey -keyalg "RSA" -keysize 2048 -validity 180
  2. keytool -export -alias rsassokey -file rsasso.cer

בשלב 1 נוצר זוג מפתחות ציבורי/פרטי בגודל 2048 ובתוקף של 180 ימים באמצעות אלגוריתם RSA.

בשלב 2 נוצר אישור X.509‏ (rsasso.cer) מהמפתח הציבורי. לאחר מכן, מעלים את rsasso.cer ל-Google Workspace באמצעות לוח הבקרה.

שימוש בארכיטקטורת הקריפטוגרפיה של Java

ארכיטקטורת הקריפטוגרפיה של Java‏ (JCA) מספקת ממשקים ומחלקות ליבה ליצירה ולשינוי של מאפייני אבטחה. ה-JCA כולל את החלקים של Java 2 SDK Security API שקשורים לקריפטוגרפיה. באמצעות ה-API הזה, אתם יכולים ליצור בקלות זוגות מפתחות ציבוריים ופרטיים באלגוריתם הרצוי. בהמשך מוצג קוד לדוגמה שיוצר מפתחות DSA או RSA לשימוש עם שירות ה-SSO של Google Workspace.

יצירת זוג מפתחות ציבורי ופרטי

import java.io.*;
import java.security.*;

public class KeyGenDSA {

  public static void main(String[] args) {
        try {
          KeyPairGenerator keyGen = KeyPairGenerator.getInstance("DSA");
          SecureRandom random = SecureRandom.getInstanceStrong();
          keyGen.initialize(2048, random);

          KeyPair pair = keyGen.generateKeyPair();
          PrivateKey priv = pair.getPrivate();
          PublicKey pub = pair.getPublic();

          byte[] encPriv = priv.getEncoded();
          FileOutputStream privfos = new FileOutputStream("DSAPrivateKey.key");
          privfos.write(encPriv);
          privfos.close();

          byte[] encPub = pub.getEncoded();
          FileOutputStream pubfos = new FileOutputStream("DSAPublicKey.key");
          pubfos.write(encPub);
          pubfos.close();

   } catch (Exception e) {
         e.printStackTrace();
   }
  }
}

הקוד שלמעלה משתמש ב-KeyPairGenerator כדי ליצור זוג מפתחות DSA. המפתחות שנוצרו יהיו בפורמט בינארי ויופיעו בקבצים נפרדים. אחרי שיוצרים את המפתחות, אפשר לרשום את המפתח הציבורי ב-Google Workspace ולהשתמש במפתח הפרטי כדי לחתום על SAMLResponse. כדי ליצור זוג מפתחות RSA במקום DSA, צריך רק להחליף את "DSA" בקוד ב-"RSA".

רישום האישור או המפתח הציבורי ב-Google Workspace

אחרי שמסיימים את החלק המסובך של יצירת המפתחות והאישורים, החלק הבא ממש פשוט. כדי לרשום את האישור או המפתח הציבורי ב-Google Workspace, צריך להיכנס למסוף Admin כאדמין. בוחרים באפשרות אבטחה, ואז באפשרות הגדרת כניסה יחידה (SSO), וממלאים את כל השדות בדף בקטע הגדרת כניסה יחידה עם ספק זהות של צד שלישי.