Genera claves y certificados para el SSO

Google Workspace ofrece el servicio de inicio de sesión único (SSO) a los clientes que tienen Google Workspace o Google Workspace for Education. El servicio de acceso único de Google Workspace acepta claves públicas y certificados generados con el algoritmo RSA o DSA. Para usar el servicio, debes generar el conjunto de claves públicas y privadas, y un certificado X.509 que contenga la clave pública. Una vez que tengas una clave pública o un certificado, deberás registrarlo en Google. Para ello, solo debes subir la clave o el certificado a través de la Consola del administrador de Google.

La forma en que generas claves y certificados suele depender de tu plataforma de desarrollo y de tu preferencia de lenguaje de programación. A continuación, se indican varias formas diferentes de generar las claves y el certificado que necesita el servicio de SSO de Google Workspace.

Usa OpenSSL

Si bien existen muchos métodos para crear pares de claves públicas y privadas, la herramienta de código abierto OpenSSL es una de las más populares. Se portó a todas las plataformas principales y proporciona una interfaz de línea de comandos simple para la generación de claves.

Crea la clave privada RSA

La generación de claves privadas RSA con OpenSSL implica solo un paso:

openssl genrsa -out rsaprivkey.pem 2048

Este comando genera una clave privada con codificación PEM y la almacena en el archivo rsaprivkey.pem. En este ejemplo, se crea una clave de 2,048 bits, que debería funcionar para casi cualquier propósito. La clave privada resultante debe mantenerse en secreto y se usa para firmar y desencriptar datos.

Algunas implementaciones, en particular las basadas en Java, pueden requerir DER o PKCS8, que se pueden generar, por ejemplo, con los siguientes pasos adicionales:

  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

En el paso 1, se genera la clave pública en formato DER.

En el paso 2, se genera la clave privada en formato pkcs8 y DER. Una vez generadas, puedes usar estas claves (rsapubkey.der y rsaprivkey.der).

Crea una clave privada de DSA

La generación de claves de DSA implica dos pasos:

  1. openssl dsaparam -out dsaparam.pem 2048
  2. openssl gendsa -out dsaprivkey.pem dsaparam.pem

El primer paso crea un archivo de parámetros DSA, dsaparam.pem, que, en este caso, indica a OpenSSL que cree una clave de 2,048 bits en el paso 2. El archivo dsaparam.pem no es una clave en sí y se puede descartar después de crear las claves pública y privada. En el segundo paso, se crea la clave privada en el archivo dsaprivkey.pem, que debe mantenerse en secreto.

Para exportar la clave a un formato DER (binario), puedes seguir estos pasos:

  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

El paso 1 extrae la clave pública en formato DER.

En el paso 2, se convierte la clave privada al formato pkcs8 y DER. Una vez que lo hagas, podrás usar este par de claves pública (dsapubkey.der) y privada (dsaprivkey.der).

Crear un certificado

Una vez que tengas tu par de claves, será fácil crear un certificado X.509. El certificado contiene la clave pública correspondiente, junto con algunos metadatos relacionados con la organización que creó el certificado. Sigue este paso para crear un certificado autofirmado a partir de una clave privada RSA o DSA:

openssl req -new -x509 -key dsaprivkey.pem -out dsacert.pem

Después de responder varias preguntas, se creará el certificado y se guardará como dsacert.pem. Este es el archivo que subes a Google Workspace a través del Panel de control cuando configuras el SSO.

Crea una huella digital del certificado

Algunas aplicaciones requieren una huella digital del certificado X.509, en lugar del certificado X.509 en sí. Una huella digital es un resumen del certificado en formato binario x509. El tipo de huella digital depende del algoritmo que se usó para generarla, como SHA-1 o SHA-256.

Para crear una huella digital SHA-256 a partir de un certificado X.509, usa el siguiente comando (sustituye el nombre de archivo .pem real de tu certificado):

openssl x509 -noout -fingerprint -sha256 -inform pem -in "GoogleIDPCertificate-domain.com.pem"

Uso de Microsoft Visual Studio para .NET

Microsoft Visual Studio 2005 proporciona utilidades (en el directorio Common7ToolsBin) que se pueden usar para generar un certificado para usar con Google Workspace. Sigue los pasos que se indican a continuación para crear el certificado y el par de claves públicas y privadas en .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

De forma predeterminada, se usa el algoritmo RSA en los comandos anteriores. En el paso 1, se usa la herramienta Certificate Creation (makecert.exe) para crear un certificado X.509 autofirmado llamado testcert.cer y la clave privada correspondiente.

En el paso 2, se usa la herramienta pvk2pfx (pvk2pfx.exe) para crear un archivo de intercambio de información personal (PFX) a partir de un archivo CER y PVK. El archivo PFX contiene tu clave pública y privada.

El archivo testcert.cer creado en el paso 1 se puede subir a Google Workspace con el Panel de control. Además, el testcert.pfx del paso 2 se puede usar para crear una instancia de X509Certificate2 (.NET 2.0 o versiones posteriores) para firmar la respuesta de SAML.

Cómo usar Keytool en Java

Los desarrolladores de Java pueden usar la utilidad keytool que se encuentra en el JDK estándar para crear el par de claves pública/privada y el certificado X.509. keytool es una utilidad de administración de claves y certificados que permite a los usuarios administrar sus propios pares de claves públicas/privadas y los certificados asociados para usarlos en esquemas de autenticación que requieren firmas digitales. keytool almacena claves y certificados en un "almacén de claves" que, para la implementación predeterminada, es simplemente un archivo (.keystore) en el directorio principal del usuario. Las claves privadas están protegidas con contraseñas.

Crea pares de claves DSA

  1. keytool -genkey -alias dsassokey -keyalg "DSA" -keysize 2048 -validity 180 -sigalg "SHA256withDSA"
  2. keytool -export -alias dsassokey -file dsasso.cer

El paso 1 genera un par de claves pública/privada con un tamaño de 2,048 y una validez de 180 días con el algoritmo DSA.

En el paso 2, se genera un certificado X.509 (dsasso.cer) a partir de la clave pública. Luego, sube dsasso.cer a Google Workspace con el Panel de control.

Crea pares de claves RSA

  1. keytool -genkey -alias rsassokey -keyalg "RSA" -keysize 2048 -validity 180
  2. keytool -export -alias rsassokey -file rsasso.cer

El paso 1 genera un par de claves pública/privada con un tamaño de 2,048 y una validez de 180 días con el algoritmo RSA.

En el paso 2, se genera un certificado X.509 (rsasso.cer) a partir de la clave pública. Luego, sube rsasso.cer a Google Workspace con el Panel de control.

Usa la arquitectura de criptografía de Java

La arquitectura de criptografía de Java (JCA) proporciona clases e interfaces principales para generar y manipular propiedades de seguridad. La JCA abarca las partes de la API de seguridad del SDK de Java 2 relacionadas con la criptografía. Con esta API, puedes generar fácilmente pares de claves públicas y privadas en el algoritmo deseado. A continuación, se muestra un ejemplo de código que crea claves DSA o RSA para usarse con el servicio de SSO de Google Workspace.

Crea un par de claves pública y privada

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();
   }
  }
}

El código anterior usa KeyPairGenerator para crear un par de claves DSA. Las claves generadas estarán en formato binario y se generarán en archivos individuales. Una vez que tengas las claves, podrás registrar la clave pública en Google Workspace y usar la clave privada para firmar tu SAMLResponse. Para generar un par de claves RSA en lugar de DSA, solo debes reemplazar "DSA" en el código por "RSA".

Registra tu certificado o clave pública en Google Workspace

Una vez que hayas realizado la parte difícil de generar claves y certificados, la siguiente parte será muy sencilla. Para registrar tu certificado o clave pública en Google Workspace, debes ir a la Consola del administrador y acceder como administrador. Selecciona Seguridad, luego Configurar el inicio de sesión único (SSO) y completa todos los campos de la página en Configurar el SSO con un proveedor de identidad externo.