Gerar chaves e certificados para o SSO

O Google Workspace oferece o serviço de Logon único (SSO) para clientes com o Google Workspace ou o Google Workspace for Education. O serviço Single Sign-On 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úblicas e privadas e um certificado X.509 que contenha a chave pública. Depois de ter uma chave pública ou certificado, você precisa registrá-lo no Google. Para isso, basta fazer upload da chave ou do certificado no Google Admin Console.

A maneira de gerar chaves e certificados geralmente depende da plataforma de desenvolvimento e da linguagem de programação preferida. 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 haja muitos métodos para criar pares de chaves pública e privada, a ferramenta de código aberto OpenSSL é uma das mais usadas. Ele foi portado para todas as principais plataformas e oferece uma interface de linha de comando simples para 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. Este exemplo cria uma chave de 2.048 bits, que funciona para quase qualquer finalidade. A chave privada resultante precisa ser mantida em segredo e é usada para assinar e descriptografar dados.

Algumas implementações, principalmente as baseadas em Java, podem exigir DER ou PKCS8, que podem ser gerados, por exemplo, usando 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âmetros DSA, dsaparam.pem, que, neste caso, instrui o OpenSSL a criar uma chave de 2.048 bits na etapa 2. O arquivo dsaparam.pem não é uma chave e pode ser descartado depois que as chaves pública e privada forem criadas. A segunda etapa cria a chave privada no arquivo dsaprivkey.pem, que precisa 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 no formato 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 de uma chave privada RSA ou DSA:

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

Depois que você responder a algumas perguntas, o certificado será criado e salvo como dsacert.pem. Esse é o arquivo que você faz upload no Google Workspace pelo 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 certificado X.509 em si. 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 (substituindo o nome do arquivo .pem do seu certificado):

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 oferece utilitários (no diretório Common7ToolsBin) que podem ser usados para 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 em .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 de troca de informações pessoais (PFX) de um arquivo 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 para o Google Workspace usando o painel de controle. Já o testcert.pfx da etapa 2 pode ser usado para criar uma instância X509Certificate2 (.NET 2.0 ou mais recente) para 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úblicas/privadas com tamanho 2048 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úblicas/privadas com tamanho 2048 e validade de 180 dias usando o algoritmo RSA.

A etapa 2 gera um certificado X.509 (rsasso.cer) da chave pública. Em seguida, faça 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 classes e interfaces principais para gerar e manipular propriedades de segurança. A JCA abrange as partes da API de segurança do SDK Java 2 relacionadas à criptografia. Com essa API, é fácil gerar pares de chaves pública e privada no algoritmo desejado. Confira abaixo um exemplo de código que cria chaves DSA ou RSA para serem usadas com o serviço de 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. Depois de ter as chaves, registre a pública no Google Workspace e use a privada para assinar seu SAMLResponse. Para gerar um par de chaves RSA em vez de DSA, basta substituir "DSA" no código por "RSA".

Registrar seu certificado ou chave pública no Google Workspace

Depois de gerar as chaves e os certificados, a próxima parte é muito 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.