Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/test/sun/security/tools/jarsigner/TsacertOptionTest.java
38853 views
1
/*
2
* Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
*
5
* This code is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU General Public License version 2 only, as
7
* published by the Free Software Foundation.
8
*
9
* This code is distributed in the hope that it will be useful, but WITHOUT
10
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12
* version 2 for more details (a copy is included in the LICENSE file that
13
* accompanied this code).
14
*
15
* You should have received a copy of the GNU General Public License version
16
* 2 along with this work; if not, write to the Free Software Foundation,
17
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18
*
19
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20
* or visit www.oracle.com if you need additional information or have any
21
* questions.
22
*/
23
24
import jdk.testlibrary.OutputAnalyzer;
25
import jdk.testlibrary.ProcessTools;
26
import jdk.testlibrary.JarUtils;
27
28
/**
29
* @test
30
* @bug 8024302 8026037
31
* @summary The test signs and verifies a jar file with -tsacert option
32
* @library /lib/testlibrary
33
* @run main TsacertOptionTest
34
*/
35
public class TsacertOptionTest {
36
37
private static final String FS = System.getProperty("file.separator");
38
private static final String JAVA_HOME = System.getProperty("test.jdk");
39
private static final String KEYTOOL = JAVA_HOME + FS + "bin" + FS
40
+ "keytool";
41
private static final String JARSIGNER = JAVA_HOME + FS + "bin" + FS
42
+ "jarsigner";
43
private static final String UNSIGNED_JARFILE = "unsigned.jar";
44
private static final String SIGNED_JARFILE = "signed.jar";
45
private static final String FILENAME = TsacertOptionTest.class.getName()
46
+ ".txt";
47
private static final String PASSWORD = "changeit";
48
private static final String KEYSTORE = "ks.jks";
49
private static final String CA_KEY_ALIAS = "ca";
50
private static final String SIGNING_KEY_ALIAS = "sign_alias";
51
private static final String TSA_KEY_ALIAS = "ts";
52
private static final String KEY_ALG = "RSA";
53
private static final int KEY_SIZE = 2048;
54
private static final int VALIDITY = 365;
55
private static final String WARNING = "Warning:";
56
private static final String JAR_SIGNED = "jar signed.";
57
private static final String JAR_VERIFIED = "jar verified.";
58
59
/**
60
* The test signs and verifies a jar file with -tsacert option,
61
* and checks that no warning was shown.
62
* A certificate that is addressed in -tsacert option contains URL to TSA
63
* in Subject Information Access extension.
64
*/
65
public static void main(String[] args) throws Throwable {
66
TsacertOptionTest test = new TsacertOptionTest();
67
test.start();
68
}
69
70
void start() throws Throwable {
71
// create a jar file that contains one file
72
Utils.createFiles(FILENAME);
73
JarUtils.createJar(UNSIGNED_JARFILE, FILENAME);
74
75
// look for free network port for TSA service
76
int port = jdk.testlibrary.Utils.getFreePort();
77
String host = "127.0.0.1";
78
String tsaUrl = "http://" + host + ":" + port;
79
80
// create key pair for jar signing
81
ProcessTools.executeCommand(KEYTOOL,
82
"-genkey",
83
"-alias", CA_KEY_ALIAS,
84
"-keyalg", KEY_ALG,
85
"-keysize", Integer.toString(KEY_SIZE),
86
"-keystore", KEYSTORE,
87
"-storepass", PASSWORD,
88
"-keypass", PASSWORD,
89
"-dname", "CN=CA",
90
"-ext", "bc:c",
91
"-validity", Integer.toString(VALIDITY)).shouldHaveExitValue(0);
92
ProcessTools.executeCommand(KEYTOOL,
93
"-genkey",
94
"-alias", SIGNING_KEY_ALIAS,
95
"-keyalg", KEY_ALG,
96
"-keysize", Integer.toString(KEY_SIZE),
97
"-keystore", KEYSTORE,
98
"-storepass", PASSWORD,
99
"-keypass", PASSWORD,
100
"-dname", "CN=Test").shouldHaveExitValue(0);
101
ProcessTools.executeCommand(KEYTOOL,
102
"-certreq",
103
"-alias", SIGNING_KEY_ALIAS,
104
"-keystore", KEYSTORE,
105
"-storepass", PASSWORD,
106
"-keypass", PASSWORD,
107
"-file", "certreq").shouldHaveExitValue(0);
108
ProcessTools.executeCommand(KEYTOOL,
109
"-gencert",
110
"-alias", CA_KEY_ALIAS,
111
"-keystore", KEYSTORE,
112
"-storepass", PASSWORD,
113
"-keypass", PASSWORD,
114
"-validity", Integer.toString(VALIDITY),
115
"-infile", "certreq",
116
"-outfile", "cert").shouldHaveExitValue(0);
117
ProcessTools.executeCommand(KEYTOOL,
118
"-importcert",
119
"-alias", SIGNING_KEY_ALIAS,
120
"-keystore", KEYSTORE,
121
"-storepass", PASSWORD,
122
"-keypass", PASSWORD,
123
"-file", "cert").shouldHaveExitValue(0);
124
125
// create key pair for TSA service
126
// SubjectInfoAccess extension contains URL to TSA service
127
ProcessTools.executeCommand(KEYTOOL,
128
"-genkey",
129
"-v",
130
"-alias", TSA_KEY_ALIAS,
131
"-keyalg", KEY_ALG,
132
"-keysize", Integer.toString(KEY_SIZE),
133
"-keystore", KEYSTORE,
134
"-storepass", PASSWORD,
135
"-keypass", PASSWORD,
136
"-dname", "CN=TSA",
137
"-ext", "ExtendedkeyUsage:critical=timeStamping",
138
"-ext", "SubjectInfoAccess=timeStamping:URI:" + tsaUrl,
139
"-validity", Integer.toString(VALIDITY)).shouldHaveExitValue(0);
140
141
try (TimestampCheck.Handler tsa = TimestampCheck.Handler.init(port,
142
KEYSTORE);) {
143
144
// start TSA
145
tsa.start();
146
147
// sign jar file
148
// specify -tsadigestalg option because
149
// TSA server uses SHA-512 digest algorithm
150
OutputAnalyzer analyzer = ProcessTools.executeCommand(JARSIGNER,
151
"-J-Dhttp.proxyHost=",
152
"-J-Dhttp.proxyPort=",
153
"-J-Djava.net.useSystemProxies=",
154
"-verbose",
155
"-keystore", KEYSTORE,
156
"-storepass", PASSWORD,
157
"-keypass", PASSWORD,
158
"-signedjar", SIGNED_JARFILE,
159
"-tsacert", TSA_KEY_ALIAS,
160
"-tsadigestalg", "SHA-512",
161
UNSIGNED_JARFILE,
162
SIGNING_KEY_ALIAS);
163
164
analyzer.shouldHaveExitValue(0);
165
analyzer.stdoutShouldNotContain(WARNING);
166
analyzer.shouldContain(JAR_SIGNED);
167
168
// verify signed jar
169
analyzer = ProcessTools.executeCommand(JARSIGNER,
170
"-verbose",
171
"-verify",
172
"-keystore", KEYSTORE,
173
"-storepass", PASSWORD,
174
SIGNED_JARFILE);
175
176
analyzer.shouldHaveExitValue(0);
177
analyzer.stdoutShouldNotContain(WARNING);
178
analyzer.shouldContain(JAR_VERIFIED);
179
}
180
181
System.out.println("Test passed");
182
}
183
184
}
185
186