Создание ключей и сертификатов для системы единого входа

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

Способ создания ключей и сертификатов часто зависит от платформы разработки и предпочитаемого языка программирования. Ниже описано несколько способов создать ключи и сертификат, необходимые для сервиса SSO 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

На шаге 1 генерируется открытый ключ в формате 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-битный ключ на шаге 2. Файл 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

На шаге 1 открытый ключ экспортируется в формат 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, а не сам сертификат. Цифровой отпечаток – это дайджест сертификата в двоичном формате x509. Тип отпечатка зависит от алгоритма, использованного для его создания, например 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 с помощью инструмента Certificate Creation (Создание сертификата) (makecert.exe) создается самоподписанный сертификат X.509 с названием testcert.cer и соответствующий закрытый ключ.

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

Файл testcert.cer, созданный на шаге 1, можно загрузить в 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

На шаге 1 создается пара открытого и закрытого ключей размером 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

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

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

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

Java Cryptography Architecture (JCA) предоставляет основные классы и интерфейсы для создания и управления свойствами безопасности. JCA включает части Java 2 SDK Security API, связанные с криптографией. С помощью этого 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();
   }
  }
}

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

Как зарегистрировать сертификат или открытый ключ в Google Workspace

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