Openssl 개인키 유효기간 확인 방법

Google Workspace에서는 Google Workspace 또는 Google Workspace for Education을 사용하는 고객에게 싱글 사인온(SSO) 서비스를 제공합니다. Google Workspace 싱글 사인온(SSO) 서비스는   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

첫 번째 단계에서는 dsaparam.pem이라는 DSA 매개변수 파일을 만듭니다. 이 경우 DSA 매개변수 파일은 OpenSSL에 2단계에서 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

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"

Microsoft Visual Studio 2005는 Google Workspace에서 사용할 인증서를 생성하는 데 사용할 수 있는 유틸리티(Common7\Tools\Bin 디렉터리에 있음)를 제공합니다. .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+) 인스턴스를 만들 수 있습니다.

자바 개발자는 표준 JDK에 있는 keytool 유틸리티를 사용하여 공개/비공개 키 쌍과 X.509 인증서를 만들 수 있습니다. keytool은 사용자가 자신의 공개 키/비공개 키 쌍 및 관련 인증서를 관리하여 디지털 서명이 필요한 인증 체계에서 사용할 수 있게 해주는 키 및 인증서 관리 유틸리티입니다. keytool은 키와 인증서를 'keystore'에 저장합니다. 기본 구현의 경우 사용자의 홈 디렉터리에 있는 파일('.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 사용

JCA(Java Cryptography Architecture)는 보안 속성을 생성 및 처리할 수 있는 핵심 클래스 및 인터페이스를 제공합니다. JCA는 암호화와 관련된 Java 2 SDK Security 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에 등록하고 비공개 키를 사용하여 SAML 응답에 서명할 수 있습니다. DSA 대신 RSA 키 쌍을 생성하려면 코드의 'DSA'를 'RSA'로 바꾸기만 하면 됩니다.

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

키와 인증서를 생성하는 어려운 부분을 완료하고 나면 나머지 단계는 정말 간단합니다. 인증서 또는 공개 키를 Google Workspace에 등록하려면 관리 콘솔로 이동하여 관리자로 로그인해야 합니다. 보안을 선택한 다음 싱글 사인온(SSO) 설정을 선택하고 타사 ID 공급업체에 SSO 설정 아래 페이지의 모든 입력란을 작성하세요.

도움이 되었나요?

어떻게 하면 개선할 수 있을까요?