LocalCertificateChainProvider.java
package io.mersel.dss.signer.api.services.certificate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.StringUtils;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.List;
/**
* Yerel dosyalardan sertifika zinciri oluşturur.
* Çevrimiçi zincir oluşturma başarısız olduğunda kullanılan yedek yöntemdir.
*/
public class LocalCertificateChainProvider implements CertificateChainProvider {
private static final Logger LOGGER = LoggerFactory.getLogger(LocalCertificateChainProvider.class);
private final String issuerCertificatePath;
private final String caCertificatePath;
public LocalCertificateChainProvider(String issuerCertificatePath, String caCertificatePath) {
this.issuerCertificatePath = issuerCertificatePath;
this.caCertificatePath = caCertificatePath;
}
@Override
public List<X509Certificate> buildChain(X509Certificate cert) throws Exception {
List<X509Certificate> chain = new ArrayList<>();
// Not: Yaprak sertifika burada eklenmez - orkestratör tarafından eklenir
if (StringUtils.hasText(issuerCertificatePath)) {
try {
X509Certificate issuer = loadCertificate(issuerCertificatePath);
chain.add(issuer);
LOGGER.debug("Issuer sertifikası yüklendi: {}", issuerCertificatePath);
} catch (Exception e) {
LOGGER.warn("Issuer sertifikası yüklenemedi: {}", issuerCertificatePath);
}
}
if (StringUtils.hasText(caCertificatePath)) {
try {
X509Certificate ca = loadCertificate(caCertificatePath);
chain.add(ca);
LOGGER.debug("CA sertifikası yüklendi: {}", caCertificatePath);
} catch (Exception e) {
LOGGER.warn("CA sertifikası yüklenemedi: {}", caCertificatePath);
}
}
LOGGER.info("Yerel dosyalardan {} sertifika ile zincir oluşturuldu", chain.size());
return chain;
}
@Override
public int getPriority() {
return 50; // Çevrimiçiden daha düşük öncelik
}
private X509Certificate loadCertificate(String filePath) throws Exception {
try (InputStream in = Files.newInputStream(Paths.get(filePath))) {
CertificateFactory factory = CertificateFactory.getInstance("X.509");
return (X509Certificate) factory.generateCertificate(in);
}
}
}