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:
openssl rsa -in rsaprivkey.pem -pubout -outform DER -out rsapubkey.deropenssl 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:
openssl dsaparam -out dsaparam.pem 2048openssl 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:
openssl dsa -in dsaprivkey.pem -outform DER -pubout -out dsapubkey.deropenssl 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:
makecert -r -pe -n "CN=Test Certificate" -sky exchange -sv testcert.pvk testcert.cerpvk2pfx -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
keytool -genkey -alias dsassokey -keyalg "DSA" -keysize 2048 -validity 180 -sigalg "SHA256withDSA"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
keytool -genkey -alias rsassokey -keyalg "RSA" -keysize 2048 -validity 180keytool -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.