Skapa nycklar och certifikat för SSO

Google Workspace erbjuder tjänsten Enkel inloggning (SSO) till kunder med Google Workspace eller Google Workspace for Education. Tjänsten Enkel inloggning i Google Workspace godkänner offentliga nycklar och certifikat som genereras med RSA- eller DSA-algoritmen. Om du vill använda tjänsten måste du generera uppsättningen offentliga och privata nycklar och ett X.509-certifikat som innehåller den offentliga nyckeln. När du har en offentlig nyckel eller ett certifikat måste du registrera det hos Google. Du kan göra detta genom att ladda upp nyckeln eller certifikatet via Googles administratörskonsol.

Hur du genererar nycklar och certifikat beror ofta på vilken utvecklingsplattform och vilket programmeringsspråk du föredrar. Här är flera olika sätt att generera nycklarna och certifikatet som krävs av Google Workspace SSO -tjänsten.

Använda OpenSSL

Det finns många metoder för att skapa offentliga och privata nyckelpar, men OpenSSL-verktyget med öppen källkod är ett av de populäraste. Det har portats till alla större plattformar och har ett enkelt kommandoradsgränssnitt för nyckelgenerering.

Skapa den privata RSA-nyckeln

Privat RSA-nyckelgenerering med OpenSSL omfattar bara ett steg:

openssl genrsa -out rsaprivkey.pem 2048

Det här kommandot genererar en PEM-kodad privat nyckel och lagrar den i filen rsaprivkey.pem. I det här exemplet skapas en 2048-bitars nyckel som bör fungera för nästan alla syften. Den resulterande privata nyckeln ska hållas hemlig och används för att signera och dekryptera data.

Vissa implementeringar, i synnerhet Java-baserade, kan kräva DER eller PKCS8 som till exempel kan genereras med följande ytterligare steg:

  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

Steg 1 skapar den offentliga nyckeln i DER-format.

I steg 2 genereras den privata nyckeln i pkcs8- och DER-format. När du har genererat dem kan du använda nycklarna (rsapubkey.der och rsaprivkey.der).

Skapa en privat DSA-nyckel

DSA-nyckelgenerering omfattar två steg:

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

Det första steget skapar en DSA-parameterfil, dsaparam.pem, som i det här fallet instruerar OpenSSL att skapa en 2048-bitarsnyckel i steg 2. dsaparam.pem-filen är inte en nyckel i sig och kan kasseras när de offentliga och privata nycklarna har skapats. Det andra steget skapar den privata nyckeln i filen dsaprivkey.pem som ska hållas hemlig.

Exportera nyckeln till ett DER-format (binärt) med hjälp av följande steg:

  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

Steg 1 extraherar den offentliga nyckeln till ett DER-format.

I steg 2 konverteras den privata nyckeln till pkcs8- och DER-format. När du har gjort detta kan du använda det offentliga (dsapubkey.der) och privata (dsaprivkey.der) nyckelparet

Skapa ett certifikat

När du har nyckelparet är det enkelt att skapa ett X.509-certifikat. Certifikatet innehåller motsvarande offentliga nyckel och viss metadata som rör organisationen som skapade certifikatet. Följ det här steget för att skapa ett självsignerat certifikat från en privat RSA- eller DSA-nyckel:

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

När du har svarat på ett antal frågor skapas certifikatet och sparas som dsacert.pem. Det här är filen som du laddar upp till Google Workspace via kontrollpanelen när du konfigurerar enkel inloggning.

Skapa ett certifikatfingeravtryck

Vissa program kräver ett X.509-certifikatfingeravtryck i stället för själva X.509-certifikatet. Ett fingeravtryck är ett kondensat av certifikatet i x509 binärt format. Fingeravtryckstypen beror på algoritmen som används för att generera fingeravtrycket, till exempel SHA-1 eller SHA-256.

Om du vill skapa ett SHA-256-fingeravtryck från ett X.509-certifikat använder du följande kommando (ersätt med det faktiska namnet på .pem-filen för certifikatet):

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

Med Microsoft Visual Studio för .NET

Microsoft Visual Studio 2005 innehåller verktyg (i katalogen Common7ToolsBin ) som kan användas för att generera ett certifikat för användning med Google Workspace. Följ stegen nedan för att skapa det offentliga och privata nyckelparet och certifikatet i .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

Som standard används RSA-algoritmen i kommandona ovan. I steg 1 används verktyget Certificate Creation (makecert.exe) för att skapa ett självsignerat X.509-certifikat med namnet testcert.cer och motsvarande privata nyckel.

I steg 2 används verktyget pvk2pfx (pvk2pfx.exe) för att skapa en PFX-fil (Personal Information Exchange) från en CER- och PVK-fil. PFX innehåller både din offentliga och privata nyckel.

testcert.cer-filen som skapades i steg 1 kan laddas upp till Google Workspace med hjälp av kontrollpanelen. testcert.pfx från steg 2 kan användas för att skapa en X509Certificate2-instans (.NET 2.0+) för signering av SAML-svaret.

Med Keytool i Java

Java-utvecklare kan använda verktyget keytool som finns i standard-JDK för att skapa det offentliga/privata nyckelparet och X.509-certifikatet. keytool är ett verktyg för hantering av nycklar och certifikat som gör att användarna kan hantera sina egna offentliga/privata nyckelpar och tillhörande certifikat för användning i autentiserings scheman som kräver digitala signaturer. keytool lagrar nycklar och certifikat i ett nyckellager som i standardimplementeringen helt enkelt är en fil (.keystore) i användarens hemkatalog. Privata nycklar är skyddade med lösenord.

Skapa DSA-nyckelpar

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

I steg 1 genereras ett offentligt/privat nyckelpar med storleken 2 048 och giltighetstiden 180 dagar med hjälp av DSA-algoritmen.

I steg 2 genereras ett X.509-certifikat (dsasso.cer) från den offentliga nyckeln. Du laddar sedan upp dsasso.cer till Google Workspace via kontrollpanelen.

Skapa RSA-nyckelpar

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

I steg 1 genereras ett offentligt/privat nyckelpar med storleken 2 048 och giltighet på 180 dagar med RSA-algoritmen.

I steg 2 genereras ett X.509-certifikat (rsasso.cer) från den offentliga nyckeln. Ladda sedan upp rsasso.cer till Google Workspace via kontrollpanelen.

Använda Java Cryptography Architecture

Java Cryptography Architecture (JCA) tillhandahåller grundläggande klasser och gränssnitt för att generera och manipulera säkerhetsegenskaper. JCA omfattar de delar av Java 2 SDK Security API som är relaterade till kryptografi. Med det här API:et kan du enkelt generera offentliga och privata nyckelpar i önskad algoritm. Nedan finns ett exempel på kod som skapar DSA- eller RSA-nycklar som ska användas med Google Workspace SSO-tjänsten.

Skapa ett offentligt och privat nyckelpar

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

Koden ovan använder KeyPairGenerator för att skapa ett par DSA-nycklar. De genererade nycklarna är i binärt format och skrivs till enskilda filer. När du har nycklarna kan du registrera den offentliga nyckeln hos Google Workspace och använda den privata nyckeln för att signera din SAMLResponse. Om du vill generera ett par RSA-nycklar i stället för DSA behöver du bara ersätta "DSA" i koden med "RSA".

Registrera certifikatet eller den offentliga nyckeln hos Google Workspace

När du har gjort det svåra med att generera nycklar och certifikat är nästa steg väldigt enkelt. Om du vill registrera certifikatet eller den offentliga nyckeln i Google Workspace måste du öppna administratörskonsolen och logga in som administratör. Välj Säkerhet, sedan Konfigurera enkel inloggning (SSO) och fyll i alla fält på sidan under Konfigurera SSO med extern identitetsleverantör.