Загрузка данных


  @Override
  public List<String> autoSelectCertificates() {
    String keystoreFile = "src/main/resources/16733424.p12";
    String keystorePassword = "sAB33333";
    String selector = CertificateSelectorFactory.fromP12(
        "https://auth-dmz-ift.sigma.sbrf.ru",
        keystoreFile,
        keystorePassword
    );
    System.out.println("[CustomPlaywrightServiceConfiguration] Auto-select certificate loaded: " + selector);
    return List.of(selector);
  }

public final class CertificateUtils {

  private CertificateUtils() {
  }

  public static X509Certificate loadCertificate(String path, String password) {
    return loadCertificateChain(path, password).stream().findFirst()
        .orElseThrow(() -> new IllegalStateException("=== В PKCS12 не найден X509 сертификат ==="));
  }

  /**
   * Загружает всю цепочку сертификатов из PKCS12.
   * Возвращает список: [end-entity, intermediate..., root].
   */
  public static List<X509Certificate> loadCertificateChain(String path, String password) {
    List<X509Certificate> chain = new ArrayList<>();
    try (InputStream is = Files.newInputStream(Paths.get(path))) {

      KeyStore keyStore = KeyStore.getInstance("PKCS12");
      keyStore.load(is, password.toCharArray());

      Enumeration<String> aliases = keyStore.aliases();

      while (aliases.hasMoreElements()) {
        String alias = aliases.nextElement();

        if (keyStore.isKeyEntry(alias)) {
          Certificate[] certs = keyStore.getCertificateChain(alias);

          if (certs != null) {
            for (Certificate cert : certs) {
              if (cert instanceof X509Certificate x509) {
                chain.add(x509);
              }
            }
          }
          break;
        }
      }

    } catch (Exception e) {
      throw new RuntimeException("=== Не удалось прочитать сертификат ===", e);
    }

    if (chain.isEmpty()) {
      throw new IllegalStateException("=== В PKCS12 не найден X509 сертификат ===");
    }

    return chain;
  }
}

public final class CertificateSelectorFactory {

  private CertificateSelectorFactory() {
  }

  public static String fromP12(
      String pattern,
      String path,
      String password) {

    List<X509Certificate> chain =
        CertificateUtils.loadCertificateChain(path, password);

    return CertificateSelector
        .certificateSelector()
        .pattern(pattern)
        .certs(chain)
        .build();
  }

}