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

Google Workspace bietet Kunden mit Google Workspace oder Google Workspace for Education die Einmalanmeldung (SSO) an. Der Dienst für die Google Workspace-Einmalanmeldung akzeptiert öffentliche Schlüssel und Zertifikate, die mit dem RSA- oder DSA-Algorithmus generiert wurden. Um diesen Dienst zu nutzen, müssen Sie ein Schlüsselpaar mit einem öffentlichen und einem privaten Schlüssel generieren, sowie ein X.509-Zertifikat, das den öffentlichen Schlüssel enthält. Danach müssen der öffentliche Schlüssel bzw. das Zertifikat bei Google registriert werden. Laden Sie hierfür einfach den Schlüssel oder das Zertifikat über die Google Admin-Konsole hoch.

Wie Sie Schlüssel und Zertifikate generieren, hängt in der Regel von der verwendeten Entwicklungsplattform und Programmiersprache ab. Im Folgenden finden Sie verschiedene Möglichkeiten, um die für den Google Workspace-SSO-Dienst benötigten Schlüssel und Zertifikate zu generieren.

OpenSSL

Es gibt viele Methoden zum Erstellen von Schlüsselpaaren mit einem öffentlichen und einem privaten Schlüssel. Zu den beliebtesten zählt das Open Source-Tool OpenSSL. Es ist auf allen gängigen Plattformen verfügbar und ermöglicht das Generieren von Schlüsseln über eine einfache Befehlszeilenschnittstelle.

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

Damit wird ein PEM-codierter privater Schlüssel erstellt und in der Datei rsaprivkey.pem gespeichert. In diesem Beispiel wird ein 2.048-Bit-Schlüssel erstellt, der für fast jeden Zweck geeignet sein sollte. Dieser private Schlüssel dient der Signatur und Entschlüsselung von Daten und sollte geheim gehalten werden.

Für einige Implementierungen, insbesondere Implementierungen auf Java-Basis, ist DER oder PKCS8 erforderlich. Diese Formate lassen sich mit den folgenden zusätzlichen Schritten generieren:

  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 im DER-Format generiert. Nach der Generierung können Sie diese Schlüssel (rsapubkey.der und rsaprivkey.der) 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 die DSA-Parameterdatei dsaparam.pem erstellt, mit der OpenSSL angewiesen wird, einen 2.048-Bit-Schlüssel zu erstellen (Schritt 2). Die Datei dsaparam.pem selbst ist kein Schlüssel und kann gelöscht werden, nachdem der öffentliche und der private Schlüssel erstellt wurden. Im zweiten Schritt wird in der Datei dsaprivkey.pem der private Schlüssel erstellt, der 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 in das DER-Format konvertiert. Anschließend können Sie dieses Paar aus öffentlichem Schlüssel (dsapubkey.der) und privatem Schlüssel (dsaprivkey.der) 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 und darüber hinaus einige Metadaten zu der Organisation, die das Zertifikat erstellt hat. Gehen Sie wie folgt vor, 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

Sie müssen einige Fragen beantworten. Dann wird das Zertifikat erstellt und als dsacert.pem gespeichert. Dies ist die Datei, die Sie über das Steuerfeld auf Google Workspace hochladen, wenn Sie die SSO konfigurieren.

Zertifikat-Fingerabdruck erstellen

Für einige Anwendungen ist ein X.509-Zertifikat-Fingerabdruck statt des X.509-Zertifikats erforderlich. Ein Fingerabdruck ist ein Hashwert des Zertifikats im x509-Binärformat. Der Fingerabdrucktyp hängt vom Algorithmus ab, mit dem der Fingerabdruck erzeugt 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 PEM-Dateinamen durch Ihren eigenen PEM-Dateinamen:

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

Microsoft Visual Studio .NET

Im Verzeichnis Common7ToolsBin von Microsoft Visual Studio 2005 finden Sie Dienstprogramme, mit denen Sie ein Zertifikat für Google Workspace generieren können. So erstellen Sie das Schlüsselpaar mit öffentlichem und privatem Schlüssel sowie 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 werden mit dem Tool zum Erstellen von Zertifikaten (makecert.exe) ein selbst signiertes X.509-Zertifikat mit dem Namen testcert.cer und der zugehörige private Schlüssel erstellt.

In Schritt 2 wird mit dem pvk2pfx -Tool (pvk2pfx.exe) aus einer CER- und einer PVK-Datei eine PFX-Datei (Personal Information Exchange) erstellt. Die PFX-Datei enthält den öffentlichen und den privaten Schlüssel.

Die in Schritt 1 erstellte Datei testcert.cer kann über das Steuerfeld in Google Workspace hochgeladen werden. Mit der Datei testcert.pfx aus Schritt 2 kann eine Instanz X509Certificate2 (.NET 2.0+) zur Signatur der SAML-Antwort erstellt werden.

Keytool in Java

Java-Entwickler können mit dem Dienstprogramm keytool im Standard-JDK das öffentliche/private Schlüsselpaar und das X.509-Zertifikat erstellen. keytool ist ein Dienstprogramm zur Schlüssel- und Zertifikatsverwaltung, mit dem Nutzer ihre eigenen öffentlichen/privaten Schlüsselpaare sowie zugehörige Zertifikate für die Authentifizierungsschemas verwalten können, die digitale Signaturen erfordern. In keytool werden Schlüssel und Zertifikate in einem Schlüsselspeicher gespeichert, der für die 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 mithilfe des DSA-Algorithmus ein 2.048-Bit-Schlüsselpaar mit einem öffentlichen und einem privaten Schlüssel erstellt, das 180 Tage gültig ist.

In Schritt 2 wird aus dem öffentlichen Schlüssel ein X.509-Zertifikat (dsasso.cer) erstellt. Laden Sie dann 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 mithilfe des RSA-Algorithmus ein 2.048-Bit-Schlüsselpaar mit einem öffentlichen und einem privaten Schlüssel erstellt, das 180 Tage gültig ist.

In Schritt 2 wird aus dem öffentlichen Schlüssel ein X.509-Zertifikat (rsasso.cer) erstellt. Laden Sie dann hoch rsasso.cer über das Steuerfeld in Google Workspace hoch.

Java Cryptography Architecture

Die Java Cryptography Architecture (JCA) bietet wichtige Klassen und Schnittstellen zum Generieren und Bearbeiten von Sicherheitseigenschaften. Die JCA enthält die Komponenten der Java 2 SDK-Sicherheits-API für kryptografische Aufgaben. Mit dieser API können Sie ganz einfach im gewünschten Algorithmus Schlüsselpaare aus öffentlichen und privaten Schlüsseln erstellen. Unten finden Sie 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 obigen Code wird KeyPairGenerator verwendet, um ein Paar von DSA-Schlüsseln zu erstellen. Die Schlüssel im Binärformat werden in separate Dateien ausgegeben. Anschließend können Sie den öffentlichen Schlüssel in Google Workspace registrieren und Ihre SAMLResponse mit dem privaten Schlüssel signieren. Wenn Sie anstelle von DSA-Schlüsseln ein Paar von RSA-Schlüsseln generieren möchten, müssen Sie im Code nur "DSA" durch "RSA" ersetzen.

Zertifikat oder öffentlichen Schlüssel in Google Workspace registrieren

Den etwas komplizierteren Teil haben Sie jetzt hinter sich! Der nächste Schritt ist einfach. Um das Zertifikat oder den öffentlichen Schlüssel bei Google Workspace zu registrieren, gehen Sie zur Admin Konsole und melden Sie sich als Administrator an. Wählen Sie Sicherheit aus und klicken Sie dann auf Einmalanmeldung (SSO) einrichten. Geben Sie auf der Seite unter Einmalanmeldung (SSO) mit externem Identitätsanbieter einrichten in alle Felder die erforderlichen Informationen ein.