/* * AliasKeyManager.java * * Created on 10 January 2006, 10:59 * * To change this template, choose Tools | Options and locate the template under * the Source Creation and Management node. Right-click the template and choose * Open. You can then make changes to the template in the Source Editor. */ package org.owasp.webscarab.httpclient; import java.net.Socket; import java.security.KeyStore; import java.security.KeyStoreException; import java.security.NoSuchAlgorithmException; import java.security.Principal; import java.security.PrivateKey; import java.security.UnrecoverableKeyException; import java.security.cert.Certificate; import java.security.cert.X509Certificate; import javax.net.ssl.X509KeyManager; /** * A KeyManager implementation that only ever selects a single alias, * rather than considering the "best" alias for the circumstances * @author rdawes */ public class AliasKeyManager implements X509KeyManager { private KeyStore _ks; private String _alias; private String _keyPassword; /** * Creates a new instance of AliasKeyManager * @param ks The KeyStore that contains the keypair to use * @param password the password for the key (not the keystore) * @param alias the alias of the certificate to use */ public AliasKeyManager(KeyStore ks, String alias, String keyPassword) { _ks = ks; _alias = alias; _keyPassword = keyPassword; } public String chooseClientAlias(String[] str, Principal[] principal, Socket socket) { return _alias; } public String chooseServerAlias(String str, Principal[] principal, Socket socket) { return _alias; } public X509Certificate[] getCertificateChain(String alias) { try { Certificate[] certs = _ks.getCertificateChain(alias); if (certs == null) return null; X509Certificate[] x509certs = new X509Certificate[certs.length]; for (int i=0; i<certs.length; i++) { x509certs[i]=(X509Certificate) certs[i]; } return x509certs; } catch (KeyStoreException kse) { kse.printStackTrace(); return null; } } public String[] getClientAliases(String str, Principal[] principal) { return new String[] { _alias }; } public PrivateKey getPrivateKey(String alias) { try { return (PrivateKey) _ks.getKey(alias, _keyPassword.toCharArray()); } catch (KeyStoreException kse) { kse.printStackTrace(); return null; } catch (NoSuchAlgorithmException nsao) { nsao.printStackTrace(); return null; } catch (UnrecoverableKeyException uke) { uke.printStackTrace(); return null; } } public String[] getServerAliases(String str, Principal[] principal) { return new String[] { _alias }; } }