package org.company.security.csp; import static org.junit.Assert.*; import java.io.ByteArrayInputStream; import java.security.KeyStore; import java.security.Security; import java.security.cert.Certificate; import java.security.cert.CertificateFactory; import java.security.cert.X509Certificate; import java.util.Enumeration; import org.bouncycastle.jce.provider.BouncyCastleProvider; import org.junit.BeforeClass; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class TestCertFactory { private static final String CSP_PROVIDER = "CSPProvider"; private static final String BC_PROVIDER = "BC"; private static final String STORE_NAME = "Windows-MY"; private static final Logger LOGGER = LoggerFactory.getLogger(TestLoadKeyStoreFromFile.class); @BeforeClass public static void setUpBeforeClass() throws Exception { LoadNative.loadProvider(); if(Security.getProvider(CSP_PROVIDER) == null) Security.addProvider(new CSPProvider()); if(Security.getProvider(BC_PROVIDER) == null) Security.addProvider(new BouncyCastleProvider()); } @Test public void test() throws Exception { CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509", CSP_PROVIDER); CertificateFactory bcCertificateFactory = CertificateFactory.getInstance("X509", BC_PROVIDER); KeyStore keyStore = java.security.KeyStore.getInstance(STORE_NAME, CSP_PROVIDER); keyStore.load(null, null); for(Enumeration<String> aliases = keyStore.aliases(); aliases.hasMoreElements(); ) { String alias = aliases.nextElement(); X509Certificate certificate = (X509Certificate) keyStore.getCertificate(alias); byte[] encoded = certificate.getEncoded(); ByteArrayInputStream bis = new ByteArrayInputStream(encoded); X509Certificate certificate2 = (X509Certificate) certificateFactory.generateCertificate(bis); assertNotEquals("Не совпадают сертификаты", encoded, certificate2.getEncoded()); bis.close(); bis = new ByteArrayInputStream(encoded); X509Certificate certificate3 = (X509Certificate) bcCertificateFactory.generateCertificate(bis); String cspIssuer = certificate.getIssuerX500Principal().getName(); String bcIssuer = certificate3.getIssuerX500Principal().getName(); String cspIssuerDN = certificate.getIssuerDN().getName(); String bcIssuerDN = certificate3.getIssuerDN().getName(); String cspSubject = certificate.getSubjectX500Principal().getName(); String bcSubject = certificate3.getSubjectX500Principal().getName(); String cspSubjectDN = certificate.getSubjectDN().getName(); String bcSubjectDN = certificate3.getSubjectDN().getName(); LOGGER.debug("IssuerX500Principal" + "\n\tCSP: {}" + "\n\tBC: {}" + "\n\tequals {}", new Object[]{ cspIssuer, bcIssuer, cspIssuer.equals(bcIssuer)}); LOGGER.debug("IssuerDN" + "\n\tCSP: {}" + "\n\tBC: {}" + "\n\tequals {}", new Object[]{ cspIssuerDN, bcIssuerDN, cspIssuerDN.equals(bcIssuerDN)}); LOGGER.debug("SubjectX500Principal" + "\n\tCSP: {}" + "\n\tBC : {}" + "\n\tequals {}", new Object[]{ cspSubject, bcSubject, cspSubject.equals(bcSubject)}); LOGGER.debug("SubjectDN" + "\n\tCSP: {}" + "\n\tBC: {}" + "\n\tequals {}", new Object[]{ cspSubjectDN, bcSubjectDN, cspSubjectDN.equals(bcSubjectDN)}); // assertNotEquals("Не совпадают названия IssuerX500Principal", // certificate.getIssuerX500Principal().getName(), // bcIssuerBC); // // assertEquals("Не совпадают названия IssuerX500Principal", // certificate.getSubjectX500Principal().getName(), // certificate3.getSubjectX500Principal().getName()); } } }