Google Workspace offre il servizio Single Sign-On (SSO) ai clienti con Google Workspace o Google Workspace for Education. Il servizio Single Sign-On di Google Workspace accetta chiavi pubbliche e certificati generati con gli algoritmi RSA o DSA. Per utilizzare il servizio, è necessario generare una coppia costituita da una chiave pubblica e una chiave privata nonché un certificato X.509 che contenga la chiave pubblica. Una volta creati la chiave pubblica o il certificato, devi registrarli su Google. A tale scopo, è sufficiente caricare la chiave o il certificato tramite la Console di amministrazione Google.
La modalità di generazione di chiavi e certificati spesso dipende dalla piattaforma di sviluppo e dal linguaggio di programmazione in uso. Di seguito sono riportati diversi modi per generare le chiavi e il certificato richiesti dal servizio SSO di Google Workspace.
Se utilizzi OpenSSL
Anche se ci sono diversi metodi per creare coppie di chiavi pubbliche e private, lo strumento open source OpenSSL è uno dei più comunemente utilizzati. Lo strumento è stato reso disponibile in tutte le principali piattaforme e fornisce un'interfaccia a riga di comando di facile utilizzo per la generazione delle chiavi.
Creare la chiave privata RSA
La generazione di chiavi private RSA con OpenSSL richiede un unico passaggio:
openssl genrsa -out rsaprivkey.pem 2048
Questo comando genera una chiave privata con codifica PEM e la archivia nel file
rsaprivkey.pem. Questo esempio crea una chiave a 2048 bit che dovrebbe essere adatta a quasi tutti gli scopi. La chiave privata risultante deve essere mantenuta segreta e utilizzata
per firmare e decriptare i dati.
Alcune implementazioni, in particolare quelle basate su Java, potrebbero richiedere l'utilizzo dei formati DER o PKCS8 che, ad esempio, possono essere generati utilizzando i seguenti passaggi aggiuntivi:
openssl rsa -in rsaprivkey.pem -pubout -outform DER -out rsapubkey.deropenssl pkcs8 -topk8 -inform PEM -outform DER -in rsaprivkey.pem -out rsaprivkey.der -nocrypt
Il passaggio 1 genera la chiave pubblica in formato DER.
Il passaggio 2 genera la chiave privata nei formati
pkcs8 e DER. Una volta
generate, puoi utilizzare queste chiavi (rsapubkey.der e rsaprivkey.der).
Creare una chiave privata DSA
La generazione di chiavi DSA comporta due passaggi:
openssl dsaparam -out dsaparam.pem 2048openssl gendsa -out dsaprivkey.pem dsaparam.pem
Nel primo passaggio viene creato un file di parametri DSA, dsaparam.pem, che in questo caso
contiene le istruzioni utilizzate da OpenSSL per creare una chiave a 2048 bit nel passaggio 2. Il file dsaparam.pem non è una chiave e può essere eliminato dopo la creazione delle chiavi pubblica e privata. Nel secondo passaggio viene creata la chiave privata vera e propria, che viene salvata nel file
dsaprivkey.pem, che deve essere tenuto segreto.
Per esportare la chiave nel formato binario DER puoi eseguire i seguenti passaggi:
openssl dsa -in dsaprivkey.pem -outform DER -pubout -out dsapubkey.deropenssl pkcs8 -topk8 -inform PEM -outform DER -in dsaprivkey.pem -out dsaprivkey.der -nocrypt
Il primo passaggio estrae la chiave pubblica in un formato DER.
Il passaggio 2 converte la chiave privata nei formati
pkcs8 e DER. Una volta
eseguita questa operazione, puoi utilizzare la coppia di chiavi pubblica (dsapubkey.der) e privata
(dsaprivkey.der).
Crea un certificato
Una volta creata la coppia di chiavi, creare un certificato X.509 è semplice. Il certificato contiene la chiave pubblica corrispondente e alcuni metadati relativi all'organizzazione che ha creato il certificato. Segui questo passaggio per creare un certificato autofirmato da una chiave privata RSA o DSA:
openssl req -new -x509 -key dsaprivkey.pem -out dsacert.pem
Dopo aver risposto ad alcune domande, il certificato verrà creato e
salvato come dsacert.pem. Questo è il file che carichi su Google Workspace tramite
il pannello di controllo quando configuri SSO.
Creare un'impronta del certificato
Alcune applicazioni richiedono un'impronta del certificato X.509 invece del certificato stesso. Un'impronta è una sintesi del certificato in formato binario x509. Il tipo di impronta dipende dall'algoritmo utilizzato per generarla, ad esempio SHA-1 o SHA-256.
Per creare un'impronta digitale SHA-256 da un certificato X.509, utilizza il seguente comando (sostituendo il nome del file .pem con quello del tuo certificato):
openssl x509 -noout -fingerprint -sha256 -inform pem -in "GoogleIDPCertificate-domain.com.pem"
Se utilizzi Microsoft Visual Studio per .NET
Microsoft Visual Studio 2005 fornisce utilità (nella directory Common7ToolsBin)
che possono essere utilizzate per generare un certificato da utilizzare con
Google Workspace. Esegui i passaggi indicati di seguito per creare la coppia di chiavi pubblica e privata e il certificato 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
Per impostazione predefinita, i comandi riportati sopra utilizzano l'algoritmo RSA. Il passaggio 1 utilizza lo strumento di creazione certificati (makecert.exe) per creare un certificato X.509 autofirmato denominato testcert.cer e la chiave privata corrispondente.
Il passaggio 2 utilizza lo strumento
pvk2pfx (pvk2pfx.exe) per creare un file per lo scambio di informazioni personali (PFX) da un
file CER e PVK. Il file PFX contiene sia la chiave pubblica sia quella privata.
Il file testcert.cer creato nel passaggio 1 può essere caricato in
Google Workspace utilizzando il Pannello di controllo, mentre testcert.pfx del passaggio 2
può essere utilizzato per creare un'istanza di X509Certificate2 (.NET 2.0 e versioni successive) per firmare la
risposta SAML.
Utilizzo di Keytool in Java
Gli sviluppatori Java possono utilizzare l'utilità keytool disponibile nel JDK standard per
creare la coppia di chiavi pubblica/privata e il certificato X.509. keytool è un'utilità di gestione di chiavi e certificati che consente agli utenti di amministrare le proprie coppie di chiavi pubbliche/private e i certificati associati per l'utilizzo in schemi di autenticazione che richiedono firme digitali. keytool archivia chiavi e certificati in un "keystore" che, per l'implementazione predefinita, è semplicemente un file (.keystore) nella home directory dell'utente. Le chiavi private sono protette da password.
Creare coppie di chiavi DSA
keytool -genkey -alias dsassokey -keyalg "DSA" -keysize 2048 -validity 180 -sigalg "SHA256withDSA"keytool -export -alias dsassokey -file dsasso.cer
Il passaggio 1 genera una coppia di chiavi pubblica/privata a 2048 bit con una validità di 180 giorni utilizzando l'algoritmo DSA.
Il passaggio 2 genera un certificato X.509 (dsasso.cer) dalla chiave pubblica. Puoi
quindi caricare dsasso.cer su Google Workspace utilizzando il Pannello di controllo.
Creare coppie di chiavi RSA
keytool -genkey -alias rsassokey -keyalg "RSA" -keysize 2048 -validity 180keytool -export -alias rsassokey -file rsasso.cer
Il passaggio 1 genera una coppia di chiavi pubblica/privata a 2048 bit con una validità di 180 giorni utilizzando l'algoritmo RSA.
Il passaggio 2 genera un certificato X.509 (rsasso.cer) dalla chiave pubblica. Puoi
quindi
caricare
rsasso.cer su Google Workspace utilizzando il Pannello di controllo.
Utilizzo di Java Cryptography Architecture
Java Cryptography Architecture (JCA) fornisce un insieme di classi e interfacce di base per generare e manipolare proprietà relative alla sicurezza. JCA include le parti correlate alla crittografia dell'API relativa alla sicurezza dell'SDK di Java 2. Utilizzando questa API puoi generare facilmente le coppie di chiavi pubblica e privata utilizzando l'algoritmo che ritieni più appropriato. Di seguito è riportato un codice di esempio che crea chiavi DSA o RSA da utilizzare con il servizio SSO di Google Workspace.
Creare una coppia di chiavi pubblica e privata
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();
}
}
}
Il codice riportato sopra utilizza KeyPairGenerator per creare una coppia di chiavi DSA. Le chiavi generate saranno in formato binario e verranno salvate in singoli file.
Una volta generate le chiavi, puoi registrare la chiave pubblica in
Google Workspace e utilizzare la chiave privata per firmare il tuo SAMLResponse. Per
generare una coppia di chiavi RSA invece di chiavi DSA, devi semplicemente sostituire
"DSA" con "RSA" nel codice.
Registrare il certificato o la chiave pubblica in Google Workspace
Una volta completate le operazioni più articolate necessarie per creare le chiavi e i certificati, la fase successiva è piuttosto semplice. Per registrare il certificato o la chiave pubblica in Google Workspace, devi aprire la Console di amministrazione e accedere come amministratore. Seleziona Sicurezza, poi Configura Single Sign-On (SSO) e compila tutti i campi della pagina in Configura SSO con provider di identità di terze parti.