Загрузка данных
было:
@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 автотестов делаем, то что было - локально работает, настраиваю просто на ВМ