Generowanie kluczy i certyfikatów do logowania jednokrotnego

Google Workspace oferuje usługę logowania jednokrotnego (SSO) klientom korzystającym z Google Workspace lub Google Workspace for Education. Usługa logowania jednokrotnego w Google Workspace akceptuje klucze publiczne i certyfikaty wygenerowane za pomocą algorytmu RSA lub DSA. Do korzystania z tej usługi trzeba wygenerować zestaw publicznych i prywatnych kluczy oraz certyfikat X.509 zawierający klucz publiczny. Gdy masz już klucz publiczny lub certyfikat, musisz zarejestrować go w Google. Aby to zrobić, prześlij klucz lub certyfikat przez konsolę administracyjną Google.

Sposób generowania kluczy i certyfikatów często zależy od platformy i języka programowania. Oto kilka sposobów generowania kluczy i certyfikatu potrzebnych do korzystania z usługi logowania jednokrotnego w Google Workspace.

OpenSSL

Istnieje wiele sposobów tworzenia par kluczy publicznych i prywatnych, ale jednym z najpopularniejszych jest użycie narzędzia OpenSSL (oprogramowanie open source). Jest ono dostępne na wszystkich głównych platformach i oferuje prosty interfejs wiersza polecenia służący do generowania kluczy.

Tworzenie klucza prywatnego RSA

Aby wygenerować klucz prywatny RSA za pomocą narzędzia OpenSSL, musisz wykonać tylko jedno polecenie:

openssl genrsa -out rsaprivkey.pem 2048

To polecenie generuje klucz prywatny zakodowany w formacie PEM i zapisuje go w pliku rsaprivkey.pem. W tym przykładzie tworzony jest plik 2048-bitowy, który jest odpowiedni w prawie każdej sytuacji. Wygenerowany klucz prywatny należy przechowywać w tajemnicy. Służy on do podpisywania i odszyfrowywania danych.

Niektóre wdrożenia (w szczególności oparte na języku Java) mogą wymagać kluczy w formatach DER lub PKCS8, które można wygenerować na przykład w ten sposób:

  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

Pierwsze polecenie pozwala wygenerować klucz publiczny w formacie DER.

Drugie polecenie pozwala wygenerować klucz prywatny w formatach PKCS8 i DER. Po wygenerowaniu możesz używać tych kluczy (rsapubkey.der i rsaprivkey.der).

Tworzenie klucza prywatnego DSA

Aby wygenerować klucz DSA, musisz wykonać 2 polecenia:

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

Pierwsze polecenie pozwala utworzyć plik parametrów DSA (dsaparam.pem), który w tym przypadku zleca narzędziu OpenSSL utworzenie 2048-bitowego klucza w drugim poleceniu. Plik dsaparam.pem nie jest kluczem i można go usunąć po utworzeniu klucza publicznego oraz prywatnego. Drugi etap tworzy klucz prywatny w pliku dsaprivkey.pem, który należy przechowywać w tajemnicy.

Aby wyeksportować klucz do formatu DER (binarnego), możesz wykonać następujące polecenia:

  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

Pierwsze polecenie pozwala wyodrębnić klucz publiczny do formatu DER.

Drugie polecenie pozwala przekonwertować klucz prywatny na format PKCS8 i DER. Po wykonaniu tych poleceń możesz używać tej pary kluczy – publicznego (dsapubkey.der) i prywatnego (dsaprivkey.der).

Tworzenie certyfikatu

Gdy masz już parę kluczy, możesz łatwo utworzyć certyfikat X.509. Certyfikat zawiera odpowiedni klucz publiczny oraz metadane dotyczące organizacji, która go utworzyła. Wykonaj to polecenie, aby utworzyć certyfikat podpisany samodzielnie z klucza prywatnego RSA lub DSA:

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

Po udzieleniu odpowiedzi na kilka pytań certyfikat zostanie utworzony i zapisany jako dsacert.pem. Ten plik należy przesłać do Google Workspace przy użyciu panelu sterowania podczas konfigurowania logowania jednokrotnego.

Tworzenie odcisku cyfrowego certyfikatu

Niektóre aplikacje wymagają odcisku cyfrowego certyfikatu X.509, a nie samego certyfikatu. Odcisk cyfrowy to skrót certyfikatu w formacie binarnym x509. Typ odcisku cyfrowego zależy od algorytmu użytego do jego wygenerowania, na przykład SHA-1 lub SHA-256.

Aby utworzyć odcisk cyfrowy SHA-256 z certyfikatu X.509, użyj tego polecenia (podając rzeczywistą nazwę pliku .pem certyfikatu):

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

Microsoft Visual Studio dla .NET

Microsoft Visual Studio 2005 zawiera narzędzia (w katalogu Common7ToolsBin), za pomocą których można wygenerować certyfikat do użytku w Google Workspace. Wykonaj poniższe polecenia, aby utworzyć parę kluczy (publiczny i prywatny) oraz certyfikat w .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

Domyślnie w powyższych poleceniach używany jest algorytm RSA. Pierwsze polecenie korzysta z narzędzia do tworzenia certyfikatu (makecert.exe), by utworzyć podpisany samodzielnie certyfikat X.509 o nazwie testcert.cer i odpowiadający mu klucz prywatny.

Drugie polecenie używa narzędzia pvk2pfx (pvk2pfx.exe) do utworzenia pliku PFX z plików CER i PVK. Plik PFX zawiera klucz publiczny i prywatny.

Plik testcert.cer utworzony w kroku 1 można przesłać do Google Workspace przy użyciu panelu sterowania, a plik testcert.pfx z kroku 2 wykorzystać do utworzenia instancji X509Certificate2 (.NET w wersji 2.0 lub nowszej) do podpisywania odpowiedzi SAML.

Keytool w języku Java

Programiści Java mogą użyć narzędzia keytool znajdującego się w standardowym pakiecie JDK do utworzenia pary kluczy (publicznego i prywatnego) oraz certyfikatu X.509. Narzędzie keytool pozwala użytkownikom zarządzać ich kluczami publicznymi i prywatnymi oraz powiązanymi z nimi certyfikatami na potrzeby schematów uwierzytelniania wymagających podpisów cyfrowych. Narzędzie keytool przechowuje klucze i certyfikaty w „magazynie kluczy”, który w domyślnym wdrożeniu jest plikiem (.keystore) znajdującym się w katalogu głównym użytkownika. Klucze prywatne są chronione hasłami.

Tworzenie par kluczy DSA

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

Pierwsze polecenie pozwala wygenerować parę kluczy (publiczny i prywatny) o rozmiarze 2048 bitów i ważności 180 dni przy użyciu algorytmu DSA.

Drugie polecenie pozwala wygenerować certyfikat X.509 (dsasso.cer) z klucza publicznego. Następnie możesz przesłać plik dsasso.cer do Google Workspace przy użyciu panelu sterowania.

Tworzenie par kluczy RSA

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

Pierwsze polecenie pozwala wygenerować parę kluczy (publiczny i prywatny) o rozmiarze 2048 bitów i ważności 180 dni przy użyciu algorytmu RSA.

Drugie polecenie pozwala wygenerować certyfikat X.509 (rsasso.cer) z klucza publicznego. Następnie możesz przesłać plik rsasso.cer do Google Workspace przy użyciu panelu sterowania.

Java Cryptography Architecture

Java Cryptography Architecture (JCA) oferuje główne klasy i interfejsy do generowania właściwości zabezpieczeń oraz manipulowania nimi. Oprogramowanie JCA obejmuje części interfejsu Security API z pakietu Java 2 SDK związane z kryptografią. Przy użyciu tego interfejsu API można łatwo generować pary kluczy (publicznych i prywatnych) w odpowiednim algorytmie. Poniżej znajdziesz przykładowy kod, który tworzy klucze DSA lub RSA do użycia z usługą logowania jednokrotnego w Google Workspace.

Tworzenie pary kluczy (publicznego i prywatnego)

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();
   }
  }
}

Powyższy kod używa klasy KeyPairGenerator do utworzenia pary kluczy DSA. Wygenerowane klucze będą w formacie binarnym i zostaną zapisane w poszczególnych plikach. Gdy masz już klucze, możesz zarejestrować klucz publiczny w Google Workspace i użyć klucza prywatnego do podpisania SAMLResponse. Aby wygenerować parę kluczy RSA zamiast DSA, wystarczy zastąpić "DSA" w kodzie ciągiem znaków "RSA".

Rejestrowanie certyfikatu lub klucza publicznego w Google Workspace

Gdy wygenerujesz klucze i certyfikaty, następny krok jest naprawdę prosty. Aby zarejestrować certyfikat lub klucz publiczny w Google Workspace, musisz otworzyć konsolę administracyjną i zalogować się jako administrator. Wybierz Zabezpieczenia > Skonfiguruj logowanie jednokrotne (SSO) i wypełnij wszystkie pola w sekcji Skonfiguruj logowanie jednokrotne przy użyciu dostawcy tożsamości od innej firmy.