Generowanie kluczy i certyfikatów do logowania jednokrotnego

Google Workspace oferuje usługę logowania jednokrotnego 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. Aby korzystać z tej usługi, musisz wygenerować zestaw kluczy publicznych i prywatnych oraz certyfikat X.509 zawierający klucz publiczny. Kiedy masz już klucz lub certyfikat publiczny, 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. Poniżej znajdziesz kilka różnych sposobów generowania kluczy i certyfikatów wymaganych przez usługę logowania jednokrotnego w Google Workspace.

Korzystanie z 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 tych kluczy (rsapubkey.derrsaprivkey.der) można z nich korzystać.

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. Drugie polecenie 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 czynności:

  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).

Utwórz certyfikat

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

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

Gdy odpowiesz na kilka pytań, certyfikat zostanie utworzony i zapisany w pliku 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), aby 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

Deweloperzy Java mogą użyć narzędzia keytool znajdującego się w standardowym zestawie JDK, aby utworzyć parę kluczy publiczny/prywatny i certyfikat X.509. keytool to narzędzie do zarządzania kluczami i certyfikatami, które umożliwia użytkownikom administrowanie własnymi parami kluczy publiczny/prywatny i powiązanymi z nimi certyfikatami do użycia w schematach uwierzytelniania wymagających podpisów cyfrowych. keytool przechowuje klucze i certyfikaty w „magazynie kluczy”, który w przypadku domyślnej implementacji jest po prostu plikiem (.keystore) w katalogu domowym 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ć 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 ustawień 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 znajduje się przykładowy kod, który pozwala utworzyć klucze DSA lub RSA potrzebne do korzystania z usługi 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 korzysta z polecenia KeyPairGenerator do utworzenia pary kluczy DSA. Klucze zostaną wygenerowane w formacie binarnym i zapisane w poszczególnych plikach. Po wygenerowaniu kluczy 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ć w kodzie fragment "DSA" ciągiem "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 na stronie w sekcji Skonfiguruj logowanie jednokrotne przy użyciu dostawcy tożsamości od innej firmy.