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


было:
  @Override
  public List<String> autoSelectCertificates() {
    return List.of(
        certificateSelector()
            .pattern("https://auth-dmz-ift.sigma.sbrf.ru")
            .issuer("SberCA Test1 Ext", "Sberbank of Russia")
            .subject("16733424", "Sberbank")
            .build()
    );
  }
и оно работает, но я хочу что то такое сделать, тк запускать буду на ВМ, что получает сертификат в креде
  @Override
  public List<String> autoSelectCertificates() {
    String keystoreFile = System.getenv("KEYSTORE_FILE");
    String keystorePassword = System.getenv("KEYSTORE_STRING");
    return List.of(
        certificateSelector()
            .pattern("https://auth-dmz-ift.sigma.sbrf.ru")
            .issuer("SberCA Test1 Ext", "Sberbank of Russia")
            .certPath(keystoreFile, keystorePassword)
            .build()
    );
  }

а это для инфы:
package ru.sber.qa.playwright.utils.cert;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ru.sber.qa.playwright.exception.IllegalConfig;

import javax.annotation.Nonnull;
import javax.naming.InvalidNameException;
import javax.naming.ldap.LdapName;
import javax.naming.ldap.Rdn;
import java.io.FileInputStream;
import java.io.IOException;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import java.util.List;

/**
 * Генератор фильтра для автовыбора сертификата в браузере.
 * @see <a
 * href="https://learn.microsoft.com/en-us/deployedge/microsoft-edge-browser-policies/autoselectcertificateforurls">
 * AutoSelectCertificateForUrls
 * </a>
 *
 * @author AVitaKostousov@sberbank.ru
 */
@SuppressWarnings("unused")
@JsonPropertyOrder({"pattern", "filter"})
public final class CertificateSelector {
    private static final Logger LOGGER = LoggerFactory.getLogger(CertificateSelector.class);
    private static final ObjectMapper MAPPER = new ObjectMapper();
    @JsonProperty("pattern")
    private final String pattern;
    @JsonProperty("filter")
    private final CertificateFilter filter;

    public CertificateSelector(@Nonnull String pattern, @Nonnull CertificateFilter filter) {
        this.pattern = pattern;
        this.filter = filter;
    }

    public static CertificateSelectorBuilder certificateSelector() {
        return new CertificateSelectorBuilder();
    }

    public static class CertificateSelectorBuilder {
        private String pattern;
        private CertificateData issuer;
        private CertificateData subject;

        public CertificateSelectorBuilder() {

        }

        public CertificateSelectorBuilder pattern(String pattern) {
            this.pattern = pattern;
            return this;
        }

        public CertificateSelectorBuilder issuer(String cn) {
            return issuer(cn, null, null, null);
        }

        public CertificateSelectorBuilder issuer(String cn, String o) {
            return issuer(cn, o, null, null);
        }

        public CertificateSelectorBuilder issuer(String cn, String o, String l) {
            return issuer(cn, o, l, null);
        }

        public CertificateSelectorBuilder issuer(String cn, String o, String l, String ou) {
            this.issuer = new CertificateData(cn, l, o, ou);
            return this;
        }

        public CertificateSelectorBuilder subject(String cn) {
            return subject(cn, null, null, null);
        }

        public CertificateSelectorBuilder subject(String cn, String ou) {
            return subject(cn, ou, null, null);
        }

        public CertificateSelectorBuilder subject(String cn, String ou, String l) {
            return subject(cn, ou, l, null);
        }

        public CertificateSelectorBuilder subject(String cn, String ou, String l, String o) {
            this.subject = new CertificateData(cn, l, o, ou);
            return this;
        }

        public CertificateSelectorBuilder cert(X509Certificate cert) {
            try {
                List<Rdn> issuerRdns = new LdapName(cert.getIssuerX500Principal().getName()).getRdns();
                List<Rdn> subjectRdns = new LdapName(cert.getSubjectX500Principal().getName()).getRdns();
                this.issuer = CertificateData.of(issuerRdns);
                this.subject = CertificateData.of(subjectRdns);
            } catch (InvalidNameException e) {
                LOGGER.error("Не удалось обработать сертификат", e);
                throw IllegalConfig.exception("Не удалось обработать сертификат", e);
            }
            return this;
        }

        public CertificateSelectorBuilder certPath(String path) {
            try {
                FileInputStream is = new FileInputStream(path);
                CertificateFactory fac = CertificateFactory.getInstance("X509");
                X509Certificate cert = (X509Certificate) fac.generateCertificate(is);
                cert(cert);
            } catch (IOException e) {
                LOGGER.error("Не удалось прочитать файл сертификата", e);
            } catch (Exception e) {
                LOGGER.error("Не удалось обработать сертификат", e);
                throw IllegalConfig.exception("Не удалось обработать сертификат", e);
            }
            return this;
        }

        public String build() {
            try {
                return MAPPER.writeValueAsString(
                        new CertificateSelector(pattern, new CertificateFilter(issuer, subject))
                );
            } catch (IOException e) {
                throw IllegalConfig.exception("Не удалось настроить сертификат.", e);
            }
        }
    }
}


это для ui автотестов делаем, то что было - локально работает, настраиваю просто на ВМ