X509KeyManagerImpl.java revision b7eec62f6db198a76b67d7915b03e59189c6df4f
1package org.apache.harmony.xnet.tests.support; 2 3import java.io.ByteArrayInputStream; 4import java.security.KeyStore; 5import java.security.cert.CertificateFactory; 6import java.security.cert.X509Certificate; 7import java.security.cert.Certificate; 8import java.util.Enumeration; 9import java.util.Vector; 10import java.security.Principal; 11import java.security.PrivateKey; 12import java.net.Socket; 13 14import javax.net.ssl.X509KeyManager; 15 16public class X509KeyManagerImpl implements X509KeyManager { 17 18 private String keyType; 19 private String client = "CLIENT"; 20 private String server = "SERVER"; 21 private KeyStore keyTest; 22 private X509Certificate[] cert = null; 23 24 // creating a certificate 25 String certificate = "-----BEGIN CERTIFICATE-----\n" 26 + "MIICZTCCAdICBQL3AAC2MA0GCSqGSIb3DQEBAgUAMF8xCzAJBgNVBAYTAlVTMSAw\n" 27 + "HgYDVQQKExdSU0EgRGF0YSBTZWN1cml0eSwgSW5jLjEuMCwGA1UECxMlU2VjdXJl\n" 28 + "IFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05NzAyMjAwMDAwMDBa\n" 29 + "Fw05ODAyMjAyMzU5NTlaMIGWMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZv\n" 30 + "cm5pYTESMBAGA1UEBxMJUGFsbyBBbHRvMR8wHQYDVQQKExZTdW4gTWljcm9zeXN0\n" 31 + "ZW1zLCBJbmMuMSEwHwYDVQQLExhUZXN0IGFuZCBFdmFsdWF0aW9uIE9ubHkxGjAY\n" 32 + "BgNVBAMTEWFyZ29uLmVuZy5zdW4uY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB\n" 33 + "iQKBgQCofmdY+PiUWN01FOzEewf+GaG+lFf132UpzATmYJkA4AEA/juW7jSi+LJk\n" 34 + "wJKi5GO4RyZoyimAL/5yIWDV6l1KlvxyKslr0REhMBaD/3Z3EsLTTEf5gVrQS6sT\n" 35 + "WMoSZAyzB39kFfsB6oUXNtV8+UKKxSxKbxvhQn267PeCz5VX2QIDAQABMA0GCSqG\n" 36 + "SIb3DQEBAgUAA34AXl3at6luiV/7I9MN5CXYoPJYI8Bcdc1hBagJvTMcmlqL2uOZ\n" 37 + "H9T5hNMEL9Tk6aI7yZPXcw/xI2K6pOR/FrMp0UwJmdxX7ljV6ZtUZf7pY492UqwC\n" 38 + "1777XQ9UEZyrKJvF5ntleeO0ayBqLGVKCWzWZX9YsXCpv47FNLZbupE=\n" 39 + "-----END CERTIFICATE-----\n"; 40 41 ByteArrayInputStream certArray = new ByteArrayInputStream(certificate 42 .getBytes()); 43 44 String certificate2 = "-----BEGIN CERTIFICATE-----\n" 45 + "MIICZzCCAdCgAwIBAgIBGzANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQGEwJVUzEY\n" 46 + "MBYGA1UEChMPVS5TLiBHb3Zlcm5tZW50MQwwCgYDVQQLEwNEb0QxDDAKBgNVBAsT\n" 47 + "A1BLSTEcMBoGA1UEAxMTRG9EIFBLSSBNZWQgUm9vdCBDQTAeFw05ODA4MDMyMjAy\n" 48 + "MjlaFw0wODA4MDQyMjAyMjlaMGExCzAJBgNVBAYTAlVTMRgwFgYDVQQKEw9VLlMu\n" 49 + "IEdvdmVybm1lbnQxDDAKBgNVBAsTA0RvRDEMMAoGA1UECxMDUEtJMRwwGgYDVQQD\n" 50 + "ExNEb0QgUEtJIE1lZCBSb290IENBMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB\n" 51 + "gQDbrM/J9FrJSX+zxFUbsI9Vw5QbguVBIa95rwW/0M8+sM0r5gd+DY6iubm6wnXk\n" 52 + "CSvbfQlFEDSKr4WYeeGp+d9WlDnQdtDFLdA45tCi5SHjnW+hGAmZnld0rz6wQekF\n" 53 + "5xQaa5A6wjhMlLOjbh27zyscrorMJ1O5FBOWnEHcRv6xqQIDAQABoy8wLTAdBgNV\n" 54 + "HQ4EFgQUVrmYR6m9701cHQ3r5kXyG7zsCN0wDAYDVR0TBAUwAwEB/zANBgkqhkiG\n" 55 + "9w0BAQUFAAOBgQDVX1Y0YqC7vekeZjVxtyuC8Mnxbrz6D109AX07LEIRzNYzwZ0w\n" 56 + "MTImSp9sEzWW+3FueBIU7AxGys2O7X0qmN3zgszPfSiocBuQuXIYQctJhKjF5KVc\n" 57 + "VGQRYYlt+myhl2vy6yPzEVCjiKwMEb1Spu0irCf+lFW2hsdjvmSQMtZvOw==\n" 58 + "-----END CERTIFICATE-----\n"; 59 60 ByteArrayInputStream certArray2 = new ByteArrayInputStream(certificate2 61 .getBytes()); 62 63 String certificate3 = "-----BEGIN CERTIFICATE-----\n" 64 + "MIIDXDCCAsWgAwIBAgIBSjANBgkqhkiG9w0BAQUFADBWMQswCQYDVQQGEwJVUzEY\n" 65 + "MBYGA1UEChMPVS5TLiBHb3Zlcm5tZW50MQwwCgYDVQQLEwNEb0QxDDAKBgNVBAsT\n" 66 + "A1BLSTERMA8GA1UEAxMITWVkIENBLTEwHhcNOTgwODAyMTgwMjQwWhcNMDEwODAy\n" 67 + "MTgwMjQwWjB0MQswCQYDVQQGEwJVUzEYMBYGA1UEChMPVS5TLiBHb3Zlcm5tZW50\n" 68 + "MQwwCgYDVQQLEwNEb0QxDDAKBgNVBAsTA1BLSTENMAsGA1UECxMEVVNBRjEgMB4G\n" 69 + "A1UEAxMXR3VtYnkuSm9zZXBoLjAwMDAwMDUwNDQwgZ8wDQYJKoZIhvcNAQEBBQAD\n" 70 + "gY0AMIGJAoGBALT/R7bPqs1c1YqXAg5HNpZLgW2HuAc7RCaP06cE4R44GBLw/fQc\n" 71 + "VRNLn5pgbTXsDnjiZVd8qEgYqjKFQka4/tNhaF7No2tBZB+oYL/eP0IWtP+h/W6D\n" 72 + "KR5+UvIIdgmx7k3t9jp2Q51JpHhhKEb9WN54trCO9Yu7PYU+LI85jEIBAgMBAAGj\n" 73 + "ggEaMIIBFjAWBgNVHSAEDzANMAsGCWCGSAFlAgELAzAfBgNVHSMEGDAWgBQzOhTo\n" 74 + "CWdhiGUkIOx5cELXppMe9jAdBgNVHQ4EFgQUkLBJl+ayKgzOp/wwBX9M1lSkCg4w\n" 75 + "DgYDVR0PAQH/BAQDAgbAMAwGA1UdEwEB/wQCMAAwgZ0GA1UdHwSBlTCBkjCBj6CB\n" 76 + "jKCBiYaBhmxkYXA6Ly9kcy0xLmNoYW1iLmRpc2EubWlsL2NuJTNkTWVkJTIwQ0El\n" 77 + "MmQxJTJjb3UlM2RQS0klMmNvdSUzZERvRCUyY28lM2RVLlMuJTIwR292ZXJubWVu\n" 78 + "dCUyY2MlM2RVUz9jZXJ0aWZpY2F0ZVJldm9jYXRpb25MaXN0JTNiYmluYXJ5MA0G\n" 79 + "CSqGSIb3DQEBBQUAA4GBAFjapuDHMvIdUeYRyEYdShBR1JZC20tJ3MQnyBQveddz\n" 80 + "LGFDGpIkRAQU7T/5/ne8lMexyxViC21xOlK9LdbJCbVyywvb9uEm/1je9wieQQtr\n" 81 + "kjykuB+WB6qTCIslAO/eUmgzfzIENvnH8O+fH7QTr2PdkFkiPIqBJYHvw7F3XDqy\n" 82 + "-----END CERTIFICATE-----\n"; 83 84 ByteArrayInputStream certArray3 = new ByteArrayInputStream(certificate3 85 .getBytes()); 86 87 88 public X509KeyManagerImpl(String name) { 89 keyType = name; 90 try { 91 CertificateFactory cf = CertificateFactory.getInstance("X.509"); 92 keyTest = KeyStore.getInstance(KeyStore.getDefaultType()); 93 keyTest.load(null, null); 94 if (keyType.equals(client)) { 95 cert = new X509Certificate[2]; 96 cert[0] = (X509Certificate) cf.generateCertificate(certArray); 97 cert[1] = (X509Certificate) cf.generateCertificate(certArray2); 98 //keyTest = KeyStore.getInstance(KeyStore.getDefaultType()); 99 //keyTest.load(null, null); 100 keyTest.setCertificateEntry("clientAlias_01", cert[0]); 101 keyTest.setCertificateEntry("clientAlias_02", cert[0]); 102 keyTest.setCertificateEntry("clientAlias_03", cert[1]); 103 } else if (keyType.equals(server)) { 104 //CertificateFactory cf = CertificateFactory.getInstance("X.509"); 105 cert = new X509Certificate[1]; 106 cert[0] = (X509Certificate) cf.generateCertificate(certArray3); 107 //keyTest = KeyStore.getInstance(KeyStore.getDefaultType()); 108 //keyTest.load(null, null); 109 keyTest.setCertificateEntry("serverAlias_00", cert[0]); 110 } 111 } catch (Exception ex) { 112 throw new IllegalArgumentException(ex.getMessage()); 113 } 114 } 115 116 public String[] getClientAliases(String s, Principal[] aprincipal) { 117 if (s == null || s.equals("")) { 118 return null; 119 } 120 try { 121 if (s.equals(client)) { 122 Enumeration<String> aliase = keyTest.aliases(); 123 Vector vec = new Vector(); 124 int i = 0; 125 while (aliase.hasMoreElements()) { 126 vec.addElement(aliase.nextElement()); 127 i++; 128 } 129 String[] res = new String[vec.size()]; 130 for (i = 0; i < vec.size(); i++) { 131 res[i] = vec.elementAt(i).toString(); 132 } 133 return res; 134 } else return null; 135 } catch (Exception ex) { 136 throw new IllegalArgumentException(ex.getMessage()); 137 } 138 } 139 140 public String chooseClientAlias(String[] as, Principal[] aprincipal, Socket socket) { 141 String alias = null; 142 if (as == null || as.length == 0) { 143 return null; 144 } 145 try { 146 if (as.length == 1 && as[0].equals(client)) { 147 if (socket == null) { 148 alias = keyTest.getCertificateAlias(cert[0]); 149 } else { 150 alias = keyTest.getCertificateAlias(cert[1]); 151 } 152 return alias; 153 } 154 } catch (Exception ex) { 155 throw new IllegalArgumentException(ex.getMessage()); 156 } 157 return null; 158 } 159 160 public String[] getServerAliases(String s, Principal aprincipal[]) { 161 if (s == null || s.equals("")) { 162 return null; 163 } 164 try { 165 if (s.equals(server)) { 166 Enumeration<String> aliase = keyTest.aliases(); 167 Vector vec = new Vector(); 168 int i = 0; 169 while (aliase.hasMoreElements()) { 170 vec.addElement(aliase.nextElement()); 171 i++; 172 } 173 String[] res = new String[vec.size()]; 174 for (i = 0; i < vec.size(); i++) { 175 res[i] = vec.elementAt(i).toString(); 176 } 177 return res; 178 } else return null; 179 } catch (Exception ex) { 180 throw new IllegalArgumentException(ex.getMessage()); 181 } 182 } 183 184 public String chooseServerAlias(String as, Principal[] aprincipal, Socket socket) { 185 String alias = null; 186 if (as == null || as.equals("")) { 187 return null; 188 } 189 try { 190 if (as.equals(server) && socket != null) { 191 return alias = keyTest.getCertificateAlias(cert[0]); 192 } else { 193 return null; 194 } 195 } catch (Exception ex) { 196 throw new IllegalArgumentException(ex.getMessage()); 197 } 198 } 199 200 public X509Certificate[] getCertificateChain(String s) { 201 /*try { 202 if (s != null && !s.equals("")) { 203 X509Certificate[] cert = (X509Certificate[]) keyTest.getCertificateChain(s); 204 return cert; 205 } else return null; 206 } catch (Exception ex) { 207 throw new IllegalArgumentException(ex.getMessage()); 208 }*/ 209 return null; 210 } 211 212 public PrivateKey getPrivateKey(String s) { 213 /*try { 214 if (s != null && !s.equals("")) { 215 Certificate[] cert = keyTest.getCertificateChain(s); 216 PrivateKey pk = (PrivateKey) keyTest.getKey(s, null); 217 return pk; 218 } else return null; 219 } catch (Exception ex) { 220 throw new IllegalArgumentException(ex.getMessage()); 221 }*/ 222 return null; 223 } 224 225} 226