Sleutels en certificaten maken voor SSO

Google Workspace biedt de service voor Single sign-on (SSO) aan klanten met Google Workspace of Google Workspace for Education. De service Single sign-on van Google Workspace accepteert openbare sleutels en certificaten die zijn gegenereerd met het RSA- of DSA-algoritme. Als je de service wilt gebruiken, moet je een set openbare en privésleutels genereren en een X.509-certificaat dat de openbare sleutel bevat. Als je een openbare sleutel of certificaat hebt, moet je deze registreren bij Google. U kunt dit doen door de sleutel of het certificaat te uploaden via de Google Beheerdersconsole.

De manier waarop je sleutels en certificaten genereert, is vaak afhankelijk van je ontwikkelingsplatform en voorkeur voor programmeertaal. Hieronder staan verschillende manieren om de sleutels en het certificaat te genereren die nodig zijn voor de SSO-service van Google Workspace.

Met OpenSSL

Er zijn veel methoden om openbare en privésleutelparen te maken, maar de opensource OpenSSL-tool is een van de populairste. Het is overgezet naar alle grote platforms en biedt een eenvoudige opdrachtregelinterface voor het genereren van sleutels.

De RSA-privésleutel maken

U hoeft slechts één stap uit te voeren om een RSA-privésleutel te genereren met OpenSSL:

openssl genrsa -out rsaprivkey.pem 2048

Met deze opdracht wordt een PEM-gecodeerde privésleutel gegenereerd en opgeslagen in het bestand rsaprivkey.pem. In dit voorbeeld wordt een 2048-bits sleutel gemaakt, die voor bijna elk doel werkt. De resulterende privésleutel moet geheim worden gehouden en wordt gebruikt om gegevens te ondertekenen en te ontsleutelen.

Voor sommige implementaties, met name op Java gebaseerde implementaties, is DER of PKCS8 vereist. Deze kunnen bijvoorbeeld worden gegenereerd met de volgende aanvullende stappen:

  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

Met stap 1 wordt de openbare sleutel in DER-indeling gemaakt.

In stap 2 wordt de privésleutel gegenereerd in de indelingen pkcs8 en DER. Nadat ze zijn gegenereerd, kunt u deze sleutels (rsapubkey.der en rsaprivkey.der) gebruiken.

Een DSA-privésleutel maken

U moet twee stappen uitvoeren om een DSA-sleutel te maken:

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

In de eerste stap wordt een DSA-parameterbestand gemaakt, dsaparam.pem, dat in dit geval OpenSSL de opdracht geeft om in stap 2 een 2048-bits sleutel te maken. Het dsaparam.pem-bestand is zelf geen sleutel en kan worden verwijderd nadat de openbare en privésleutels zijn gemaakt. In de 2e stap wordt de privésleutel gemaakt in het bestand dsaprivkey.pem. Deze moet geheim blijven.

Met de volgende stappen kunt u de sleutel exporteren in DER-indeling (binair):

  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

Met stap 1 wordt de openbare sleutel opgehaald in DER-indeling.

In stap 2 wordt de privésleutel geconverteerd naar de indelingen pkcs8 en DER. Nadat u dit heeft gedaan, kunt u dit openbare (dsapubkey.der) en privésleutelpaar (dsaprivkey.der) gebruiken.

Een certificaat maken

Nadat u een sleutelpaar heeft gemaakt, is het eenvoudig om een X.509-certificaat te maken. Het certificaat bevat de bijbehorende openbare sleutel, samen met enkele metadata over de organisatie die het certificaat heeft gemaakt. Volg deze stap om een zelfondertekend certificaat te maken op basis van een RSA- of DSA-privésleutel:

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

Nadat je een aantal vragen hebt beantwoord, wordt het certificaat gemaakt en opgeslagen als dsacert.pem. Dit is het bestand dat u uploadt naar Google Workspace via het dashboard als u SSO instelt.

Een certificaatvingerafdruk maken

Voor sommige apps is een X.509-certificaatvingerafdruk vereist in plaats van het X.509-certificaat zelf. Een vingerafdruk is een digest van het certificaat in de binaire indeling x509. Het type vingerafdruk is afhankelijk van het algoritme dat is gebruikt om de vingerafdruk te genereren, zoals SHA-1 of SHA-256.

Als u een SHA-256-vingerafdruk wilt maken op basis van een X.509-certificaat, gebruikt u de volgende opdracht (vervang de bestandsnaam van uw werkelijke certificaat .pem):

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

Microsoft Visual Studio gebruiken voor .NET

Microsoft Visual Studio 2005 biedt hulpprogramma's (in de directory Common7ToolsBin) die kunnen worden gebruikt om een certificaat te genereren voor gebruik met Google Workspace. Volg de stappen hieronder om het openbare en privésleutelpaar en het certificaat te maken in .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

Standaard wordt in bovenstaande opdrachten het RSA-algoritme gebruikt. In stap 1 wordt de tool Certificate Creation (makecert.exe) gebruikt om een zelfondertekend X.509-certificaat met de naam testcert.cer en de bijbehorende privésleutel te maken.

In stap 2 wordt de tool pvk2pfx (pvk2pfx.exe) gebruikt om een Personal Information Exchange-bestand (PFX) te maken op basis van een CER- en PVK-bestand. De PFX bevat zowel de openbare als de privésleutel.

Het testcert.cer-bestand dat u in stap 1 heeft gemaakt, kunt u uploaden naar Google Workspace via het dashboard. De testcert.pfx uit stap 2 kunt u gebruiken om een X509Certificate2-instantie (.NET 2.0+) te maken om de SAML-reactie te ondertekenen.

Keytool in Java gebruiken

Java-ontwikkelaars kunnen het hulpprogramma keytool in de standaard JDK gebruiken om het openbare/privésleutelpaar en het X.509-certificaat te maken. keytool is een hulpprogramma voor sleutel- en certificaatbeheer waarmee gebruikers hun eigen openbare/privésleutelparen en bijbehorende certificaten kunnen beheren voor gebruik in verificatieschema's waarvoor digitale handtekeningen zijn vereist. keytool slaat sleutels en certificaten op in een sleutelopslag, die voor de standaardimplementatie gewoon een bestand (.keystore) is in de homedirectory van de gebruiker. Privésleutels worden beveiligd met een wachtwoord.

DSA-sleutelparen maken

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

In stap 1 wordt een openbaar/privé-sleutelpaar gegenereerd met een grootte van 2048 en een geldigheid van 180 dagen met het DSA-algoritme.

In stap 2 wordt een X.509-certificaat (dsasso.cer) gegenereerd op basis van de openbare sleutel. Daarna uploadt u dsasso.cer naar Google Workspace via het dashboard.

RSA-sleutelparen maken

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

In stap 1 wordt een openbaar/privé-sleutelpaar gegenereerd met een grootte van 2048 en een geldigheid van 180 dagen met het RSA-algoritme.

In stap 2 wordt een X.509-certificaat (rsasso.cer) gegenereerd op basis van de openbare sleutel. U uploadt rsasso.cer daarna naar Google Workspace via het dashboard.

Java Cryptography Architecture gebruiken

Java Cryptography Architecture (JCA) biedt kernklassen en interfaces om beveiligingseigenschappen te genereren en te manipuleren. De JCA omvat de delen van de Java 2 SDK Security API die betrekking hebben op cryptografie. Met deze API kun je makkelijk openbare en privésleutelparen genereren in het gewenste algoritme. Hieronder staat een voorbeeldcode waarmee DSA- of RSA-sleutels worden gemaakt die kunnen worden gebruikt met de Google Workspace SSO-service.

Een openbaar/privé-sleutelpaar maken

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

De code hierboven gebruikt de KeyPairGenerator om een paar DSA-sleutels te maken. De gegenereerde sleutels hebben een binaire indeling en worden uitgevoerd naar afzonderlijke bestanden. Als u de sleutels heeft, kunt u de openbare sleutel registreren bij Google Workspace en de privésleutel gebruiken om uw SAMLResponse te ondertekenen. Als je een paar RSA-sleutels wilt genereren in plaats van DSA, hoef je alleen maar "DSA" in de code te vervangen door "RSA".

Uw certificaat of openbare sleutel registreren bij Google Workspace

Nadat je het lastige deel van het genereren van sleutels en certificaten hebt gedaan, is het volgende deel heel eenvoudig. Als u uw certificaat of openbare sleutel wilt registreren bij Google Workspace, gaat u naar de Beheerdersconsole en logt u in als beheerder. Selecteer Beveiliging en dan Single sign-on (SSO) instellen. Vul alle velden op de pagina in onder SSO instellen met identiteitsprovider van derden.