SSO용 키 및 인증서 생성하기

Google Workspace는 Google Workspace 또는 Google Workspace for Education을 사용하는 고객에게 싱글 사인온 (SSO) 서비스를 제공합니다. Google Workspace 싱글 사인온 서비스는 RSA 또는 DSA 알고리즘으로 생성된 공개 키와 인증서를 허용합니다. 서비스를 사용하려면 공개 키와 비공개 키의 집합과 공개 키가 포함된 X.509 인증서를 생성해야 합니다. 공개 키 또는 인증서가 있으면 Google에 등록해야 합니다. Google 관리 콘솔을 통해 키 또는 인증서를 업로드하면 됩니다.

키와 인증서를 생성하는 방법은 개발 플랫폼과 프로그래밍 언어 선호도에 따라 달라지는 경우가 많습니다. Google Workspace SSO 서비스에 필요한 키와 인증서를 생성하는 방법은 여러 가지가 있습니다.

OpenSSL 사용

공개 및 비공개 키 쌍을 만드는 방법은 여러 가지가 있지만 오픈소스 OpenSSL 도구가 가장 널리 사용됩니다. 모든 주요 플랫폼으로 포팅되었으며 키 생성을 위한 간단한 명령줄 인터페이스를 제공합니다.

RSA 비공개 키 만들기

OpenSSL을 사용해서 RSA 비공개 키를 생성하려면 다음 한 단계만 수행하면 됩니다.

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를 만듭니다. 이 경우 2단계에서 OpenSSL이 2048비트 키를 만들도록 지시합니다. dsaparam.pem 파일은 키 자체가 아니며 공개 키와 비공개 키가 생성된 후에는 삭제할 수 있습니다. 2단계에서는 실제로 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로 저장됩니다. SSO를 구성할 때 제어판을 통해 Google Workspace에 업로드하는 파일입니다.

인증서 지문 만들기

일부 애플리케이션에는 X.509 인증서 자체가 아닌 X.509 인증서 지문이 필요합니다. 지문은 x509 바이너리 형식의 인증서 다이제스트입니다. 지문 유형은 SHA-1 또는 SHA-256과 같이 지문을 생성하는 데 사용된 알고리즘에 따라 달라집니다.

X.509 인증서에서 SHA-256 지문을 만들려면 다음 명령어를 사용하세요 (실제 인증서 .pem 파일 이름으로 대체).

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

.NET용 Microsoft Visual Studio 사용

Microsoft Visual Studio 2005는 Google Workspace에서 사용할 인증서를 생성하는 데 사용할 수 있는 유틸리티 (Common7ToolsBin 디렉터리)를 제공합니다. 다음 단계에 따라 .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)를 사용하여 testcert.cer라는 자체 서명 X.509 인증서와 해당 비공개 키를 만듭니다.

2단계에서는 pvk2pfx 도구 (pvk2pfx.exe)를 사용하여 CER 및 PVK 파일에서 개인 정보 교환 (PFX) 파일을 만듭니다. PFX에는 공개 키와 비공개 키가 모두 포함됩니다.

1단계에서 만든 testcert.cer 파일은 제어판을 사용하여 Google Workspace에 업로드할 수 있으며, 2단계의 testcert.pfx는 SAML 응답에 서명하기 위한 X509Certificate2 (.NET 2.0 이상) 인스턴스를 만드는 데 사용할 수 있습니다.

자바의 Keytool 사용

Java 개발자는 표준 JDK에 있는 keytool 유틸리티를 사용하여 공개/비공개 키 쌍과 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단계에서는 DSA 알고리즘을 사용하여 크기가 2048이고 유효 기간이 180일인 공개/비공개 키 쌍을 생성합니다.

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단계에서는 RSA 알고리즘을 사용하여 크기가 2048이고 유효 기간이 180일인 공개 키/비공개 키 쌍을 생성합니다.

2단계에서는 공개 키에서 X.509 인증서 (rsasso.cer)를 생성합니다. 그런 다음 제어판을 사용하여 rsasso.cer를 Google Workspace에 업로드합니다.

Java Cryptography Architecture 사용

Java 암호화 아키텍처 (JCA)는 보안 속성을 생성하고 조작하는 핵심 클래스와 인터페이스를 제공합니다. JCA는 암호화와 관련된 Java 2 SDK 보안 API의 부분을 포함합니다. 이 API를 사용하면 원하는 알고리즘으로 공개 키 및 비공개 키 쌍을 쉽게 생성할 수 있습니다. 다음은 Google Workspace SSO 서비스와 함께 사용할 DSA 또는 RSA 키를 만드는 샘플 코드입니다.

공개 키와 비공개 키 쌍 만들기

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에 서명할 수 있습니다. DSA 대신 RSA 키 쌍을 생성하려면 코드에서 "DSA"를 "RSA"로 바꾸기만 하면 됩니다.

Google Workspace에 인증서 또는 공개 키 등록

키와 인증서를 생성하는 까다로운 부분을 완료하면 다음 부분은 정말 간단합니다. Google Workspace에 인증서 또는 공개 키를 등록하려면 관리 콘솔로 이동하여 관리자로 로그인해야 합니다. 보안, 싱글 사인온 (SSO) 설정을 선택한 다음 서드 파티 ID 프로바이더로 SSO 설정 아래 페이지의 모든 필드를 작성합니다.