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 l'algoritmo RSA o DSA. Per utilizzare il servizio, devi generare il set di chiavi pubbliche e private e un certificato X.509 che contenga la chiave pubblica. Una volta ottenuta una chiave pubblica o un certificato, devi registrarlo su Google. Per farlo, ti basta caricare la chiave o il certificato tramite la Console di amministrazione Google.
Il modo in cui generi chiavi e certificati spesso dipende dalla piattaforma di sviluppo e dal linguaggio di programmazione che preferisci. Ecco diversi modi per generare le chiavi e il certificato necessari al servizio SSO di Google Workspace.
Se utilizzi OpenSSL
Sebbene esistano molti metodi per creare coppie di chiavi pubbliche e private, lo strumento open source OpenSSL è uno dei più popolari. È stato eseguito il porting su tutte le principali piattaforme e fornisce una semplice interfaccia a riga di comando 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 memorizza nel file
rsaprivkey.pem. Questo esempio crea una chiave a 2048 bit, che dovrebbe funzionare per
quasi tutti gli scopi. La chiave privata risultante deve essere mantenuta segreta e viene utilizzata
per firmare e decriptare i dati.
Alcune implementazioni, in particolare quelle basate su Java, potrebbero richiedere DER o PKCS8, che possono essere generate, ad esempio, 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 in formato
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
Il primo passaggio crea un file di parametri DSA, dsaparam.pem, che in questo caso
indica a OpenSSL di 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. Il secondo passaggio crea effettivamente la chiave privata nel file
dsaprivkey.pem, che deve essere mantenuto 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 in formato
pkcs8 e DER. Una volta
eseguita questa operazione, puoi utilizzare questa coppia di chiavi pubblica (dsapubkey.der) e privata
(dsaprivkey.der).
Creare un certificato
Una volta creata la coppia di chiavi, creare un certificato X.509 è semplice. Il certificato contiene la chiave pubblica corrispondente, insieme ad 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 a una serie di domande, il certificato verrà creato e
salvato come dsacert.pem. Questo è il file che carichi su Google Workspace tramite
il pannello di controllo durante la configurazione del servizio SSO.
Creare un'impronta del certificato
Alcune applicazioni richiedono il fingerprint del certificato X.509 invece del certificato X.509 stesso. Un'impronta è un digest 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 SHA-256 da un certificato X.509, utilizza il seguente comando (sostituisci il nome del file .pem del certificato effettivo):
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. 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
Creazione
certificato
(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 Personal Information Exchange (PFX) da un file
CER e PVK. Il file PFX contiene sia la chiave pubblica che quella privata.
Il file testcert.cer creato nel passaggio 1 può essere caricato su
Google Workspace utilizzando il pannello di controllo; e testcert.pfx del passaggio 2
può essere utilizzato per creare un'istanza X509Certificate2 (.NET 2.0+) per firmare la
risposta SAML.
Se utilizzi 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 pubblica/privata e i certificati associati per l'utilizzo in schemi di autenticazione che richiedono firme digitali. keytool memorizza 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.
Crea 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 di dimensioni 2048 e validità di 180 giorni utilizzando l'algoritmo DSA.
Il passaggio 2 genera un certificato X.509 (dsasso.cer) dalla chiave pubblica. Dopodiché
carichi 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 di dimensioni 2048 e validità di 180 giorni utilizzando l'algoritmo RSA.
Il passaggio 2 genera un certificato X.509 (rsasso.cer) dalla chiave pubblica. Poi
carica
rsasso.cer su Google Workspace utilizzando il pannello di controllo.
Se utilizzi Java Cryptography Architecture
Java Cryptography Architecture (JCA) fornisce classi e interfacce di base per generare e manipolare le proprietà di sicurezza. La JCA comprende le parti dell'API Java 2 SDK Security relative alla crittografia. Utilizzando questa API, puoi generare facilmente coppie di chiavi pubblica e privata nell'algoritmo desiderato. Di seguito è riportato un codice campione che crea chiavi DSA o RSA da utilizzare con il servizio SSO di Google Workspace.
Crea 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 sopra utilizza KeyPairGenerator per creare una coppia di chiavi DSA. Le chiavi generate saranno in formato binario e verranno inserite in file separati.
Una volta ottenute le chiavi, puoi registrare la chiave pubblica con
Google Workspace e utilizzare la chiave privata per firmare il tuo SAMLResponse. Per
generare una coppia di chiavi RSA anziché DSA, devi solo sostituire
"DSA" nel codice con "RSA".
Registrare il certificato o la chiave pubblica con Google Workspace
Una volta completata la parte più difficile della generazione di chiavi e certificati, la parte successiva è molto semplice. Per registrare il certificato o la chiave pubblica con Google Workspace, devi accedere alla Console di amministrazione come amministratore. Seleziona Sicurezza, poi Configura il Single Sign-On (SSO) e compila tutti i campi della pagina in Configura SSO con provider di identità di terze parti.