Google Workspace propose le service d'authentification unique (SSO) aux clients disposant de Google Workspace ou Google Workspace for Education. Le service Authentification unique Google Workspace accepte les clés publiques et les certificats générés avec l'algorithme RSA ou DSA. Pour utiliser le service, vous devez générer l'ensemble de clés publiques et privées, ainsi qu'un certificat X.509 contenant la clé publique. Une fois que vous disposez d'une clé publique ou d'un certificat, vous devez l'enregistrer auprès de Google. Pour ce faire, il vous suffit d'importer la clé ou le certificat dans la console d'administration Google.
La façon dont vous générez des clés et des certificats dépend souvent de votre plate-forme de développement et de votre langage de programmation préféré. Voici plusieurs façons de générer les clés et le certificat requis par le service SSO Google Workspace.
Utiliser OpenSSL
Bien qu'il existe de nombreuses méthodes pour créer des paires de clés publiques et privées, l'outil OpenSSL Open Source est l'un des plus populaires. Il a été porté sur toutes les plates-formes principales et fournit une interface de ligne de commande simple pour la génération de clés.
Créer une clé privée RSA
Pour générer une clé privée RSA avec OpenSSL, une seule étape est nécessaire :
openssl genrsa -out rsaprivkey.pem 2048
Cette commande génère une clé privée encodée au format PEM et la stocke dans le fichier rsaprivkey.pem. Cet exemple crée une clé de 2 048 bits, qui devrait fonctionner pour presque tous les usages. La clé privée obtenue doit rester secrète et est utilisée pour signer et déchiffrer les données.
Certaines implémentations, en particulier celles basées sur Java, peuvent nécessiter DER ou PKCS8, qui peuvent par exemple être générés en suivant les étapes supplémentaires suivantes :
openssl rsa -in rsaprivkey.pem -pubout -outform DER -out rsapubkey.deropenssl pkcs8 -topk8 -inform PEM -outform DER -in rsaprivkey.pem -out rsaprivkey.der -nocrypt
La première commande permet de générer la clé publique au format DER.
L'étape 2 génère la clé privée au format pkcs8 et DER. Une fois générées, vous pouvez utiliser ces clés (rsapubkey.der et rsaprivkey.der).
Créer une clé privée DSA
Pour générer une clé DSA, deux commandes sont nécessaires :
openssl dsaparam -out dsaparam.pem 2048openssl gendsa -out dsaprivkey.pem dsaparam.pem
La première étape consiste à créer un fichier de paramètres DSA, dsaparam.pem, qui dans ce cas indique à OpenSSL de créer une clé de 2 048 bits à l'étape 2. Le fichier dsaparam.pem n'est pas une clé en soi et peut être supprimé une fois les clés publique et privée créées. La seconde étape crée la clé privée dans le fichier dsaprivkey.pem, qui doit rester secret.
Pour exporter la clé au format (binaire) DER, vous pouvez utiliser les commandes suivantes :
openssl dsa -in dsaprivkey.pem -outform DER -pubout -out dsapubkey.deropenssl pkcs8 -topk8 -inform PEM -outform DER -in dsaprivkey.pem -out dsaprivkey.der -nocrypt
La première commande permet d'extraire la clé publique au format DER.
L'étape 2 convertit la clé privée au format pkcs8 et DER. Une fois cette opération effectuée, vous pouvez utiliser cette paire de clés publique (dsapubkey.der) et privée (dsaprivkey.der).
Créer un certificat
Une fois que vous avez votre paire de clés, il est facile de créer un certificat X.509. Le certificat contient la clé publique correspondante, ainsi que des métadonnées relatives à l'organisation qui l'a créé. Suivez cette étape pour créer un certificat autosigné à partir d'une clé privée RSA ou DSA :
openssl req -new -x509 -key dsaprivkey.pem -out dsacert.pem
Une fois que vous avez répondu à un certain nombre de questions, le certificat est créé et enregistré au format dsacert.pem. Il s'agit du fichier que vous importez dans Google Workspace via le panneau de configuration lorsque vous configurez l'authentification unique.
Créer une empreinte de certificat
Certaines applications nécessitent l'empreinte d'un certificat X.509 plutôt que le certificat X.509 lui-même. Une empreinte est un condensé du certificat au format binaire x509. Le type d'empreinte dépend de l'algorithme utilisé pour la générer, comme SHA-1 ou SHA-256.
Pour créer une empreinte SHA-256 à partir d'un certificat X.509, utilisez la commande suivante (en remplaçant le nom de fichier .pem de votre certificat) :
openssl x509 -noout -fingerprint -sha256 -inform pem -in "GoogleIDPCertificate-domain.com.pem"
Utiliser Microsoft Visual Studio pour .NET
Microsoft Visual Studio 2005 fournit des utilitaires (dans le répertoire Common7ToolsBin) qui peuvent être utilisés pour générer un certificat à utiliser avec Google Workspace. Suivez les étapes ci-dessous pour créer la paire de clés publique et privée, ainsi que le certificat dans .NET :
makecert -r -pe -n "CN=Test Certificate" -sky exchange -sv testcert.pvk testcert.cerpvk2pfx -pvk testcert.pvk -spc testcert.cer -pfx testcert.pfx
Par défaut, les commandes ci-dessus intègrent l'algorithme RSA. L'étape 1 utilise l'outil de création de certificats (makecert.exe) pour créer un certificat X.509 autosigné appelé testcert.cer et la clé privée correspondante.
L'étape 2 utilise l'outil pvk2pfx (pvk2pfx.exe) pour créer un fichier PFX (Personal Information Exchange) à partir d'un fichier CER et d'un fichier PVK. Le fichier PFX contient la clé publique et la clé privée.
Le fichier testcert.cer créé à l'étape 1 peut être importé dans Google Workspace à l'aide du panneau de configuration. Le fichier testcert.pfx de l'étape 2 peut être utilisé pour créer une instance X509Certificate2 (.NET 2.0+) permettant de signer la réponse SAML.
Utiliser Keytool dans Java
Les développeurs Java peuvent utiliser l'utilitaire keytool disponible dans le JDK standard pour créer la paire de clés publique/privée et le certificat X.509. keytool est un utilitaire de gestion des clés et des certificats qui permet aux utilisateurs d'administrer leurs propres paires de clés publiques/privées et les certificats associés pour les utiliser dans des schémas d'authentification nécessitant des signatures numériques. keytool stocke les clés et les certificats dans un "keystore" qui, pour l'implémentation par défaut, est simplement un fichier (.keystore) dans le répertoire d'accueil de l'utilisateur. Les clés privées sont protégées par mot de passe.
Créer des paires de clés DSA
keytool -genkey -alias dsassokey -keyalg "DSA" -keysize 2048 -validity 180 -sigalg "SHA256withDSA"keytool -export -alias dsassokey -file dsasso.cer
L'étape 1 génère une paire de clés publique/privée de taille 2048 et d'une validité de 180 jours à l'aide de l'algorithme DSA.
L'étape 2 génère un certificat X.509 (dsasso.cer) à partir de la clé publique. Vous devez ensuite importer dsasso.cer dans Google Workspace à l'aide du panneau de configuration.
Créer des paires de clés RSA
keytool -genkey -alias rsassokey -keyalg "RSA" -keysize 2048 -validity 180keytool -export -alias rsassokey -file rsasso.cer
L'étape 1 génère une paire de clés publique/privée de taille 2048 et d'une validité de 180 jours à l'aide de l'algorithme RSA.
L'étape 2 génère un certificat X.509 (rsasso.cer) à partir de la clé publique. Vous devez ensuite importer
rsasso.cer dans Google Workspace à l'aide du panneau de configuration.
Utiliser Java Cryptography Architecture
Java Cryptography Architecture (JCA) fournit des classes et des interfaces de base pour générer et manipuler des propriétés de sécurité. La JCA englobe les parties de l'API de sécurité du SDK Java 2 liées à la cryptographie. Cette API vous permet de générer facilement des paires de clés publiques et privées dans l'algorithme souhaité. Vous trouverez ci-dessous un exemple de code qui crée des clés DSA ou RSA à utiliser avec le service SSO Google Workspace.
Créer une paire de clés publique et privée
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();
}
}
}
Le code ci-dessus utilise KeyPairGenerator pour créer une paire de clés DSA. Les clés générées seront au format binaire et seront enregistrées dans des fichiers individuels.
Une fois que vous avez les clés, vous pouvez enregistrer la clé publique auprès de Google Workspace et utiliser la clé privée pour signer votre SAMLResponse. Pour générer une paire de clés RSA au lieu d'une paire de clés DSA, il vous suffit de remplacer "DSA" par "RSA" dans le code.
Enregistrer votre certificat ou votre clé publique auprès de Google Workspace
Une fois que vous avez effectué la partie délicate de la génération des clés et des certificats, la partie suivante est très simple. Pour enregistrer votre certificat ou votre clé publique auprès de Google Workspace, vous devez accéder à la console d'administration et vous connecter en tant qu'administrateur. Sélectionnez Sécurité, puis Configurer l'authentification unique (SSO) et remplissez tous les champs de la page sous Configurer l'authentification unique avec un fournisseur d'identité tiers.