/******************************************************************************* * Copyright (c) 2011, 2016 Eurotech and/or its affiliates * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Eurotech *******************************************************************************/ package org.eclipse.kura.core.certificates; import java.security.KeyStore; import java.security.cert.Certificate; import java.util.Enumeration; import org.eclipse.kura.KuraException; import org.eclipse.kura.certificate.CertificatesService; import org.eclipse.kura.crypto.CryptoService; import org.eclipse.kura.message.KuraPayload; import org.eclipse.kura.message.KuraTopic; import org.osgi.service.component.ComponentContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /* * */ public final class CertificatesManager implements CertificatesService { private static final Logger s_logger = LoggerFactory.getLogger(CertificatesManager.class); private static final String DEFAULT_KEYSTORE = System.getProperty("org.osgi.framework.trust.repositories"); public static final String APP_ID = "org.eclipse.kura.core.certificates.CertificatesManager"; private CryptoService m_cryptoService; // ---------------------------------------------------------------- // // Dependencies // // ---------------------------------------------------------------- public void setCryptoService(CryptoService cryptoService) { this.m_cryptoService = cryptoService; } public void unsetCryptoService(CryptoService cryptoService) { this.m_cryptoService = null; } // ---------------------------------------------------------------- // // Activation APIs // // ---------------------------------------------------------------- protected void activate(ComponentContext componentContext) { s_logger.info("Bundle " + APP_ID + " has started!"); } protected void deactivate(ComponentContext componentContext) { s_logger.info("Bundle " + APP_ID + " is deactivating!"); } @Override public Certificate returnCertificate(String alias) throws KuraException { KeyStore ks = null; try { char[] keystorePassword = this.m_cryptoService.getKeyStorePassword(DEFAULT_KEYSTORE); ks = KeyStoreManagement.loadKeyStore(keystorePassword); return ks.getCertificate(alias); } catch (Exception e) { throw KuraException.internalError("Error retrieving the certificate from the keystore"); } } @Override public void storeCertificate(Certificate arg1, String alias) throws KuraException { return; } @Override public Enumeration<String> listBundleCertificatesAliases() { return listStoredCertificatesAliases(); } @Override public Enumeration<String> listDMCertificatesAliases() { return listStoredCertificatesAliases(); } @Override public Enumeration<String> listSSLCertificatesAliases() { return listStoredCertificatesAliases(); } @Override public Enumeration<String> listCACertificatesAliases() { return listStoredCertificatesAliases(); } @Override public void removeCertificate(String alias) { return; } @Override public boolean verifySignature(KuraTopic kuraTopic, KuraPayload kuraPayload) { return true; } private Enumeration<String> listStoredCertificatesAliases() { KeyStore ks = null; try { char[] keystorePassword = this.m_cryptoService.getKeyStorePassword(DEFAULT_KEYSTORE); ks = KeyStoreManagement.loadKeyStore(keystorePassword); return ks.aliases(); } catch (Exception e) { return null; } } }