Schlüssel und Zertifikate für die Einmalanmeldung (SSO) generieren

Google Workspace bietet Kunden mit Google Workspace oder Google Workspace for Education den Dienst „Einmalanmeldung“ (SSO) an. Der Dienst Einmalanmeldung (SSO) von Google Workspace akzeptiert öffentliche Schlüssel und Zertifikate, die mit dem RSA- oder DSA-Algorithmus generiert wurden. Wenn Sie den Dienst verwenden möchten, müssen Sie einen Satz öffentlicher und privater Schlüssel sowie ein X.509-Zertifikat generieren, das den öffentlichen Schlüssel enthält. Sobald Sie einen öffentlichen Schlüssel oder ein Zertifikat haben, müssen Sie ihn bzw. es bei Google registrieren. Dazu laden Sie den Schlüssel oder das Zertifikat einfach über die Admin-Konsole hoch.

Die Art und Weise, wie Sie Schlüssel und Zertifikate generieren, hängt oft von Ihrer Entwicklungsplattform und Ihrer bevorzugten Programmiersprache ab. Hier sind verschiedene Möglichkeiten zum Generieren der Schlüssel und des Zertifikats, die für den Google Workspace-SSO-Dienst erforderlich sind.

OpenSSL

Es gibt viele Methoden zum Erstellen von öffentlichen und privaten Schlüsselpaaren. Das Open-Source-Tool OpenSSL ist eine der beliebtesten. Es wurde auf alle gängigen Plattformen portiert und bietet eine einfache Befehlszeile für die Schlüsselgenerierung.

Privaten RSA-Schlüssel erstellen

Ein privater RSA-Schlüssel lässt sich mit OpenSSL in nur einem Schritt generieren:

openssl genrsa -out rsaprivkey.pem 2048

Mit diesem Befehl wird ein PEM-codierter privater Schlüssel generiert und in der Datei rsaprivkey.pem gespeichert. In diesem Beispiel wird ein 2048-Bit-Schlüssel erstellt, der für fast jeden Zweck geeignet sein sollte. Der resultierende private Schlüssel sollte geheim gehalten werden und wird zum Signieren und Entschlüsseln von Daten verwendet.

Einige Implementierungen, insbesondere Java-basierte, erfordern möglicherweise DER oder PKCS8, die beispielsweise mit den folgenden zusätzlichen Schritten generiert werden können:

  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

In Schritt 1 wird der öffentliche Schlüssel im DER-Format generiert.

In Schritt 2 wird der private Schlüssel im pkcs8- und DER-Format generiert. Nachdem Sie diese Schlüssel (rsapubkey.der und rsaprivkey.der) generiert haben, können Sie sie verwenden.

Privaten DSA-Schlüssel erstellen

Ein DSA-Schlüssel wird in zwei Schritten erstellt:

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

Im ersten Schritt wird eine DSA-Parameterdatei (dsaparam.pem) erstellt, die OpenSSL in diesem Fall anweist, in Schritt 2 einen 2048-Bit-Schlüssel zu erstellen. Die Datei dsaparam.pem ist selbst kein Schlüssel und kann nach dem Erstellen der öffentlichen und privaten Schlüssel verworfen werden. Im zweiten Schritt wird der private Schlüssel in der Datei dsaprivkey.pem erstellt, die geheim gehalten werden sollte.

Gehen Sie folgendermaßen vor, um den Schlüssel in ein binäres Format (DER) zu exportieren:

  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

In Schritt 1 wird der öffentliche Schlüssel in ein DER-Format extrahiert.

In Schritt 2 wird der private Schlüssel in das pkcs8- und DER-Format konvertiert. Anschließend können Sie dieses Schlüsselpaar mit öffentlichem (dsapubkey.der) und privatem (dsaprivkey.der) Schlüssel verwenden.

Zertifikat erstellen

Wenn Sie das Schlüsselpaar haben, lässt sich ganz einfach ein X.509-Zertifikat erstellen. Das Zertifikat enthält den entsprechenden öffentlichen Schlüssel sowie einige Metadaten zur Organisation, die das Zertifikat erstellt hat. Führen Sie diesen Schritt aus, um ein selbst signiertes Zertifikat aus einem privaten RSA- oder DSA-Schlüssel zu erstellen:

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

Nachdem Sie eine Reihe von Fragen beantwortet haben, wird das Zertifikat erstellt und als dsacert.pem gespeichert. Diese Datei laden Sie bei der Konfiguration der Einmalanmeldung (SSO) über das Steuerfeld in Google Workspace hoch.

Zertifikatfingerabdruck erstellen

Einige Anwendungen erfordern einen X.509-Zertifikat-Fingerabdruck anstelle des X.509-Zertifikats selbst. Ein Fingerabdruck ist ein Digest des Zertifikats im x509-Binärformat. Der Fingerabdrucktyp hängt vom Algorithmus ab, der zum Generieren des Fingerabdrucks verwendet wird, z. B. SHA-1 oder SHA-256.

Verwenden Sie den folgenden Befehl, um einen SHA-256-Fingerabdruck aus einem X.509-Zertifikat zu erstellen .Ersetzen Sie dabei den Platzhalter durch den tatsächlichen Namen der PEM-Datei des Zertifikats:

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

Microsoft Visual Studio .NET

Microsoft Visual Studio 2005 bietet Dienstprogramme (im Verzeichnis Common7ToolsBin), mit denen Sie ein Zertifikat für die Verwendung mit Google Workspace generieren können. So erstellen Sie das öffentliche und private Schlüsselpaar und das Zertifikat 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

In den oben stehenden Befehlen wird standardmäßig der RSA-Algorithmus verwendet. In Schritt 1 wird das Tool zur Zertifikatserstellung (makecert.exe) verwendet, um ein selbst signiertes X.509-Zertifikat mit dem Namen testcert.cer und den entsprechenden privaten Schlüssel zu erstellen.

In Schritt 2 wird das Tool pvk2pfx (pvk2pfx.exe) verwendet, um eine PFX-Datei (Personal Information Exchange) aus einer CER- und einer PVK-Datei zu erstellen. Die PFX-Datei enthält den öffentlichen und den privaten Schlüssel.

Die in Schritt 1 erstellte testcert.cer-Datei kann über das Steuerfeld in Google Workspace hochgeladen werden. testcert.pfx aus Schritt 2 kann verwendet werden, um eine X509Certificate2-Instanz (.NET 2.0+) zum Signieren der SAML-Antwort zu erstellen.

Keytool in Java

Java-Entwickler können das Dienstprogramm keytool im Standard-JDK verwenden, um das öffentliche/private Schlüsselpaar und das X.509-Zertifikat zu erstellen. keytool ist ein Dienstprogramm zur Schlüssel- und Zertifikatsverwaltung, mit dem Nutzer ihre eigenen öffentlichen/privaten Schlüsselpaare und zugehörigen Zertifikate für die Verwendung in Authentifizierungsschemas verwalten können, die digitale Signaturen erfordern. keytool speichert Schlüssel und Zertifikate in einem „Keystore“, der bei der Standardimplementierung einfach eine Datei (.keystore) im Basisverzeichnis des Nutzers ist. Private Schlüssel sind passwortgeschützt.

DSA-Schlüsselpaare erstellen

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

In Schritt 1 wird ein öffentliches/privates Schlüsselpaar mit einer Größe von 2048 und einer Gültigkeit von 180 Tagen mithilfe des DSA-Algorithmus generiert.

In Schritt 2 wird aus dem öffentlichen Schlüssel ein X.509-Zertifikat (dsasso.cer) generiert. Anschließend laden Sie dsasso.cer über das Steuerfeld in Google Workspace hoch.

RSA-Schlüsselpaare erstellen

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

In Schritt 1 wird ein öffentliches/privates Schlüsselpaar mit einer Größe von 2048 und einer Gültigkeit von 180 Tagen mithilfe des RSA-Algorithmus generiert.

In Schritt 2 wird ein X.509-Zertifikat (rsasso.cer) aus dem öffentlichen Schlüssel generiert. Anschließend laden Sie rsasso.cer über das Steuerfeld in Google Workspace hoch.

Java Cryptography Architecture

Die Java Cryptography Architecture (JCA) bietet Kernklassen und Schnittstellen zum Generieren und Bearbeiten von Sicherheitseigenschaften. Die JCA umfasst die Teile der Java 2 SDK Security API, die sich auf die Kryptografie beziehen. Mit dieser API können Sie ganz einfach öffentliche und private Schlüsselpaare im gewünschten Algorithmus generieren. Im Folgenden finden Sie einen Beispielcode, mit dem DSA- oder RSA-Schlüssel für den Google Workspace-SSO-Dienst erstellt werden.

Schlüsselpaar aus öffentlichem und privatem Schlüssel erstellen

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

Im Code oben wird KeyPairGenerator verwendet, um ein Paar DSA-Schlüssel zu erstellen. Die generierten Schlüssel liegen im Binärformat vor und werden in einzelnen Dateien ausgegeben. Sobald Sie die Schlüssel haben, können Sie den öffentlichen Schlüssel bei Google Workspace registrieren und den privaten Schlüssel zum Signieren Ihrer SAMLResponse verwenden. Wenn Sie ein RSA-Schlüsselpaar anstelle eines DSA-Schlüsselpaars generieren möchten, müssen Sie im Code lediglich "DSA" durch "RSA" ersetzen.

Zertifikat oder öffentlichen Schlüssel bei Google Workspace registrieren

Nachdem Sie den schwierigen Teil der Generierung von Schlüsseln und Zertifikaten erledigt haben, ist der nächste Teil wirklich einfach. Wenn Sie Ihr Zertifikat oder Ihren öffentlichen Schlüssel bei Google Workspace registrieren möchten, müssen Sie sich in der Admin-Konsole als Administrator anmelden. Wählen Sie Sicherheit und dann Einmalanmeldung (SSO) einrichten aus und füllen Sie alle Felder auf der Seite unter Einmalanmeldung (SSO) mit Identität durch Drittanbieter einrichten aus.