Google Workspace bietet Kunden mit Google Workspace oder Google Workspace for Education den Dienst für die Einmalanmeldung (Single Sign-On, SSO). Der Dienst Google Workspace Single Sign-On akzeptiert öffentliche Schlüssel und Zertifikate, die mit dem RSA- oder DSA-Algorithmus generiert wurden. Um den Dienst nutzen zu können, müssen Sie das Set aus öffentlichen und privaten Schlüsseln 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 es bei Google registrieren. Dazu müssen Sie den Schlüssel oder das Zertifikat einfach über die Admin-Konsole hochladen.
Die Art und Weise, wie Sie Schlüssel und Zertifikate generieren, hängt oft von Ihrer Entwicklungsplattform und der bevorzugten Programmiersprache ab. Hier finden Sie verschiedene Möglichkeiten, die für den Google Workspace-SSO-Dienst erforderlichen Schlüssel und das Zertifikat zu generieren.
OpenSSL
Es gibt viele Methoden zum Erstellen von öffentlichen und privaten Schlüsselpaaren, aber das Open-Source-Tool OpenSSL ist eine der beliebtesten. Es wurde auf alle wichtigen 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.
Für einige Implementierungen, insbesondere für Java-basierte, sind möglicherweise DER oder PKCS8 erforderlich, die beispielsweise mit den folgenden zusätzlichen Schritten generiert werden können:
openssl rsa -in rsaprivkey.pem -pubout -outform DER -out rsapubkey.deropenssl 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. 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:
openssl dsaparam -out dsaparam.pem 2048openssl 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 2.048-Bit-Schlüssel zu erstellen. Die Datei dsaparam.pem ist kein Schlüssel und kann nach der Erstellung 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:
openssl dsa -in dsaprivkey.pem -outform DER -pubout -out dsapubkey.deropenssl 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.
Im zweiten Schritt wird der private Schlüssel in das pkcs8- und DER-Format konvertiert. Anschließend können Sie dieses öffentliche (dsapubkey.der) und private (dsaprivkey.der) Schlüsselpaar 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 über das Steuerfeld in Google Workspace hoch, wenn Sie die Einmalanmeldung konfigurieren.
Zertifikatfingerabdruck erstellen
Für einige Anwendungen ist ein X.509-Zertifikat-Fingerabdruck anstelle des X.509-Zertifikats selbst erforderlich. Ein Fingerabdruck ist ein Digest des Zertifikats im binären x509-Format. 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 Namen der .pem-Datei durch den Namen Ihres 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 ein Zertifikat für die Verwendung mit Google Workspace generiert werden kann. So erstellen Sie das öffentliche und private Schlüsselpaar und das Zertifikat in .NET:
makecert -r -pe -n "CN=Test Certificate" -sky exchange -sv testcert.pvk testcert.cerpvk2pfx -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 mit dem Tool Certificate Creation (makecert.exe) ein selbst signiertes X.509-Zertifikat mit dem Namen testcert.cer und der entsprechende private Schlüssel erstellt.
In Schritt 2 wird mit dem Tool pvk2pfx (pvk2pfx.exe) eine PFX-Datei (Personal Information Exchange) aus einer CER- und einer PVK-Datei erstellt. Die PFX-Datei enthält den öffentlichen und den privaten Schlüssel.
Die in Schritt 1 erstellte testcert.cer-Datei kann über die Systemsteuerung in Google Workspace hochgeladen werden. Die 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 keytool-Dienstprogramm 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 Paare aus öffentlichen/privaten Schlüsseln und die 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 in der Standardimplementierung einfach eine Datei (.keystore) im Basisverzeichnis des Nutzers ist. Private Schlüssel sind passwortgeschützt.
DSA-Schlüsselpaare erstellen
keytool -genkey -alias dsassokey -keyalg "DSA" -keysize 2048 -validity 180 -sigalg "SHA256withDSA"keytool -export -alias dsassokey -file dsasso.cer
In Schritt 1 wird mit dem DSA-Algorithmus ein öffentliches/privates Schlüsselpaar mit einer Größe von 2048 Bit und einer Gültigkeit von 180 Tagen generiert.
In Schritt 2 wird aus dem öffentlichen Schlüssel ein X.509-Zertifikat (dsasso.cer) generiert. Anschließend laden Sie dsasso.cer über die Steuerkonsole in Google Workspace hoch.
RSA-Schlüsselpaare erstellen
keytool -genkey -alias rsassokey -keyalg "RSA" -keysize 2048 -validity 180keytool -export -alias rsassokey -file rsasso.cer
In Schritt 1 wird mit dem RSA-Algorithmus ein öffentliches/privates Schlüsselpaar mit einer Größe von 2.048 Bit und einer Gültigkeit von 180 Tagen generiert.
In Schritt 2 wird aus dem öffentlichen Schlüssel ein X.509-Zertifikat (rsasso.cer) generiert. Anschließend laden Sie
rsasso.cer über die Steuerkonsole 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 mit dem gewünschten Algorithmus generieren. Unten finden Sie ein Beispielcode, mit dem DSA- oder RSA-Schlüssel für die Verwendung mit dem 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 DSA-Schlüsselpaar zu erstellen. Die generierten Schlüssel haben das Binärformat 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 anstelle von DSA ein RSA-Schlüsselpaar generieren möchten, müssen Sie im Code nur "DSA" durch "RSA" ersetzen.
Zertifikat oder öffentlichen Schlüssel bei Google Workspace registrieren
Nachdem Sie den schwierigen Teil des Generierens von Schlüsseln und Zertifikaten erledigt haben, ist der nächste Teil ganz 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.