package org.company.security.csp; import java.io.File; import java.io.FileInputStream; import java.security.KeyStore; import java.security.Provider; import java.security.Security; import java.security.cert.X509Certificate; import java.util.Enumeration; import org.bouncycastle.jce.provider.BouncyCastleProvider; import org.bouncycastle.x509.X509CollectionStoreParameters; import org.bouncycastle.x509.X509Store; import org.junit.After; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TestName; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class TestLoadKeyStoreFromFile { private static final String KEYSTORE_FILE = "target/test-classes/cert.sst"; private static final Logger LOGGER = LoggerFactory.getLogger(TestLoadKeyStoreFromFile.class); private static final String PROVIDER_NAME = "CSPProvider"; private static final String STORE_NAME = "FILE"; private static Provider cspProvider; @BeforeClass public static void setUpBeforeClass() throws Exception { LoadNative.loadProvider(); if(Security.getProvider(PROVIDER_NAME) == null) Security.addProvider(new CSPProvider()); cspProvider = Security.getProvider(PROVIDER_NAME); } @Rule public TestName testName = new TestName(); @Before public void setUp() throws Exception { LOGGER.info("********************************************************************************"); LOGGER.info("Testing: " + getTestMethodName() + "(" + getClass().getName() + ")"); LOGGER.info("********************************************************************************"); } @After public void tearDown() throws Exception { LOGGER.info("********************************************************************************"); LOGGER.info("Testing done: " + getTestMethodName() + "(" + getClass().getName() + ")"); LOGGER.info("********************************************************************************"); } public String getTestMethodName() { return testName.getMethodName(); } @Test public void testLoalCertificatesByBuilder() throws Exception { new TestName().getMethodName(); LOGGER.debug("--- testLoalCertificatesByBuilder ---"); KeyStore keyStore = CSPKeyStore.Builder.newInstance("FILE", cspProvider, KEYSTORE_FILE, null).getKeyStore(); Enumeration<String> aliases = keyStore.aliases(); while(aliases.hasMoreElements()) { String alias = aliases.nextElement(); X509Certificate cert = (X509Certificate) keyStore.getCertificate(alias); boolean keyEntry = keyStore.isKeyEntry(alias); LOGGER.debug("Ключ {}" + "\n\tSubject {}" + "\n\tS/N {}" + "\n\tIssuer {}" + "\n\tKeyEntry {}", new Object[]{ alias, cert.getSubjectDN().getName(), cert.getSerialNumber().toString(16), cert.getIssuerDN().getName(), keyEntry }); } } @Test public void testLoalCertificatesByParams() throws Exception { LOGGER.debug("--- testLoalCertificatesByParams ---"); CSPKeyStore.KeyStoreProtection protection = new CSPKeyStore.KeyStoreProtection( STORE_NAME, cspProvider, KEYSTORE_FILE, null); CSPKeyStore.SimpleLoadStoreParameter parameter = new CSPKeyStore.SimpleLoadStoreParameter(protection); KeyStore keyStore = java.security.KeyStore.getInstance(STORE_NAME, PROVIDER_NAME); keyStore.load(parameter); Enumeration<String> aliases = keyStore.aliases(); while(aliases.hasMoreElements()) { String alias = aliases.nextElement(); X509Certificate cert = (X509Certificate) keyStore.getCertificate(alias); boolean keyEntry = keyStore.isKeyEntry(alias); LOGGER.debug("Ключ {}" + "\n\tSubject {}" + "\n\tS/N {}" + "\n\tIssuer {}" + "\n\tKeyEntry {}", new Object[]{ alias, cert.getSubjectDN().getName(), cert.getSerialNumber().toString(16), cert.getIssuerDN().getName(), keyEntry }); } } }