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 przy użyciu algorytmu RSA lub DSA. Aby korzystać z usługi, musisz wygenerować zestaw kluczy publicznych i prywatnych oraz certyfikat X.509 zawierający klucz publiczny. Gdy masz już klucz publiczny lub certyfikat, musisz zarejestrować go w Google. Możesz to zrobić, przesyłając klucz lub certyfikat w konsoli administracyjnej Google.

Sposób generowania kluczy i certyfikatów często zależy od platformy programistycznej i preferowanych ustawień języka programowania. Oto kilka sposobów generowania kluczy i certyfikatu wymaganych przez usługę logowania jednokrotnego Google Workspace.

OpenSSL

Istnieje wiele metod tworzenia par kluczy publicznych i kluczy prywatnych, ale jednym z najpopularniejszych narzędzi jest OpenSSL typu open source. Został przeniesiony na wszystkie główne platformy i udostępnia prosty interfejs wiersza poleceń 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 klucz 2048-bitowy, który powinien działać w niemal każdym przypadku. Powstały klucz prywatny powinien być przechowywany w tajemnicy i jest używany do podpisywania i odszyfrowywania danych.

Niektóre implementacje, zwłaszcza te oparte na języku Java, mogą wymagać formatu DER lub PKCS8, który można wygenerować, wykonując te dodatkowe czynności:

  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.

W kroku 2 wygenerujesz klucz prywatny w formacie 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

W pierwszym kroku tworzony jest plik parametrów DSA dsaparam.pem, który w tym przypadku instruuje OpenSSL, aby w kroku 2 utworzyć klucz 2048-bitowy. Plik dsaparam.pem nie jest kluczem i można go usunąć po utworzeniu kluczy publicznych i prywatnych. Drugi krok polega na utworzeniu klucza prywatnego w pliku dsaprivkey.pem, który powinien być przechowywany w bezpiecznym miejscu.

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.

Krok 2 konwertuje klucz prywatny na format pkcs8 i DER. Gdy to zrobisz, 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 utworzyła certyfikat. Aby utworzyć certyfikat z podpisem własnym z klucza prywatnego RSA lub DSA, wykonaj te czynności:

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

Po udzieleniu odpowiedzi na kilka pytań certyfikat zostanie utworzony i zapisany jako dsacert.pem. Jest to plik, który przesyłasz do Google Workspace za pomocą panelu sterowania podczas konfigurowania logowania jednokrotnego.

Tworzenie odcisku cyfrowego certyfikatu

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

Aby utworzyć odcisk cyfrowy SHA-256 z certyfikatu X.509, użyj tego polecenia (zastępując 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 udostępnia narzędzia (w katalogu Common7ToolsBin), których można użyć do wygenerowania certyfikatu do wykorzystania w Google Workspace. Aby utworzyć parę kluczy publicznego i prywatnego oraz certyfikat w .NET, wykonaj te czynności:

  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. W kroku 1 używane jest narzędzie do tworzenia certyfikatów (makecert.exe), które tworzy podpisany samodzielnie certyfikat X.509 o nazwie testcert.cer i odpowiedni klucz prywatny.

W kroku 2 używane jest narzędzie pvk2pfx (pvk2pfx.exe) do utworzenia pliku PFX (Personal Information Exchange) z plików CER i PVK. Plik PFX zawiera zarówno klucz publiczny, jak i prywatny.

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

Keytool w języku Java

Programiści Java mogą używać narzędzia keytool, które znajduje się w standardowym pakiecie JDK, do tworzenia pary kluczy publiczny/prywatny i certyfikatu X.509. keytool to narzędzie do zarządzania kluczami i certyfikatami, które umożliwia użytkownikom administrowanie własnymi parami kluczy publicznych/prywatnych i powiązanymi certyfikatami do wykorzystania w schematach uwierzytelniania wymagających podpisów cyfrowych. keytool przechowuje klucze i certyfikaty w „magazynie kluczy”, który w 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

Krok 1 generuje parę kluczy publiczny/prywatny o rozmiarze 2048 i ważności 180 dni przy użyciu algorytmu DSA.

W kroku 2 generowany jest certyfikat X.509 (dsasso.cer) z klucza publicznego. Następnie przesyłasz plik dsasso.cer do Google Workspace za pomocą 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

Krok 1 generuje parę kluczy (publiczny i prywatny) o rozmiarze 2048 i ważności 180 dni przy użyciu algorytmu RSA.

W kroku 2 generowany jest certyfikat X.509 (rsasso.cer) z klucza publicznego. Następnie prześlij plik rsasso.cer do Google Workspace za pomocą panelu sterowania.

Java Cryptography Architecture

Java Cryptography Architecture (JCA) udostępnia podstawowe klasy i interfejsy do generowania właściwości zabezpieczeń i manipulowania nimi. JCA obejmuje części interfejsu Java 2 SDK Security API związane z kryptografią. Za pomocą tego interfejsu API możesz łatwo generować pary kluczy publicznych i prywatnych w wybranym algorytmie. Poniżej znajdziesz przykładowy kod, który tworzy klucze DSA lub RSA do użycia z usługą logowania jednokrotnego 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 KeyPairGenerator do utworzenia pary kluczy DSA. Wygenerowane klucze będą w formacie binarnym i zostaną zapisane w osobnych plikach. Gdy masz 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 "RSA".

Rejestrowanie certyfikatu lub klucza publicznego w Google Workspace

Gdy już wykonasz trudną część, czyli wygenerujesz klucze i certyfikaty, następna część będzie naprawdę prosta. Aby zarejestrować certyfikat lub klucz publiczny w Google Workspace, musisz przejść do konsoli administracyjnej i zalogować się jako administrator. Wybierz Zabezpieczenia, a następnie Konfigurowanie logowania jednokrotnego (SSO) i wypełnij wszystkie pola na stronie w sekcji Skonfiguruj logowanie jednokrotne przy użyciu zewnętrznego dostawcy tożsamości.