다음을 통해 공유


Azure Database for PostgreSQL - 유연한 서버를 사용하여 애플리케이션 클라이언트용 클라이언트 TLS 인증서 업데이트

적용 대상: Azure Database for PostgreSQL - 유연한 서버

인증서 고정 시나리오를 위해 클라이언트의 Java 키 저장소에서 루트 CA 인증서 가져오기

사용자 지정 작성 Java 애플리케이션은 신뢰할 수 있는 CA(인증 기관) 인증서가 포함된 cacerts라는 기본 키 저장소를 사용합니다. Java 신뢰 저장소라고도 합니다. cacerts라는 인증서 파일은 보안 속성 디렉터리인 java.home\lib\security에 있습니다. 여기서 java.home은 런타임 환경 디렉터리(SDK의 jre 디렉터리 또는 Java™ 2 런타임 환경의 최상위 디렉터리)입니다. PostgreSQL 유연한 서버를 사용하여 클라이언트 인증서 고정 시나리오에 대한 클라이언트 루트 CA 인증서를 업데이트하려면 다음 지침을 사용할 수 있습니다.

  1. cacerts Java 키 저장소를 확인하여 필요한 인증서가 이미 포함되어 있는지 확인합니다. 다음 명령을 사용하여 Java 키 저장소에 인증서를 나열할 수 있습니다.
  keytool -list -v -keystore ..\lib\security\cacerts > outputfile.txt

필요한 인증서가 클라이언트의 Java 키 저장소에 없는 경우 출력에서 체크 인할 수 있듯이 다음 지침을 진행해야 합니다.

  1. 사용자 지정 키 저장소의 백업 복사본을 만듭니다.

  2. 인증서를 다운로드하고 이러한 인증서를 참조할 수 있는 위치에 로컬로 저장합니다.

  3. 필요한 모든 루트 CA 인증서가 모두 포함된 결합된 CA 인증서 저장소를 생성합니다. 아래 예제에서는 PostgreSQL JDBC 사용자에게 DefaultJavaSSLFactory를 사용하는 방법을 보여줍니다.

        keytool -importcert -alias PostgreSQLServerCACert  -file D:\ DigiCertGlobalRootG2.crt.pem   -keystore truststore -storepass password -noprompt
    
        keytool -importcert -alias PostgreSQLServerCACert2  -file "D:\ Microsoft ECC Root Certificate Authority 2017.crt.pem" -keystore truststore -storepass password  -noprompt
    
        keytool -importcert -alias PostgreSQLServerCACert  -file D:\ DigiCertGlobalRootCA.crt.pem   -keystore truststore -storepass password -noprompt
    
  4. 원래 키 저장소 파일을 새로 생성된 파일로 바꿉니다.

    System.setProperty("javax.net.ssl.trustStore","path_to_truststore_file");
    System.setProperty("javax.net.ssl.trustStorePassword","password");
    
  5. 원래 루트 CA pem 파일을 결합된 루트 CA 파일로 바꾸고, 응용 프로그램/클라이언트를 다시 시작합니다.

PostgreSQL JDBC 드라이버를 사용하여 클라이언트 인증서를 구성하는 방법에 대한 자세한 내용은 이 설명서를 참조하세요.

참고 항목

인증서를 클라이언트 인증서 저장소로 가져오려면 인증서 .crt 파일을 .pem 형식으로 변환해야 합니다. OpenSSL 유틸리티를 사용하여 이러한 파일 변환을 수행할 수 있습니다.

Java 키 저장소에서 프로그래밍 방식으로 신뢰할 수 있는 인증서 목록 가져오기

위에서 설명한 대로 Java는 기본적으로 신뢰할 수 있는 인증서를 클라이언트의 Java 설치 폴더 내에 있는 cacerts라고 명명된 특수 파일에 저장합니다. 아래 예제에서는 먼저 cacerts를 읽고 이를 KeyStore 개체에 로드합니다.

private KeyStore loadKeyStore() {
    String relativeCacertsPath = "/lib/security/cacerts".replace("/", File.separator);
    String filename = System.getProperty("java.home") + relativeCacertsPath;
    FileInputStream is = new FileInputStream(filename);
    KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
    String password = "changeit";
    keystore.load(is, password.toCharArray());

    return keystore;
}

관리자가 Java 설치 후 즉시 암호를 변경할 것을 권유하므로 cacerts 기본 암호는 changeit이지만 실제 클라이언트에서는 달라야 합니다. KeyStore 개체를 로드한 후에는 PKIXParameters 클래스를 사용하여 존재하는 인증서를 읽을 수 있습니다.

public void whenLoadingCacertsKeyStore_thenCertificatesArePresent() {
    KeyStore keyStore = loadKeyStore();
    PKIXParameters params = new PKIXParameters(keyStore);
    Set<TrustAnchor> trustAnchors = params.getTrustAnchors();
    List<Certificate> certificates = trustAnchors.stream()
      .map(TrustAnchor::getTrustedCert)
      .collect(Collectors.toList());

    assertFalse(certificates.isEmpty());
}

인증서 고정 시나리오를 위해 Azure Database for PostgreSQL - 유연한 서버를 사용해 Azure App Services에서 클라이언트를 사용하는 경우 루트 CA 인증서를 업데이트합니다.

Azure Database for PostgreSQL에 연결하는 Azure App Services의 경우, 클라이언트 인증서를 업데이트하는 것에 대한 두 가지 시나리오가 있으며 이는 Azure App Services에 배포된 애플리케이션을 통해 SSL을 사용하는 방식에 따라 다릅니다.

  • Azure Database for PostgreSQL - 유연한 서버가 변경되기 전에 플랫폼 수준에서 App Service에 새 인증서가 추가됩니다. 응용 프로그램의 App Service 플랫폼에 포함된 SSL 인증서를 사용하는 경우에는 아무 작업도 필요하지 않습니다. 자세한 내용은 Azure App Service 설명서를 참조하세요.
  • 코드에 SSL 인증서 파일 경로를 명시적으로 포함하는 경우 새 인증서를 다운로드하고 새 인증서를 사용하도록 코드를 업데이트해야 합니다. 이 시나리오의 좋은 예는 App Service 설명서에서 공유한 대로 App Service에서 사용자 지정 컨테이너를 사용하는 경우입니다.

인증서 고정 시나리오를 위해 Azure Database for PostgreSQL - 유연한 서버를 사용해 AKS(Azure Kubernetes Services)에서 클라이언트를 사용하는 경우 루트 CA 인증서를 업데이트합니다.

AKS(Azure Kubernetes Services)에 호스트된 애플리케이션과 고정 인증서를 사용하여 Azure Database for PostgreSQL에 연결하려는 경우 전용 고객 호스트 환경에서 액세스하는 것과 유사합니다. 여기의 단계를 참조하세요.

인증서 고정 시나리오를 위해 Azure Database for PostgreSQL - 유연한 서버를 사용해 Windows의 .NET(Npgsql) 사용자의 루트 CA 인증서 업데이트

Windows의 .NET(Npgsql) 사용자의 경우, Azure Database for PostgreSQL - 유연한 서버에 연결하면 3가지 Microsoft RSA 루트 인증 기관 2017, DigiCert 전역 루트 G2 및 DigiCert 전역 루트 CA가 Windows 인증서 저장소와 신뢰할 수 있는 루트 인증 기관 내에 모두 존재하는지 확인할 수 있습니다. 인증서가 없는 경우 누락된 인증서를 가져옵니다.

인증서 고정 시나리오를 위해 다른 클라이언트에 대한 루트 CA 인증서 업데이트

다른 PostgreSQL 클라이언트 사용자의 경우 아래 형식과 같은 두 개의 CA 인증서 파일을 병합할 수 있습니다.

-----BEGIN CERTIFICATE-----
(Root CA1: DigiCertGlobalRootCA.crt.pem)
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
(Root CA2: Microsoft ECC Root Certificate Authority 2017.crt.pem)
-----END CERTIFICATE-----