Generare chiavi e certificati per SSO

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:

  1. openssl rsa -in rsaprivkey.pem -pubout -outform DER -out rsapubkey.der
  2. openssl 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:

  1. openssl dsaparam -out dsaparam.pem 2048
  2. openssl 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:

  1. openssl dsa -in dsaprivkey.pem -outform DER -pubout -out dsapubkey.der
  2. openssl 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:

  1. makecert -r -pe -n "CN=Test Certificate" -sky exchange -sv testcert.pvk testcert.cer
  2. pvk2pfx -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

  1. keytool -genkey -alias dsassokey -keyalg "DSA" -keysize 2048 -validity 180 -sigalg "SHA256withDSA"
  2. 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

  1. keytool -genkey -alias rsassokey -keyalg "RSA" -keysize 2048 -validity 180
  2. keytool -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.