blob: 48f180addb9c38fba7ca9bb46fd5512bd120d884 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
// --- BEGIN COPYRIGHT BLOCK ---
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; version 2 of the License.
//
// This program 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 General Public License for more details.
//
// You should have received a copy of the GNU General Public License along
// with this program; if not, write to the Free Software Foundation, Inc.,
// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
//
// (C) 2007 Red Hat, Inc.
// All rights reserved.
// --- END COPYRIGHT BLOCK ---
package com.netscape.cmstools;
import java.io.FileInputStream;
import java.io.IOException;
import com.netscape.cmsutil.util.Utils;
import netscape.security.util.DerOutputStream;
import netscape.security.util.DerValue;
/**
* This program joins a sequence of extensions together
* so that the final output can be used in configuration
* wizard for specifing extra extensions in default
* certificates (i.e. CA certificate, SSL certificate).
*
* Usage:
*
* <pre>
* ExtJoiner \
* <ext_file0> <ext_file1> ... <ext_fileN>
*
* where,
* <ext_file> is a file that has the base64
* encoded DER encoding of an X509 Extension
*
* ExtensionSequence ::= SEQUENCE OF Extension;
*
* 0 30 142: SEQUENCE {
* 3 30 69: SEQUENCE {
* 5 06 3: OBJECT IDENTIFIER issuerAltName (2 5 29 18)
* 10 04 62: OCTET STRING
* : 30 3C 82 01 61 82 01 61 A4 10 30 0E 31 0C 30 0A
* : 06 03 55 04 03 13 03 64 73 61 87 04 01 01 01 01
* : 86 01 61 81 14 74 68 6F 6D 61 73 6B 40 6E 65 74
* : 73 63 61 70 65 2E 63 6F 6D 88 03 29 01 01
* : }
* 74 30 69: SEQUENCE {
* 76 06 3: OBJECT IDENTIFIER subjectAltName (2 5 29 17)
* 81 04 62: OCTET STRING
* : 30 3C 82 01 61 82 01 61 A4 10 30 0E 31 0C 30 0A
* : 06 03 55 04 03 13 03 64 73 61 87 04 01 01 01 01
* : 86 01 61 81 14 74 68 6F 6D 61 73 6B 40 6E 65 74
* : 73 63 61 70 65 2E 63 6F 6D 88 03 29 01 01
* : }
* : }
* </pre>
*
* @version $Revision$, $Date$
*/
public class ExtJoiner {
public static void main(String args[]) {
try {
if (args.length == 0) {
System.out.println("Usage: ExtJoiner <ext_file0> <ext_file1> ... <ext_fileN>");
System.exit(0);
}
DerValue exts[] = new DerValue[args.length];
for (int i = 0; i < args.length; i++) {
byte data[] = getFileData(args[i]);
exts[i] = new DerValue(data);
}
DerOutputStream out = new DerOutputStream();
out.putSequence(exts);
System.out.println(Utils.base64encode(out.toByteArray()));
} catch (IOException e) {
System.out.println(e.toString());
}
}
public static byte[] getFileData(String fileName)
throws IOException {
FileInputStream fis = new FileInputStream(fileName);
byte data[] = new byte[fis.available()];
try {
fis.read(data);
} finally {
fis.close();
}
return Utils.base64decode(new String(data));
}
}
|