Поделиться через


Обновление сертификатов TLS клиента для клиентов приложений с помощью База данных Azure для PostgreSQL — гибкий сервер

Область применения: гибкий сервер Базы данных Azure для PostgreSQL

Импорт сертификатов корневого ЦС в Хранилище ключей Java на клиенте для сценариев закрепления сертификатов

Пользовательские приложения Java используют хранилище ключей по умолчанию, которое называется cacerts, которое содержит сертификаты доверенного центра сертификации (ЦС). Он также часто называется хранилищем доверия Java. Файл сертификатов с именем cacerts находится в каталоге свойств безопасности, java.home\lib\security, где java.home — это каталог среды выполнения (каталог jre в пакете SDK или каталог верхнего уровня среды выполнения Java™ 2). Чтобы обновить сертификаты корневого ЦС клиента для сценариев закрепления сертификатов клиента с помощью гибкого сервера PostgreSQL, можно использовать следующие инструкции.

  1. Проверьте хранилище ключей java cacerts , чтобы узнать, содержит ли он уже необходимые сертификаты. Вы можете перечислить сертификаты в хранилище ключей Java с помощью следующей команды:
  keytool -list -v -keystore ..\lib\security\cacerts > outputfile.txt

Если необходимые сертификаты отсутствуют в хранилище ключей Java на клиенте, так как их можно проверка в выходных данных, следует продолжить следующие инструкции:

  1. Создайте резервную копию пользовательского хранилища ключей.

  2. Скачивание сертификатов

  3. Создание объединенного хранилища сертификатов ЦС с обоими сертификатами корневого ЦС включается. В приведенном ниже примере показано использование DefaultJavaSSLFactory для пользователей JDBC PostgreSQL.

    • Для подключения к серверам, развернутых в Azure для государственных организаций облачных регионах (US Gov Вирджиния, US Gov Техас, US Gov Аризона)
    
    
        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
    
    • Подключение к серверам, развернутых в общедоступных регионах Azure по всему миру
    
         keytool -importcert -alias PostgreSQLServerCACert  -file D:\ DigiCertGlobalRootCA.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
    
  4. Замените исходный файл хранилища ключей новым созданным:

    System.setProperty("javax.net.ssl.trustStore","path_to_truststore_file");
    System.setProperty("javax.net.ssl.trustStorePassword","password");
    
  5. Замените исходный PEM-файл корневого ЦС объединенным файлом корневого ЦС и перезапустите приложение или клиент.

Дополнительные сведения о настройке сертификатов клиента с помощью драйвера JDBC PostgreSQL см. в этой документации.

Примечание.

Чтобы импортировать сертификаты в хранилища сертификатов клиента, может потребоваться преобразовать файлы CRT сертификата в pem-формат. Вы?.. может использовать служебную программу OpenSSL для выполнения этих преобразований файлов.

Получение списка доверенных сертификатов в Хранилище ключей Java программным способом

Как указано выше, Java по умолчанию сохраняет доверенные сертификаты в специальном файле с именем cacerts , расположенном в папке установки Java на клиенте. Пример ниже сначала считывает 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;
}

Пароль по умолчанию для cacerts имеет значение changeit, но должен отличаться в реальном клиенте, так как администраторы рекомендуют изменять пароль сразу после установки Java. После загрузки объекта 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 с помощью База данных Azure для PostgreSQL — гибкий сервер для сценариев закрепления сертификатов

Для служб приложение Azure, подключающихся к База данных Azure для PostgreSQL, можно использовать два возможных сценария обновления сертификатов клиента, и это зависит от того, как вы используете SSL с приложением, развернутом в службах приложение Azure.

  • Обычно новые сертификаты добавляются в Служба приложений на уровне платформы до изменений в База данных Azure для PostgreSQL — гибкий сервер. Если вы используете в приложении SSL-сертификаты, включенные в платформу Службы приложений, то никаких действий не требуется. Дополнительные сведения см. в документации по службе приложение Azure.
  • Если вы явно включаете путь к файлу SSL-сертификата в коде, вам потребуется скачать новый сертификат и обновить код для использования нового сертификата. Хорошим примером этого сценария является использование пользовательских контейнеров в Служба приложений, как показано в документации по Служба приложений

Обновление сертификатов корневого ЦС при использовании клиентов в Служба Azure Kubernetes (AKS) с помощью База данных Azure для PostgreSQL — гибкий сервер для сценариев закрепления сертификатов

Если вы пытаетесь подключиться к База данных Azure для PostgreSQL с помощью приложений, размещенных в Служба Azure Kubernetes (AKS) и закреплении сертификатов, это похоже на доступ из выделенной среды размещения клиентов. Ознакомьтесь с этими инструкциями.

Обновление сертификатов корневого ЦС для пользователей .NET (Npgsql) в Windows с помощью База данных Azure для PostgreSQL — гибкий сервер для сценариев закрепления сертификатов

Для пользователей .NET (Npgsql) в Windows, подключаясь к База данных Azure для PostgreSQL — гибкие серверы, развернутые в Azure для государственных организаций облачных регионах (US Gov Вирджиния, US Gov Техас, US Gov Аризона) убедитесь, что оба варианта Корневой центр сертификации Microsoft RSA 2017 и DigiCert Global Root G2 существуют в хранилище сертификатов Windows, доверенных корневых центров сертификации. Если какие либо из этих сертификатов в нем отсутствуют, импортируйте их.

Для пользователей .NET (Npgsql) в Windows подключение к База данных Azure для PostgreSQL — гибкие серверы, развернутые в общедоступных регионах Azure во всем мире, убедитесь, что центр сертификации Microsoft RSA Root Authority 2017 и DigiCert Global Root CA существуют в Хранилище сертификатов Windows, доверенные корневые центры сертификации. Если какие либо из этих сертификатов в нем отсутствуют, импортируйте их.

Обновление сертификатов корневого ЦС для других клиентов для сценариев закрепления сертификатов

Для других пользователей клиента PostgreSQL можно объединить два файла сертификата ЦС, как показано ниже.



-----BEGIN CERTIFICATE-----
(Root CA1: DigiCertGlobalRootCA.crt.pem)
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
(Root CA2: Microsoft ECC Root Certificate Authority 2017.crt.pem)
-----END CERTIFICATE-----
  • Узнайте, как создать гибкий экземпляр сервера База данных Azure для PostgreSQL с помощью параметра "Приватный доступ" (интеграция с виртуальной сетью) в портал Azure или Azure CLI.
  • Узнайте, как создать гибкий экземпляр База данных Azure для PostgreSQL сервера с помощью параметра общедоступного доступа (разрешенных IP-адресов) в портал Azure или Azure CLI.