/* * Commons eID Project. * Copyright (C) 2012-2013 FedICT. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License version * 3.0 as published by the Free Software Foundation. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, see * http://www.gnu.org/licenses/. */ package be.fedict.commons.eid.jca; import java.security.InvalidAlgorithmParameterException; import java.security.KeyStore; import java.security.KeyStoreException; import java.security.NoSuchAlgorithmException; import java.security.UnrecoverableKeyException; import javax.net.ssl.KeyManager; import javax.net.ssl.KeyManagerFactory; import javax.net.ssl.KeyManagerFactorySpi; import javax.net.ssl.ManagerFactoryParameters; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * eID specific {@link KeyManagerFactory}. Can be used for mutual TLS * authentication. * <p/> * Usage: * * <pre> * import javax.net.ssl.KeyManagerFactory; * import javax.net.ssl.SSLContext; * ... * KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance("BeID"); * SSLContext sslContext = SSLContext.getInstance("TLS"); * sslContext.init(keyManagerFactory.getKeyManagers(), ..., ...); * </pre> * * @see BeIDX509KeyManager * @see BeIDManagerFactoryParameters * @author Frank Cornelis * */ public class BeIDKeyManagerFactory extends KeyManagerFactorySpi { private static final Log LOG = LogFactory .getLog(BeIDKeyManagerFactory.class); private BeIDManagerFactoryParameters beIDSpec; @Override protected KeyManager[] engineGetKeyManagers() { LOG.debug("engineGetKeyManagers"); KeyManager beidKeyManager; try { beidKeyManager = new BeIDX509KeyManager(this.beIDSpec); } catch (final Exception e) { throw new IllegalStateException(e); } final KeyManager[] keyManagers = new KeyManager[]{beidKeyManager}; return keyManagers; } @Override protected void engineInit(final ManagerFactoryParameters spec) throws InvalidAlgorithmParameterException { LOG.debug("engineInit(spec)"); if (null == spec) { return; } if (false == spec instanceof BeIDManagerFactoryParameters) { throw new InvalidAlgorithmParameterException(); } this.beIDSpec = (BeIDManagerFactoryParameters) spec; } @Override protected void engineInit(final KeyStore keyStore, final char[] password) throws KeyStoreException, NoSuchAlgorithmException, UnrecoverableKeyException { LOG.debug("engineInit(KeyStore,password)"); } }