Gerar chaves e certificados para o SSO

O Google Workspace oferece o serviço de Logon único (SSO) aos clientes com o Google Workspace ou o Google Workspace for Education. O serviço Logon único do Google Workspace aceita chaves públicas e certificados gerados com o algoritmo RSA ou DSA. Para usar o serviço, é necessário gerar o conjunto de chaves pública e privada e um certificado X.509 que tenha a chave pública. Após gerar uma chave pública ou um certificado, é preciso fazer o registro no Google. Para isso, basta fazer o upload da chave ou do certificado no Google Admin Console.

O modo como as chaves e os certificados são gerados depende da plataforma de desenvolvimento e da preferência de linguagem de programação. Confira várias maneiras de gerar as chaves e o certificado necessários para o serviço de SSO do Google Workspace.

Como usar o OpenSSL

Embora existam vários métodos para a criação de pares de chaves pública e privada, a ferramenta OpenSSL de código aberto é uma das mais usadas. Ela foi portada para todas as principais plataformas e fornece uma interface de linha de comando simples para a geração de chaves.

Criar a chave privada RSA

A geração da chave privada RSA com o OpenSSL tem apenas uma etapa:

openssl genrsa -out rsaprivkey.pem 2048

Esse comando gera uma chave privada codificada em PEM e a armazena no arquivo rsaprivkey.pem. Esse exemplo cria uma chave de 2.048 bits, que funciona para praticamente qualquer finalidade. Essa chave privada deve ser secreta e usada para assinar e descriptografar dados.

Algumas implementações, principalmente em Java, talvez exijam arquivos DER ou PKCS8, que podem ser gerados com estas etapas adicionais:

  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

A etapa 1 gera a chave pública no formato DER.

A etapa 2 gera a chave privada nos formatos pkcs8 e DER. Depois de geradas, você pode usar essas chaves (rsapubkey.der e rsaprivkey.der).

Criar uma chave privada DSA

A geração da chave DSA tem duas etapas:

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

A primeira etapa cria um arquivo de parâmetro DSA, dsaparam.pem, que, nesse caso, instrui o OpenSSL a criar uma chave de 2.048 bits na etapa 2. O arquivo dsaparam.pem não é propriamente uma chave e pode ser descartado após a criação das chaves pública e privada. A segunda etapa cria a chave privada no arquivo dsaprivkey.pem, que deve ser mantido em segredo.

Para exportar a chave para um formato DER (binário), siga estas etapas:

  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

A etapa 1 extrai a chave pública no formato DER.

A etapa 2 converte a chave privada nos formatos pkcs8 e DER. Depois disso, você pode usar esse par de chaves pública (dsapubkey.der) e privada (dsaprivkey.der).

Criar um certificado

Quando você tiver o par de chaves, será fácil criar um certificado X.509. O certificado tem a chave pública correspondente, além de alguns metadados relacionados à organização que o criou. Siga esta etapa para criar um certificado autoassinado usando uma chave privada RSA ou DSA:

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

Depois que você responde a algumas perguntas, o certificado é criado e salvo como dsacert.pem. Você faz o upload desse arquivo para o Google Workspace no painel de controle ao configurar o SSO.

Criar uma impressão digital de certificado

Alguns aplicativos exigem uma impressão digital do certificado X.509 em vez do próprio certificado X.509. Uma impressão digital é um resumo do certificado no formato binário x509. O tipo de impressão digital depende do algoritmo usado para gerar a impressão digital, como SHA-1 ou SHA-256.

Para criar uma impressão digital SHA-256 de um certificado X.509, use o seguinte comando (substitua o arquivo .pem pelo nome do seu certificado real):

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

Como usar o Microsoft Visual Studio para .NET

O Microsoft Visual Studio 2005 tem utilitários (no diretório Common7ToolsBin) que podem gerar um certificado para uso com o Google Workspace. Siga as etapas abaixo para criar o par de chaves pública e privada e o certificado no .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

Por padrão, o algoritmo RSA é usado nos comandos acima. A etapa 1 usa a ferramenta Criação de certificado (makecert.exe) para criar um certificado X.509 autoassinado chamado testcert.cer e a chave privada correspondente.

A etapa 2 usa a ferramenta pvk2pfx (pvk2pfx.exe) para criar um arquivo Personal Information Exchange (PFX) de arquivos CER e PVK. O PFX contém tanto a sua chave pública quanto a privada.

O arquivo testcert.cer criado na Etapa 1 pode ser enviado ao Google Workspace usando o painel de controle, e o testcert.pfx da Etapa 2 pode ser usado para criar uma instância X509Certificate2 (.NET 2.0+) e assinar a resposta SAML.

Como usar o Keytool no Java

Os desenvolvedores Java podem usar o utilitário keytool encontrado no JDK padrão para criar o par de chaves pública/privada e o certificado X.509. O keytool é um utilitário de gerenciamento de chaves e certificados que permite aos usuários administrar os próprios pares de chaves públicas/privadas e certificados associados para uso em esquemas de autenticação que exigem assinaturas digitais. O keytool armazena chaves e certificados em um "keystore", que, para a implementação padrão, é simplesmente um arquivo (.keystore) no diretório inicial do usuário. As chaves privadas são protegidas por senhas.

Criar pares de chaves DSA

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

A etapa 1 gera um par de chaves pública/privada com 2.048 bits e validade de 180 dias usando o algoritmo DSA.

A etapa 2 gera um certificado X.509 (dsasso.cer) da chave pública. Em seguida, faça upload de dsasso.cer para o Google Workspace usando o painel de controle.

Criar pares de chaves RSA

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

A etapa 1 gera um par de chaves pública/privada com 2.048 bits e validade de 180 dias usando o algoritmo RSA.

A etapa 2 gera um certificado X.509 (rsasso.cer) da chave pública. Depois, faça o upload de rsasso.cer para o Google Workspace usando o painel de controle.

Como usar a Java Cryptography Architecture

A Java Cryptography Architecture (JCA) fornece as principais classes e interfaces para gerar e manipular propriedades de segurança. A JCA engloba partes da Java 2 SDK Security API relacionadas à criptografia. Usando essa API, é fácil gerar pares de chaves públicas e privadas no algoritmo desejado. Veja abaixo um exemplo de código que cria chaves DSA ou RSA para serem usadas com o serviço SSO do Google Workspace.

Criar um par de chaves pública e 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();
   }
  }
}

O código acima usa o KeyPairGenerator para criar um par de chaves DSA. As chaves geradas estarão em formato binário e serão gravadas em arquivos individuais. Quando você tiver as chaves, poderá registrar a chave pública no Google Workspace e usar a chave privada para assinar o SAMLResponse. Para gerar um par de chaves RSA em vez de DSA, é só substituir "DSA" no código por "RSA".

Registre seu certificado ou chave pública no Google Workspace

Depois de realizar a parte mais complexa, que é gerar chaves e certificados, você verá que o restante é bem simples. Para registrar seu certificado ou chave pública no Google Workspace, acesse o Admin Console e faça login como administrador. Selecione Segurança, depois Configurar Logon único (SSO) e preencha todos os campos da página em Configurar SSO com provedor de identidade de terceiros.