test/jdk/sun/security/ssl/ClientHandshaker/RSAExport.java
author xuelei
Tue, 31 Oct 2017 00:54:53 +0000
changeset 48581 0786897e86b3
parent 47216 71c04702a3d5
permissions -rw-r--r--
8163237: Restrict the use of EXPORT cipher suites Reviewed-by: mullan, igerasim, rhalade, jnimeh
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
703
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
     1
/*
48581
0786897e86b3 8163237: Restrict the use of EXPORT cipher suites
xuelei
parents: 47216
diff changeset
     2
 * Copyright (c) 2008, 2017, Oracle and/or its affiliates. All rights reserved.
703
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
     4
 *
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
     7
 * published by the Free Software Foundation.
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
     8
 *
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    13
 * accompanied this code).
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    14
 *
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    18
 *
5506
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 703
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 703
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 703
diff changeset
    21
 * questions.
703
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    22
 */
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    23
14929
59377f4b9919 7109274: Restrict the use of certificates with RSA keys less than 1024 bits
xuelei
parents: 14342
diff changeset
    24
// SunJSSE does not support dynamic system properties, no way to re-use
59377f4b9919 7109274: Restrict the use of certificates with RSA keys less than 1024 bits
xuelei
parents: 14342
diff changeset
    25
// system properties in samevm/agentvm mode.
59377f4b9919 7109274: Restrict the use of certificates with RSA keys less than 1024 bits
xuelei
parents: 14342
diff changeset
    26
703
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    27
/*
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    28
 * @test
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    29
 * @bug 6690018
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    30
 * @summary RSAClientKeyExchange NullPointerException
10328
06c93c42bca0 7055363: jdk_security3 test target cleanup
weijun
parents: 5506
diff changeset
    31
 * @run main/othervm RSAExport
703
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    32
 */
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    33
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    34
/*
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    35
 * Certificates and key used in the test.
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    36
 *
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    37
 * TLS server certificate:
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    38
 * server private key:
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    39
 * -----BEGIN RSA PRIVATE KEY-----
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    40
 * Proc-Type: 4,ENCRYPTED
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    41
 * DEK-Info: DES-EDE3-CBC,97EC03A2D031B7BC
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    42
 *
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    43
 * 22wrD+DPv3VF8xg9xoeBqHzFnOVbTLQgVulzaCECDF4zWdxElYKy4yYyY6dMDehi
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    44
 * XT77NTsq1J14zjJHPp2/U6B5OpZxnf97ZSD0ZC9/DDe/2gjW4fY1Lv0TVP0PdXnm
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    45
 * cj84RaDiiSk/cERlFzFJ5L8ULMwxdOtYwXwZ4upITw2lT+8zDlBD2i3zZ4TcWrzE
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    46
 * /su5Kpu+Mp3wthfGX+ZGga2T/NS8ZCKZE+gJDPKQZ/x34VBw+YANQGyCJPv1iMaE
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    47
 * RyagnpApH9OPSrRIp2iR6uWT6836CET2erbfPaC1odyd8IsbnLldVs9CklH7EgXL
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    48
 * Nms+DqrQEbNmvMuQYEFyZEHN9D1fGONeacx+cjI85FyMSHSEO65JJmasAxgQe4nF
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    49
 * /yVz3rNQ2qAGqBhjsjP/WaXuB2aLZiAli/HjN17EJws=
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    50
 * -----END RSA PRIVATE KEY-----
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    51
 *
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    52
 * -----BEGIN RSA PRIVATE KEY-----
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    53
 * MIIBOQIBAAJBALlfGg/5ZweJcW5zqLdnQ2uyircqDDlENKnv9FABOm/j0wnlPHqX
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    54
 * CCqFBLoM7tG8ohci1SPy6fLJ5dqLf5FOH2sCAwEAAQJATO0/hpOMgx8xmJGc2Yeb
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    55
 * /gyY7kwfyIAajs9Khw0LcDTYTo2EAI+vMmDpU+dvmOCLUqq/Z2tiKJhGyrmcBlxr
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    56
 * kQIhAPYkbYovtvWHslxRb78x4eCrn2p1H7iolNKbyepjCI3zAiEAwMufJlLI9Q0O
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    57
 * BIr7fPnUhbs9NyMHLIvIQAf/hXYubqkCIGJZR9NxIT+VyrSMbYQNoF0u9fGJfvU/
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    58
 * lsdYLCOVEnP1AiAsSFjUx50K1CXNG1MqYIPU963W1T/Xln+3XV7ue7esiQIgW2Lu
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    59
 * xGvz2dAUsGId+Xr2GZXb7ZucY/cPt4o5qdP1m7c=
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    60
 * -----END RSA PRIVATE KEY-----
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    61
 *
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    62
 * Private-Key: (512 bit)
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    63
 * modulus:
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    64
 *     00:b9:5f:1a:0f:f9:67:07:89:71:6e:73:a8:b7:67:
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    65
 *     43:6b:b2:8a:b7:2a:0c:39:44:34:a9:ef:f4:50:01:
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    66
 *     3a:6f:e3:d3:09:e5:3c:7a:97:08:2a:85:04:ba:0c:
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    67
 *     ee:d1:bc:a2:17:22:d5:23:f2:e9:f2:c9:e5:da:8b:
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    68
 *     7f:91:4e:1f:6b
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    69
 * publicExponent: 65537 (0x10001)
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    70
 * privateExponent:
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    71
 *     4c:ed:3f:86:93:8c:83:1f:31:98:91:9c:d9:87:9b:
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    72
 *     fe:0c:98:ee:4c:1f:c8:80:1a:8e:cf:4a:87:0d:0b:
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    73
 *     70:34:d8:4e:8d:84:00:8f:af:32:60:e9:53:e7:6f:
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    74
 *     98:e0:8b:52:aa:bf:67:6b:62:28:98:46:ca:b9:9c:
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    75
 *     06:5c:6b:91
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    76
 * prime1:
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    77
 *     00:f6:24:6d:8a:2f:b6:f5:87:b2:5c:51:6f:bf:31:
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    78
 *     e1:e0:ab:9f:6a:75:1f:b8:a8:94:d2:9b:c9:ea:63:
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    79
 *     08:8d:f3
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    80
 * prime2:
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    81
 *     00:c0:cb:9f:26:52:c8:f5:0d:0e:04:8a:fb:7c:f9:
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    82
 *     d4:85:bb:3d:37:23:07:2c:8b:c8:40:07:ff:85:76:
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    83
 *     2e:6e:a9
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    84
 * exponent1:
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    85
 *     62:59:47:d3:71:21:3f:95:ca:b4:8c:6d:84:0d:a0:
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    86
 *     5d:2e:f5:f1:89:7e:f5:3f:96:c7:58:2c:23:95:12:
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    87
 *     73:f5
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    88
 * exponent2:
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    89
 *     2c:48:58:d4:c7:9d:0a:d4:25:cd:1b:53:2a:60:83:
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    90
 *     d4:f7:ad:d6:d5:3f:d7:96:7f:b7:5d:5e:ee:7b:b7:
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    91
 *     ac:89
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    92
 * coefficient:
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    93
 *     5b:62:ee:c4:6b:f3:d9:d0:14:b0:62:1d:f9:7a:f6:
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    94
 *     19:95:db:ed:9b:9c:63:f7:0f:b7:8a:39:a9:d3:f5:
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    95
 *     9b:b7
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    96
 *
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    97
 *
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    98
 * server certificate:
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
    99
 *  Data:
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   100
 *      Version: 3 (0x2)
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   101
 *      Serial Number: 11 (0xb)
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   102
 *      Signature Algorithm: sha1WithRSAEncryption
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   103
 *      Issuer: C=US, ST=Some-State, O=Some Org, CN=Someone
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   104
 *      Validity
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   105
 *          Not Before: Apr 18 15:07:30 2008 GMT
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   106
 *          Not After : Jan  4 15:07:30 2028 GMT
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   107
 *      Subject: C=US, ST=Some-State, O=Some Org, CN=SomeoneExport
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   108
 *      Subject Public Key Info:
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   109
 *          Public Key Algorithm: rsaEncryption
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   110
 *          RSA Public Key: (512 bit)
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   111
 *              Modulus (512 bit):
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   112
 *                  00:b9:5f:1a:0f:f9:67:07:89:71:6e:73:a8:b7:67:
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   113
 *                  43:6b:b2:8a:b7:2a:0c:39:44:34:a9:ef:f4:50:01:
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   114
 *                  3a:6f:e3:d3:09:e5:3c:7a:97:08:2a:85:04:ba:0c:
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   115
 *                  ee:d1:bc:a2:17:22:d5:23:f2:e9:f2:c9:e5:da:8b:
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   116
 *                  7f:91:4e:1f:6b
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   117
 *              Exponent: 65537 (0x10001)
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   118
 *      X509v3 extensions:
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   119
 *          X509v3 Basic Constraints:
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   120
 *              CA:FALSE
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   121
 *          X509v3 Key Usage:
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   122
 *              Digital Signature, Non Repudiation, Key Encipherment
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   123
 *          X509v3 Subject Key Identifier:
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   124
 *              F1:30:98:BE:7C:AA:F9:B1:91:38:60:AE:13:5F:67:9C:0A:32:9E:31
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   125
 *          X509v3 Authority Key Identifier:
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   126
 *              keyid:B5:32:43:D7:00:24:92:BA:E9:95:E5:F9:A3:64:6C:84:EE:33:2E:15
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   127
 *
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   128
 * -----BEGIN CERTIFICATE-----
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   129
 * MIICIDCCAYmgAwIBAgIBCzANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzET
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   130
 * MBEGA1UECBMKU29tZS1TdGF0ZTERMA8GA1UEChMIU29tZSBPcmcxEDAOBgNVBAMT
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   131
 * B1NvbWVvbmUwHhcNMDgwNDE4MTUwNzMwWhcNMjgwMTA0MTUwNzMwWjBNMQswCQYD
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   132
 * VQQGEwJVUzETMBEGA1UECBMKU29tZS1TdGF0ZTERMA8GA1UEChMIU29tZSBPcmcx
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   133
 * FjAUBgNVBAMTDVNvbWVvbmVFeHBvcnQwXDANBgkqhkiG9w0BAQEFAANLADBIAkEA
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   134
 * uV8aD/lnB4lxbnOot2dDa7KKtyoMOUQ0qe/0UAE6b+PTCeU8epcIKoUEugzu0byi
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   135
 * FyLVI/Lp8snl2ot/kU4fawIDAQABo1owWDAJBgNVHRMEAjAAMAsGA1UdDwQEAwIF
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   136
 * 4DAdBgNVHQ4EFgQU8TCYvnyq+bGROGCuE19nnAoynjEwHwYDVR0jBBgwFoAUtTJD
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   137
 * 1wAkkrrpleX5o2RshO4zLhUwDQYJKoZIhvcNAQEFBQADgYEAFU+fP9FSTQNVZOhv
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   138
 * eJ+zq6wI/biwzTgPbAq3yu2gb5kT85z4nzqBhPd2LWWFXhUW/D8QyNZ54X30y0Ug
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   139
 * 3NfUAvOANW7CgUbHBmm77KQiF4nWdh338qqq9HzLGrPqcxX0dmiq2RBVPy9wb2Ea
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   140
 * FTZiU2v+9pkoLoSDnCOfPCg/4Q4=
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   141
 * -----END CERTIFICATE-----
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   142
 *
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   143
 *
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   144
 * Trusted CA certificate:
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   145
 * Certificate:
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   146
 *   Data:
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   147
 *       Version: 3 (0x2)
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   148
 *       Serial Number: 0 (0x0)
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   149
 *       Signature Algorithm: md5WithRSAEncryption
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   150
 *       Issuer: C=US, ST=Some-State, O=Some Org, CN=Someone
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   151
 *       Validity
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   152
 *           Not Before: Mar 30 11:44:47 2001 GMT
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   153
 *           Not After : Apr 27 11:44:47 2028 GMT
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   154
 *       Subject: C=US, ST=Some-State, O=Some Org, CN=Someone
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   155
 *       Subject Public Key Info:
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   156
 *           Public Key Algorithm: rsaEncryption
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   157
 *           RSA Public Key: (1024 bit)
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   158
 *               Modulus (1024 bit):
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   159
 *                   00:c1:98:e4:7a:87:53:0f:94:87:dc:da:f3:59:39:
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   160
 *                   3e:36:95:e8:77:58:ff:46:8a:81:1b:5e:c5:4c:fa:
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   161
 *                   b6:91:19:30:be:5b:ef:4c:aa:84:30:a4:9a:d4:68:
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   162
 *                   af:ef:fa:b4:2c:76:8b:29:33:46:cf:38:74:7c:79:
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   163
 *                   d5:07:a6:43:39:84:52:39:4f:8a:1c:f3:73:19:12:
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   164
 *                   40:cf:ee:a1:77:43:01:02:be:8d:32:11:28:70:f4:
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   165
 *                   cf:ab:43:75:e4:fb:74:f1:8c:2e:43:24:ba:85:3f:
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   166
 *                   66:3a:05:ea:f7:ce:5b:97:e2:34:a3:f0:87:f4:f8:
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   167
 *                   d1:59:12:5a:68:b7:78:64:a9
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   168
 *               Exponent: 65537 (0x10001)
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   169
 *       X509v3 extensions:
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   170
 *           X509v3 Subject Key Identifier:
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   171
 *               B5:32:43:D7:00:24:92:BA:E9:95:E5:F9:A3:64:6C:84:EE:33:2E:15
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   172
 *           X509v3 Authority Key Identifier:
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   173
 *               keyid:B5:32:43:D7:00:24:92:BA:E9:95:E5:F9:A3:64:6C:84:EE:33:2E:15
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   174
 *               DirName:/C=US/ST=Some-State/O=Some Org/CN=Someone
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   175
 *               serial:00
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   176
 *
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   177
 *           X509v3 Basic Constraints:
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   178
 *               CA:TRUE
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   179
 *
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   180
 * -----BEGIN CERTIFICATE-----
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   181
 * MIICpjCCAg+gAwIBAgIBADANBgkqhkiG9w0BAQQFADBHMQswCQYDVQQGEwJVUzET
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   182
 * MBEGA1UECBMKU29tZS1TdGF0ZTERMA8GA1UEChMIU29tZSBPcmcxEDAOBgNVBAMT
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   183
 * B1NvbWVvbmUwHhcNMDEwMzMwMTE0NDQ3WhcNMjgwNDI3MTE0NDQ3WjBHMQswCQYD
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   184
 * VQQGEwJVUzETMBEGA1UECBMKU29tZS1TdGF0ZTERMA8GA1UEChMIU29tZSBPcmcx
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   185
 * EDAOBgNVBAMTB1NvbWVvbmUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMGY
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   186
 * 5HqHUw+Uh9za81k5PjaV6HdY/0aKgRtexUz6tpEZML5b70yqhDCkmtRor+/6tCx2
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   187
 * iykzRs84dHx51QemQzmEUjlPihzzcxkSQM/uoXdDAQK+jTIRKHD0z6tDdeT7dPGM
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   188
 * LkMkuoU/ZjoF6vfOW5fiNKPwh/T40VkSWmi3eGSpAgMBAAGjgaEwgZ4wHQYDVR0O
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   189
 * BBYEFLUyQ9cAJJK66ZXl+aNkbITuMy4VMG8GA1UdIwRoMGaAFLUyQ9cAJJK66ZXl
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   190
 * +aNkbITuMy4VoUukSTBHMQswCQYDVQQGEwJVUzETMBEGA1UECBMKU29tZS1TdGF0
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   191
 * ZTERMA8GA1UEChMIU29tZSBPcmcxEDAOBgNVBAMTB1NvbWVvbmWCAQAwDAYDVR0T
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   192
 * BAUwAwEB/zANBgkqhkiG9w0BAQQFAAOBgQBhf3PX0xWxtaUwZlWCO7GfPwCKgBWr
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   193
 * CXqlqjtWHCshaaU7wUsDOwxFDWwKjFrMerQLsLuBlhdXEbNfSPjychkQtfezQHcS
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   194
 * q0Atq7+KVSmRbDw6oKVRs5v1BBzLCupy+o16fNz3/hwreAWwQnSMtAh/osNS9w1b
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   195
 * QeVWU+JV47H+vg==
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   196
 * -----END CERTIFICATE-----
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   197
 *
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   198
 */
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   199
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   200
import java.io.*;
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   201
import java.net.*;
14929
59377f4b9919 7109274: Restrict the use of certificates with RSA keys less than 1024 bits
xuelei
parents: 14342
diff changeset
   202
import java.security.Security;
703
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   203
import java.security.KeyStore;
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   204
import java.security.KeyFactory;
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   205
import java.security.cert.Certificate;
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   206
import java.security.cert.CertificateFactory;
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   207
import java.security.spec.*;
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   208
import java.security.interfaces.*;
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   209
import javax.net.ssl.*;
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   210
import java.math.BigInteger;
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   211
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   212
public class RSAExport {
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   213
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   214
    /*
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   215
     * =============================================================
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   216
     * Set the various variables needed for the tests, then
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   217
     * specify what tests to run on each side.
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   218
     */
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   219
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   220
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   221
    /*
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   222
     * Should we run the client or server in a separate thread?
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   223
     * Both sides can throw exceptions, but do you have a preference
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   224
     * as to which side should be the main thread.
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   225
     */
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   226
    static boolean separateServerThread = true;
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   227
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   228
    /*
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   229
     * Where do we find the keystores?
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   230
     */
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   231
    static String trusedCertStr =
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   232
        "-----BEGIN CERTIFICATE-----\n" +
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   233
        "MIICpjCCAg+gAwIBAgIBADANBgkqhkiG9w0BAQQFADBHMQswCQYDVQQGEwJVUzET\n" +
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   234
        "MBEGA1UECBMKU29tZS1TdGF0ZTERMA8GA1UEChMIU29tZSBPcmcxEDAOBgNVBAMT\n" +
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   235
        "B1NvbWVvbmUwHhcNMDEwMzMwMTE0NDQ3WhcNMjgwNDI3MTE0NDQ3WjBHMQswCQYD\n" +
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   236
        "VQQGEwJVUzETMBEGA1UECBMKU29tZS1TdGF0ZTERMA8GA1UEChMIU29tZSBPcmcx\n" +
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   237
        "EDAOBgNVBAMTB1NvbWVvbmUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMGY\n" +
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   238
        "5HqHUw+Uh9za81k5PjaV6HdY/0aKgRtexUz6tpEZML5b70yqhDCkmtRor+/6tCx2\n" +
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   239
        "iykzRs84dHx51QemQzmEUjlPihzzcxkSQM/uoXdDAQK+jTIRKHD0z6tDdeT7dPGM\n" +
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   240
        "LkMkuoU/ZjoF6vfOW5fiNKPwh/T40VkSWmi3eGSpAgMBAAGjgaEwgZ4wHQYDVR0O\n" +
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   241
        "BBYEFLUyQ9cAJJK66ZXl+aNkbITuMy4VMG8GA1UdIwRoMGaAFLUyQ9cAJJK66ZXl\n" +
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   242
        "+aNkbITuMy4VoUukSTBHMQswCQYDVQQGEwJVUzETMBEGA1UECBMKU29tZS1TdGF0\n" +
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   243
        "ZTERMA8GA1UEChMIU29tZSBPcmcxEDAOBgNVBAMTB1NvbWVvbmWCAQAwDAYDVR0T\n" +
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   244
        "BAUwAwEB/zANBgkqhkiG9w0BAQQFAAOBgQBhf3PX0xWxtaUwZlWCO7GfPwCKgBWr\n" +
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   245
        "CXqlqjtWHCshaaU7wUsDOwxFDWwKjFrMerQLsLuBlhdXEbNfSPjychkQtfezQHcS\n" +
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   246
        "q0Atq7+KVSmRbDw6oKVRs5v1BBzLCupy+o16fNz3/hwreAWwQnSMtAh/osNS9w1b\n" +
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   247
        "QeVWU+JV47H+vg==\n" +
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   248
        "-----END CERTIFICATE-----";
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   249
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   250
    static String serverCertStr =
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   251
        "-----BEGIN CERTIFICATE-----\n" +
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   252
        "MIICIDCCAYmgAwIBAgIBCzANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzET\n" +
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   253
        "MBEGA1UECBMKU29tZS1TdGF0ZTERMA8GA1UEChMIU29tZSBPcmcxEDAOBgNVBAMT\n" +
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   254
        "B1NvbWVvbmUwHhcNMDgwNDE4MTUwNzMwWhcNMjgwMTA0MTUwNzMwWjBNMQswCQYD\n" +
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   255
        "VQQGEwJVUzETMBEGA1UECBMKU29tZS1TdGF0ZTERMA8GA1UEChMIU29tZSBPcmcx\n" +
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   256
        "FjAUBgNVBAMTDVNvbWVvbmVFeHBvcnQwXDANBgkqhkiG9w0BAQEFAANLADBIAkEA\n" +
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   257
        "uV8aD/lnB4lxbnOot2dDa7KKtyoMOUQ0qe/0UAE6b+PTCeU8epcIKoUEugzu0byi\n" +
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   258
        "FyLVI/Lp8snl2ot/kU4fawIDAQABo1owWDAJBgNVHRMEAjAAMAsGA1UdDwQEAwIF\n" +
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   259
        "4DAdBgNVHQ4EFgQU8TCYvnyq+bGROGCuE19nnAoynjEwHwYDVR0jBBgwFoAUtTJD\n" +
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   260
        "1wAkkrrpleX5o2RshO4zLhUwDQYJKoZIhvcNAQEFBQADgYEAFU+fP9FSTQNVZOhv\n" +
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   261
        "eJ+zq6wI/biwzTgPbAq3yu2gb5kT85z4nzqBhPd2LWWFXhUW/D8QyNZ54X30y0Ug\n" +
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   262
        "3NfUAvOANW7CgUbHBmm77KQiF4nWdh338qqq9HzLGrPqcxX0dmiq2RBVPy9wb2Ea\n" +
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   263
        "FTZiU2v+9pkoLoSDnCOfPCg/4Q4=\n" +
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   264
        "-----END CERTIFICATE-----";
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   265
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   266
    static byte privateExponent[] = {
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   267
        (byte)0x4c, (byte)0xed, (byte)0x3f, (byte)0x86,
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   268
        (byte)0x93, (byte)0x8c, (byte)0x83, (byte)0x1f,
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   269
        (byte)0x31, (byte)0x98, (byte)0x91, (byte)0x9c,
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   270
        (byte)0xd9, (byte)0x87, (byte)0x9b, (byte)0xfe,
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   271
        (byte)0x0c, (byte)0x98, (byte)0xee, (byte)0x4c,
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   272
        (byte)0x1f, (byte)0xc8, (byte)0x80, (byte)0x1a,
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   273
        (byte)0x8e, (byte)0xcf, (byte)0x4a, (byte)0x87,
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   274
        (byte)0x0d, (byte)0x0b, (byte)0x70, (byte)0x34,
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   275
        (byte)0xd8, (byte)0x4e, (byte)0x8d, (byte)0x84,
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   276
        (byte)0x00, (byte)0x8f, (byte)0xaf, (byte)0x32,
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   277
        (byte)0x60, (byte)0xe9, (byte)0x53, (byte)0xe7,
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   278
        (byte)0x6f, (byte)0x98, (byte)0xe0, (byte)0x8b,
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   279
        (byte)0x52, (byte)0xaa, (byte)0xbf, (byte)0x67,
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   280
        (byte)0x6b, (byte)0x62, (byte)0x28, (byte)0x98,
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   281
        (byte)0x46, (byte)0xca, (byte)0xb9, (byte)0x9c,
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   282
        (byte)0x06, (byte)0x5c, (byte)0x6b, (byte)0x91
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   283
    };
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   284
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   285
    static byte modulus[] = {
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   286
        (byte)0x00,
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   287
        (byte)0xb9, (byte)0x5f, (byte)0x1a, (byte)0x0f,
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   288
        (byte)0xf9, (byte)0x67, (byte)0x07, (byte)0x89,
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   289
        (byte)0x71, (byte)0x6e, (byte)0x73, (byte)0xa8,
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   290
        (byte)0xb7, (byte)0x67, (byte)0x43, (byte)0x6b,
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   291
        (byte)0xb2, (byte)0x8a, (byte)0xb7, (byte)0x2a,
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   292
        (byte)0x0c, (byte)0x39, (byte)0x44, (byte)0x34,
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   293
        (byte)0xa9, (byte)0xef, (byte)0xf4, (byte)0x50,
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   294
        (byte)0x01, (byte)0x3a, (byte)0x6f, (byte)0xe3,
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   295
        (byte)0xd3, (byte)0x09, (byte)0xe5, (byte)0x3c,
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   296
        (byte)0x7a, (byte)0x97, (byte)0x08, (byte)0x2a,
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   297
        (byte)0x85, (byte)0x04, (byte)0xba, (byte)0x0c,
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   298
        (byte)0xee, (byte)0xd1, (byte)0xbc, (byte)0xa2,
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   299
        (byte)0x17, (byte)0x22, (byte)0xd5, (byte)0x23,
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   300
        (byte)0xf2, (byte)0xe9, (byte)0xf2, (byte)0xc9,
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   301
        (byte)0xe5, (byte)0xda, (byte)0x8b, (byte)0x7f,
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   302
        (byte)0x91, (byte)0x4e, (byte)0x1f, (byte)0x6b
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   303
    };
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   304
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   305
    static char passphrase[] = "passphrase".toCharArray();
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   306
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   307
    /*
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   308
     * Is the server ready to serve?
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   309
     */
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   310
    volatile static boolean serverReady = false;
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   311
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   312
    /*
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   313
     * Turn on SSL debugging?
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   314
     */
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   315
    static boolean debug = false;
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   316
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   317
    /*
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   318
     * If the client or server is doing some kind of object creation
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   319
     * that the other side depends on, and that thread prematurely
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   320
     * exits, you may experience a hang.  The test harness will
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   321
     * terminate all hung threads after its timeout has expired,
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   322
     * currently 3 minutes by default, but you might try to be
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   323
     * smart about it....
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   324
     */
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   325
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   326
    /*
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   327
     * Define the server side of the test.
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   328
     *
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   329
     * If the server prematurely exits, serverReady will be set to true
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   330
     * to avoid infinite hangs.
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   331
     */
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   332
    void doServerSide() throws Exception {
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   333
        SSLServerSocketFactory sslssf =
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   334
                getSSLContext(true).getServerSocketFactory();
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   335
        SSLServerSocket sslServerSocket =
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   336
                (SSLServerSocket) sslssf.createServerSocket(serverPort);
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   337
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   338
        serverPort = sslServerSocket.getLocalPort();
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   339
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   340
        /*
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   341
         * Signal Client, we're ready for this connect.
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   342
         */
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   343
        serverReady = true;
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   344
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   345
        // Enable RSA_EXPORT cipher suites only.
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   346
        try {
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   347
            String enabledSuites[] = {
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   348
                "SSL_RSA_EXPORT_WITH_RC4_40_MD5",
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   349
                "SSL_RSA_EXPORT_WITH_DES40_CBC_SHA"};
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   350
            sslServerSocket.setEnabledCipherSuites(enabledSuites);
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   351
        } catch (IllegalArgumentException iae) {
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   352
            // ignore the exception a cipher suite is unsupported.
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   353
        }
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   354
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   355
        SSLSocket sslSocket = (SSLSocket) sslServerSocket.accept();
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   356
        InputStream sslIS = sslSocket.getInputStream();
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   357
        OutputStream sslOS = sslSocket.getOutputStream();
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   358
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   359
        sslIS.read();
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   360
        sslOS.write(85);
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   361
        sslOS.flush();
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   362
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   363
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   364
        sslSocket.close();
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   365
    }
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   366
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   367
    /*
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   368
     * Define the client side of the test.
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   369
     *
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   370
     * If the server prematurely exits, serverReady will be set to true
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   371
     * to avoid infinite hangs.
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   372
     */
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   373
    void doClientSide() throws Exception {
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   374
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   375
        /*
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   376
         * Wait for server to get started.
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   377
         */
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   378
        while (!serverReady) {
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   379
            Thread.sleep(50);
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   380
        }
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   381
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   382
        SSLSocketFactory sslsf =
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   383
                getSSLContext(false).getSocketFactory();
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   384
        SSLSocket sslSocket = (SSLSocket)
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   385
                sslsf.createSocket("localhost", serverPort);
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   386
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   387
        // Enable RSA_EXPORT cipher suites only.
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   388
        try {
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   389
            String enabledSuites[] = {
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   390
                "SSL_RSA_EXPORT_WITH_RC4_40_MD5",
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   391
                "SSL_RSA_EXPORT_WITH_DES40_CBC_SHA"};
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   392
            sslSocket.setEnabledCipherSuites(enabledSuites);
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   393
        } catch (IllegalArgumentException iae) {
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   394
            // ignore the exception a cipher suite is unsupported.
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   395
        }
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   396
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   397
        InputStream sslIS = sslSocket.getInputStream();
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   398
        OutputStream sslOS = sslSocket.getOutputStream();
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   399
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   400
        sslOS.write(280);
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   401
        sslOS.flush();
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   402
        sslIS.read();
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   403
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   404
        sslSocket.close();
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   405
    }
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   406
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   407
    /*
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   408
     * =============================================================
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   409
     * The remainder is just support stuff
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   410
     */
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   411
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   412
    // use any free port by default
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   413
    volatile int serverPort = 0;
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   414
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   415
    volatile Exception serverException = null;
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   416
    volatile Exception clientException = null;
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   417
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   418
    public static void main(String[] args) throws Exception {
14929
59377f4b9919 7109274: Restrict the use of certificates with RSA keys less than 1024 bits
xuelei
parents: 14342
diff changeset
   419
        // reset the security property to make sure that the algorithms
59377f4b9919 7109274: Restrict the use of certificates with RSA keys less than 1024 bits
xuelei
parents: 14342
diff changeset
   420
        // and keys used in this test are not disabled.
59377f4b9919 7109274: Restrict the use of certificates with RSA keys less than 1024 bits
xuelei
parents: 14342
diff changeset
   421
        Security.setProperty("jdk.certpath.disabledAlgorithms", "MD2");
48581
0786897e86b3 8163237: Restrict the use of EXPORT cipher suites
xuelei
parents: 47216
diff changeset
   422
        Security.setProperty("jdk.tls.disabledAlgorithms", "MD2");
14929
59377f4b9919 7109274: Restrict the use of certificates with RSA keys less than 1024 bits
xuelei
parents: 14342
diff changeset
   423
703
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   424
        if (debug)
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   425
            System.setProperty("javax.net.debug", "all");
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   426
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   427
        /*
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   428
         * Start the tests.
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   429
         */
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   430
        new RSAExport();
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   431
    }
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   432
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   433
    Thread clientThread = null;
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   434
    Thread serverThread = null;
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   435
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   436
    /*
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   437
     * Primary constructor, used to drive remainder of the test.
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   438
     *
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   439
     * Fork off the other side, then do your work.
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   440
     */
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   441
    RSAExport() throws Exception {
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   442
        if (separateServerThread) {
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   443
            startServer(true);
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   444
            startClient(false);
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   445
        } else {
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   446
            startClient(true);
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   447
            startServer(false);
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   448
        }
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   449
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   450
        /*
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   451
         * Wait for other side to close down.
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   452
         */
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   453
        if (separateServerThread) {
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   454
            serverThread.join();
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   455
        } else {
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   456
            clientThread.join();
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   457
        }
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   458
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   459
        /*
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   460
         * When we get here, the test is pretty much over.
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   461
         *
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   462
         * If the main thread excepted, that propagates back
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   463
         * immediately.  If the other thread threw an exception, we
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   464
         * should report back.
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   465
         */
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   466
        if (serverException != null)
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   467
            throw serverException;
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   468
        if (clientException != null)
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   469
            throw clientException;
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   470
    }
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   471
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   472
    void startServer(boolean newThread) throws Exception {
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   473
        if (newThread) {
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   474
            serverThread = new Thread() {
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   475
                public void run() {
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   476
                    try {
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   477
                        doServerSide();
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   478
                    } catch (Exception e) {
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   479
                        /*
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   480
                         * Our server thread just died.
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   481
                         *
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   482
                         * Release the client, if not active already...
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   483
                         */
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   484
                        System.err.println("Server died..." + e);
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   485
                        serverReady = true;
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   486
                        serverException = e;
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   487
                    }
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   488
                }
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   489
            };
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   490
            serverThread.start();
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   491
        } else {
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   492
            doServerSide();
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   493
        }
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   494
    }
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   495
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   496
    void startClient(boolean newThread) throws Exception {
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   497
        if (newThread) {
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   498
            clientThread = new Thread() {
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   499
                public void run() {
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   500
                    try {
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   501
                        doClientSide();
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   502
                    } catch (Exception e) {
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   503
                        /*
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   504
                         * Our client thread just died.
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   505
                         */
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   506
                        System.err.println("Client died...");
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   507
                        clientException = e;
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   508
                    }
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   509
                }
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   510
            };
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   511
            clientThread.start();
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   512
        } else {
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   513
            doClientSide();
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   514
        }
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   515
    }
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   516
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   517
    // Get the SSL context
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   518
    private SSLContext getSSLContext(boolean authnRequired) throws Exception {
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   519
        // generate certificate from cert string
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   520
        CertificateFactory cf = CertificateFactory.getInstance("X.509");
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   521
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   522
        ByteArrayInputStream is =
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   523
                    new ByteArrayInputStream(trusedCertStr.getBytes());
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   524
        Certificate trustedCert = cf.generateCertificate(is);
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   525
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   526
        // create a key store
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   527
        KeyStore ks = KeyStore.getInstance("JKS");
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   528
        ks.load(null, null);
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   529
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   530
        // import the trusted cert
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   531
        ks.setCertificateEntry("RSA Export Signer", trustedCert);
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   532
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   533
        if (authnRequired) {
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   534
            // generate the private key.
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   535
            RSAPrivateKeySpec priKeySpec = new RSAPrivateKeySpec(
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   536
                                            new BigInteger(modulus),
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   537
                                            new BigInteger(privateExponent));
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   538
            KeyFactory kf = KeyFactory.getInstance("RSA");
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   539
            RSAPrivateKey priKey =
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   540
                    (RSAPrivateKey)kf.generatePrivate(priKeySpec);
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   541
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   542
            // generate certificate chain
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   543
            is = new ByteArrayInputStream(serverCertStr.getBytes());
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   544
            Certificate serverCert = cf.generateCertificate(is);
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   545
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   546
            Certificate[] chain = new Certificate[2];
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   547
            chain[0] = serverCert;
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   548
            chain[1] = trustedCert;
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   549
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   550
            // import the key entry.
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   551
            ks.setKeyEntry("RSA Export", priKey, passphrase, chain);
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   552
        }
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   553
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   554
        // create SSL context
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   555
        TrustManagerFactory tmf = TrustManagerFactory.getInstance("PKIX");
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   556
        tmf.init(ks);
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   557
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   558
        SSLContext ctx = SSLContext.getInstance("TLS");
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   559
        if (authnRequired) {
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   560
            KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   561
            kmf.init(ks, passphrase);
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   562
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   563
            ctx.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   564
        } else {
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   565
            ctx.init(null, tmf.getTrustManagers(), null);
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   566
        }
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   567
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   568
        return ctx;
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   569
    }
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   570
80722b883082 6690018: RSAClientKeyExchange NullPointerException
xuelei
parents:
diff changeset
   571
}