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:
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 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:
openssl dsaparam -out dsaparam.pem 2048openssl 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:
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.
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:
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 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
keytool -genkey -alias dsassokey -keyalg "DSA" -keysize 2048 -validity 180 -sigalg "SHA256withDSA"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
keytool -genkey -alias rsassokey -keyalg "RSA" -keysize 2048 -validity 180keytool -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.