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

Google Workspace предлагает услугу единого входа (SSO) для пользователей Google Workspace или Google Workspace for Education. Сервис единого входа Google Workspace принимает открытые ключи и сертификаты, сгенерированные с использованием алгоритмов RSA или DSA. Для использования сервиса необходимо сгенерировать набор открытых и закрытых ключей, а также сертификат X.509, содержащий открытый ключ. После получения открытого ключа или сертификата его необходимо зарегистрировать в Google. Это можно сделать, просто загрузив ключ или сертификат через консоль администратора Google.

Способ генерации ключей и сертификатов часто зависит от используемой платформы разработки и языка программирования. Ниже приведены несколько различных способов генерации ключей и сертификатов, необходимых для службы единого входа 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 могут использовать утилиту keytool входящую в стандартный JDK, для создания пары открытого/закрытого ключей и сертификата X.509. keytool — это утилита для управления ключами и сертификатами, которая позволяет пользователям управлять своими собственными парами открытых/закрытых ключей и связанными с ними сертификатами для использования в схемах аутентификации, требующих цифровых подписей. keytool хранит ключи и сертификаты в «хранилище ключей», которое по умолчанию представляет собой просто файл ( .keystore ) в домашнем каталоге пользователя. Закрытые ключи защищены паролями.

Создание пар ключей 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 (JCA) предоставляет основные классы и интерфейсы для генерации и управления свойствами безопасности. JCA включает в себя части API безопасности Java 2 SDK, связанные с криптографией. Используя этот API, вы можете легко генерировать пары открытых и закрытых ключей в нужном алгоритме. Ниже приведен пример кода, который создает ключи DSA или RSA для использования со службой единого входа Google Workspace.

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

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

Приведённый выше код использует KeyPairGenerator для создания пары ключей DSA. Сгенерированные ключи будут в двоичном формате и выводятся в отдельные файлы. Получив ключи, вы можете зарегистрировать открытый ключ в Google Workspace и использовать закрытый ключ для подписи вашего SAMLResponse . Чтобы сгенерировать пару ключей RSA вместо DSA, вам нужно всего лишь заменить "DSA" в коде на "RSA" .

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

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