ایجاد کلیدها و گواهینامه‌ها برای SSO

گوگل ورک‌اسپیس (Google Workspace) سرویس ورود یکپارچه (SSO) را به مشتریانی که از گوگل ورک‌اسپیس یا گوگل ورک‌اسپیس برای آموزش استفاده می‌کنند، ارائه می‌دهد. سرویس ورود یکپارچه گوگل ورک‌اسپیس، کلیدهای عمومی و گواهی‌های تولید شده با الگوریتم RSA یا DSA را می‌پذیرد. برای استفاده از این سرویس، باید مجموعه‌ای از کلیدهای عمومی و خصوصی و یک گواهی X.509 که حاوی کلید عمومی است را تولید کنید. پس از داشتن کلید عمومی یا گواهی، باید آن را در گوگل ثبت کنید. می‌توانید این کار را با آپلود کردن کلید یا گواهی از طریق کنسول گوگل ادمین خود انجام دهید.

نحوه تولید کلیدها و گواهی‌ها اغلب به پلتفرم توسعه و زبان برنامه‌نویسی مورد علاقه شما بستگی دارد. در اینجا چندین روش مختلف برای تولید کلیدها و گواهی‌های مورد نیاز سرویس SSO گوگل ورک‌اسپیس ارائه شده است.

استفاده از OpenSSL

اگرچه روش‌های زیادی برای ایجاد جفت کلیدهای عمومی و خصوصی وجود دارد، ابزار متن‌باز OpenSSL یکی از محبوب‌ترین‌هاست. این ابزار برای همه پلتفرم‌های اصلی قابل استفاده است و یک رابط خط فرمان ساده برای تولید کلید ارائه می‌دهد.

کلید خصوصی RSA را ایجاد کنید

تولید کلید خصوصی RSA با OpenSSL فقط شامل یک مرحله است:

openssl genrsa -out rsaprivkey.pem 2048

این دستور یک کلید خصوصی رمزگذاری شده با PEM تولید می‌کند و آن را در فایل rsaprivkey.pem ذخیره می‌کند. این مثال یک کلید ۲۰۴۸ بیتی ایجاد می‌کند که تقریباً برای هر منظوری باید کار کند. کلید خصوصی حاصل باید مخفی نگه داشته شود و برای امضا و رمزگشایی داده‌ها استفاده می‌شود.

برخی پیاده‌سازی‌ها، به‌ویژه پیاده‌سازی‌های مبتنی بر جاوا، ممکن است به 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

مرحله ۱ کلید عمومی را با فرمت DER تولید می‌کند.

مرحله ۲ کلید خصوصی را در قالب 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 دستور می‌دهد تا در مرحله ۲ یک کلید ۲۰۴۸ بیتی ایجاد کند. فایل 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

مرحله ۱ کلید عمومی را به فرمت DER استخراج می‌کند.

مرحله ۲ کلید خصوصی را به فرمت pkcs8 و DER تبدیل می‌کند. پس از انجام این کار، می‌توانید از این جفت کلید عمومی ( dsapubkey.der ) و خصوصی ( dsaprivkey.der ) استفاده کنید.

ایجاد گواهی

وقتی جفت کلید خود را داشته باشید، ایجاد گواهی X.509 آسان است. گواهی، کلید عمومی مربوطه را به همراه برخی فراداده‌های مربوط به سازمانی که گواهی را ایجاد کرده است، در خود جای داده است. برای ایجاد یک گواهی خودامضا از کلید خصوصی RSA یا DSA، این مرحله را دنبال کنید:

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

پس از پاسخ به تعدادی سوال، گواهی ایجاد و با نام dsacert.pem ذخیره می‌شود. این فایلی است که هنگام پیکربندی SSO از طریق کنترل پنل در Google Workspace آپلود می‌کنید.

ایجاد اثر انگشت گواهی

برخی از برنامه‌ها به جای خود گواهی 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"

استفاده از مایکروسافت ویژوال استودیو برای دات نت

مایکروسافت ویژوال استودیو ۲۰۰۵ ابزارهایی (در دایرکتوری 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 در دستورات بالا استفاده می‌شود. مرحله ۱ از ابزار ایجاد گواهی ( makecert.exe ) برای ایجاد یک گواهی X.509 خودامضا شده به نام testcert.cer و کلید خصوصی مربوطه استفاده می‌کند.

مرحله ۲ از ابزار pvk2pfx ( pvk2pfx.exe ) برای ایجاد یک فایل تبادل اطلاعات شخصی (PFX) از یک فایل CER و PVK استفاده می‌کند. PFX شامل کلید عمومی و خصوصی شما است.

فایل testcert.cer ایجاد شده در مرحله ۱ را می‌توان با استفاده از کنترل پنل در Google Workspace آپلود کرد؛ و testcert.pfx از مرحله ۲ را می‌توان برای ایجاد یک نمونه X509Certificate2 (.NET 2.0+) برای امضای پاسخ SAML استفاده کرد.

استفاده از Keytool در جاوا

توسعه‌دهندگان جاوا می‌توانند از ابزار keytool موجود در JDK استاندارد برای ایجاد جفت کلید عمومی/خصوصی و گواهی X.509 استفاده کنند. keytool یک ابزار مدیریت کلید و گواهی است که به کاربران اجازه می‌دهد جفت کلید عمومی/خصوصی خود و گواهی‌های مرتبط را برای استفاده در طرح‌های احراز هویت که نیاز به امضاهای دیجیتال دارند، مدیریت کنند. keytool کلیدها و گواهی‌ها را در یک "keystore" ذخیره می‌کند که برای پیاده‌سازی پیش‌فرض، صرفاً یک فایل ( .keystore ) در دایرکتوری خانگی کاربر است. کلیدهای خصوصی با رمزهای عبور محافظت می‌شوند.

ایجاد جفت کلیدهای DSA

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

مرحله ۱ با استفاده از الگوریتم DSA یک جفت کلید عمومی/خصوصی با اندازه ۲۰۴۸ و اعتبار ۱۸۰ روز تولید می‌کند.

مرحله ۲ یک گواهی 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

مرحله ۱ با استفاده از الگوریتم RSA یک جفت کلید عمومی/خصوصی با اندازه ۲۰۴۸ و اعتبار ۱۸۰ روز تولید می‌کند.

مرحله ۲ یک گواهی X.509 ( rsasso.cer ) از کلید عمومی تولید می‌کند. سپس می‌توانید rsasso.cer با استفاده از کنترل پنل در Google Workspace آپلود کنید .

استفاده از معماری رمزنگاری جاوا

معماری رمزنگاری جاوا (JCA) کلاس‌ها و رابط‌های اصلی را برای تولید و دستکاری ویژگی‌های امنیتی فراهم می‌کند. JCA بخش‌هایی از API امنیتی Java 2 SDK مربوط به رمزنگاری را در بر می‌گیرد. با استفاده از این 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، باید به کنسول مدیریت بروید و به عنوان مدیر وارد شوید. گزینه Security و سپس Set up single sign-on (SSO) را انتخاب کنید و تمام فیلدهای صفحه زیر Setup SSO with third party identity provider را پر کنید.