Генерация ключей и сертификатов для единого входа (SSO)

Google Workspace offers the Single Sign-On (SSO) service to customers with Google Workspace or Google Workspace for Education. The Google Workspace Single Sign-On service accepts public keys and certificates generated with either the RSA or DSA algorithm. To use the service, you need to generate the set of public and private keys and an X.509 certificate that contains the public key. Once you have a public key or certificate, you would then need to register it with Google. You can do this by simply uploading the key or certificate via your Google Admin console.

Способ генерации ключей и сертификатов часто зависит от используемой платформы разработки и языка программирования. Ниже приведены несколько различных способов генерации ключей и сертификатов, необходимых для службы единого входа Google Workspace.

Использование OpenSSL

Хотя существует множество методов создания пар открытых и закрытых ключей, инструмент с открытым исходным кодом OpenSSL является одним из самых популярных. Он был портирован на все основные платформы и предоставляет простой интерфейс командной строки для генерации ключей.

Создайте закрытый ключ RSA.

Генерация закрытого ключа RSA с помощью OpenSSL включает всего один шаг:

openssl genrsa -out rsaprivkey.pem 2048

Эта команда генерирует закрытый ключ в формате PEM и сохраняет его в файле rsaprivkey.pem . В этом примере создается 2048-битный ключ, который должен подойти практически для любых целей. Полученный закрытый ключ следует хранить в секрете и использовать для подписи и расшифровки данных.

Для некоторых реализаций, особенно основанных на Java, могут потребоваться форматы DER или PKCS8, которые, например, можно сгенерировать, выполнив следующие дополнительные шаги:

  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

На первом шаге генерируется открытый ключ в формате DER.

На шаге 2 генерируется закрытый ключ в форматах pkcs8 и DER. После генерации вы можете использовать эти ключи ( rsapubkey.der и rsaprivkey.der ).

Создайте закрытый ключ DSA.

Генерация ключей DSA включает два этапа:

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

На первом этапе создается файл параметров DSA, dsaparam.pem , который в данном случае указывает OpenSSL создать 2048-битный ключ на втором этапе. Сам файл dsaparam.pem не является ключом и может быть удален после создания открытого и закрытого ключей. На втором этапе фактически создается закрытый ключ в файле dsaprivkey.pem , который должен храниться в секрете.

Для экспорта ключа в формат DER (двоичный) можно выполнить следующие шаги:

  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

На первом шаге открытый ключ извлекается в формат DER.

На шаге 2 закрытый ключ преобразуется в форматы pkcs8 и DER. После этого вы можете использовать эту пару открытого ( dsapubkey.der ) и закрытого ( dsaprivkey.der ) ключей.

Создать сертификат

Получив пару ключей, легко создать сертификат X.509. Сертификат содержит соответствующий открытый ключ, а также некоторые метаданные, относящиеся к организации, создавшей сертификат. Выполните следующие шаги, чтобы создать самоподписанный сертификат из закрытого ключа RSA или DSA:

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

После ответа на ряд вопросов будет создан и сохранен сертификат в формате dsacert.pem . Именно этот файл вы загружаете в Google Workspace через панель управления при настройке единого входа (SSO).

Создать отпечаток сертификата

Для некоторых приложений требуется отпечаток сертификата X.509, а не сам сертификат X.509. Отпечаток представляет собой дайджест сертификата в двоичном формате X.509. Тип отпечатка зависит от алгоритма, используемого для его генерации, например, SHA-1 или SHA-256.

Для создания отпечатка SHA-256 из сертификата X.509 используйте следующую команду (заменив фактическое имя файла сертификата .pem):

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

Использование Microsoft Visual Studio для .NET

Microsoft Visual Studio 2005 предоставляет утилиты (в каталоге Common7ToolsBin ), которые можно использовать для генерации сертификата для работы с Google Workspace. Выполните следующие шаги, чтобы создать пару открытого и закрытого ключей и сертификат в .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

По умолчанию в приведенных выше командах используется алгоритм RSA. На шаге 1 с помощью инструмента создания сертификатов ( makecert.exe ) создается самоподписанный сертификат X.509 с именем testcert.cer и соответствующий закрытый ключ.

На шаге 2 используется инструмент pvk2pfx ( pvk2pfx.exe ) для создания файла обмена персональной информацией (PFX) из файлов CER и PVK. Файл PFX содержит как ваш открытый, так и закрытый ключ.

Созданный на шаге 1 файл testcert.cer можно загрузить в Google Workspace с помощью панели управления; а testcert.pfx , созданный на шаге 2, можно использовать для создания экземпляра X509Certificate2 (.NET 2.0+) для подписи SAML-ответа.

Использование Keytool в Java

Java developers can use the keytool utility found in the standard JDK to create the public/private key pair and X.509 certificate. keytool is a key and certificate management utility that allows users to administer their own public/private key pairs and associated certificates for use in authentication schemes requiring digital signatures. keytool stores keys and certificates in a "keystore" which for the default implementation is simply a file ( .keystore ) in the user's home directory. Private keys are guarded with passwords.

Создание пар ключей DSA

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

На первом этапе генерируется пара открытого/закрытого ключей размером 2048 символов со сроком действия 180 дней с использованием алгоритма DSA.

На шаге 2 генерируется сертификат X.509 ( dsasso.cer ) на основе открытого ключа. Затем вы загружаете файл dsasso.cer в Google Workspace с помощью панели управления.

Создание пар ключей RSA

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

На первом этапе генерируется пара открытого/закрытого ключей размером 2048 символов со сроком действия 180 дней с использованием алгоритма RSA.

На шаге 2 генерируется сертификат X.509 ( rsasso.cer ) на основе открытого ключа. Затем вы загружаете rsasso.cer в Google Workspace с помощью панели управления.

Использование криптографической архитектуры Java

Java Cryptography Architecture (JCA) provides core classes and interfaces to generate and manipulate security properties. The JCA encompasses the parts of the Java 2 SDK Security API related to cryptography. Using this API, you can easily generate public and private key pairs in the desired algorithm. Below is a sample code that creates DSA or RSA keys to be used with the Google Workspace SSO service.

Создайте пару открытого и закрытого ключей.

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

The code above uses the KeyPairGenerator to create a pair of DSA keys. The generated keys will be in binary format and are output into individual files. Once you have the keys, you can register the public key with Google Workspace and use the private key to sign your SAMLResponse . To generate a pair of RSA keys instead of DSA, all you need to do is to replace "DSA" in the code with "RSA" .

Зарегистрируйте свой сертификат или открытый ключ в Google Workspace.

После того, как вы справились со сложной частью — генерацией ключей и сертификатов, — следующий шаг очень прост. Чтобы зарегистрировать свой сертификат или открытый ключ в Google Workspace, вам нужно перейти в консоль администратора и войти в систему как администратор. Выберите «Безопасность» , затем «Настройка единого входа (SSO)» и заполните все поля на странице в разделе «Настройка SSO с использованием стороннего поставщика идентификации» .