Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(87)

Side by Side Diff: java/src/org/apache/tomcat/jni/SSLContext.java

Issue 2842333002: Updated netty-tcnative to version 2.0.0.Final (Closed)
Patch Set: Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « java/src/org/apache/tomcat/jni/SSL.java ('k') | java/src/org/apache/tomcat/jni/SSLExt.java » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements. See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18 package org.apache.tomcat.jni;
19
20 /** SSL Context
21 *
22 * @author Mladen Turk
23 */
24 public final class SSLContext {
25
26
27 /**
28 * Initialize new SSL context
29 * @param pool The pool to use.
30 * @param protocol The SSL protocol to use. It can be any combination of
31 * the following:
32 * <PRE>
33 * {@link SSL#SSL_PROTOCOL_SSLV2}
34 * {@link SSL#SSL_PROTOCOL_SSLV3}
35 * {@link SSL#SSL_PROTOCOL_TLSV1}
36 * {@link SSL#SSL_PROTOCOL_TLSV1_1}
37 * {@link SSL#SSL_PROTOCOL_TLSV1_2}
38 * {@link SSL#SSL_PROTOCOL_ALL} ( == all TLS versions, no SSL)
39 * </PRE>
40 * @param mode SSL mode to use
41 * <PRE>
42 * SSL_MODE_CLIENT
43 * SSL_MODE_SERVER
44 * SSL_MODE_COMBINED
45 * </PRE>
46 */
47 public static native long make(long pool, int protocol, int mode)
48 throws Exception;
49
50 /**
51 * Free the resources used by the Context
52 * @param ctx Server or Client context to free.
53 * @return APR Status code.
54 */
55 public static native int free(long ctx);
56
57 /**
58 * Set Session context id. Usually host:port combination.
59 * @param ctx Context to use.
60 * @param id String that uniquely identifies this context.
61 */
62 public static native void setContextId(long ctx, String id);
63
64 /**
65 * Associate BIOCallback for input or output data capture.
66 * <br>
67 * First word in the output string will contain error
68 * level in the form:
69 * <PRE>
70 * [ERROR] -- Critical error messages
71 * [WARN] -- Warning messages
72 * [INFO] -- Informational messages
73 * [DEBUG] -- Debugging messaged
74 * </PRE>
75 * Callback can use that word to determine application logging level
76 * by intercepting <b>write</b> call.
77 * If the <b>bio</b> is set to 0 no error messages will be displayed.
78 * Default is to use the stderr output stream.
79 * @param ctx Server or Client context to use.
80 * @param bio BIO handle to use, created with SSL.newBIO
81 * @param dir BIO direction (1 for input 0 for output).
82 */
83 public static native void setBIO(long ctx, long bio, int dir);
84
85 /**
86 * Set OpenSSL Option.
87 * @param ctx Server or Client context to use.
88 * @param options See SSL.SSL_OP_* for option flags.
89 */
90 public static native void setOptions(long ctx, int options);
91
92 /**
93 * Get OpenSSL Option.
94 * @param ctx Server or Client context to use.
95 * @return options See SSL.SSL_OP_* for option flags.
96 */
97 public static native int getOptions(long ctx);
98
99 /**
100 * Clears OpenSSL Options.
101 * @param ctx Server or Client context to use.
102 * @param options See SSL.SSL_OP_* for option flags.
103 */
104 public static native void clearOptions(long ctx, int options);
105
106 /**
107 * Sets the "quiet shutdown" flag for <b>ctx</b> to be
108 * <b>mode</b>. SSL objects created from <b>ctx</b> inherit the
109 * <b>mode</b> valid at the time and may be 0 or 1.
110 * <br>
111 * Normally when a SSL connection is finished, the parties must send out
112 * "close notify" alert messages using L&lt;SSL_shutdown(3)|SSL_shutdown(3)& gt;
113 * for a clean shutdown.
114 * <br>
115 * When setting the "quiet shutdown" flag to 1, <b>SSL.shutdown</b>
116 * will set the internal flags to SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN.
117 * (<b>SSL_shutdown</b> then behaves like called with
118 * SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN.)
119 * The session is thus considered to be shutdown, but no "close notify" aler t
120 * is sent to the peer. This behaviour violates the TLS standard.
121 * The default is normal shutdown behaviour as described by the TLS standard .
122 * @param ctx Server or Client context to use.
123 * @param mode True to set the quiet shutdown.
124 */
125 public static native void setQuietShutdown(long ctx, boolean mode);
126
127 /**
128 * Cipher Suite available for negotiation in SSL handshake.
129 * <br>
130 * This complex directive uses a colon-separated cipher-spec string consisti ng
131 * of OpenSSL cipher specifications to configure the Cipher Suite the client
132 * is permitted to negotiate in the SSL handshake phase. Notice that this
133 * directive can be used both in per-server and per-directory context.
134 * In per-server context it applies to the standard SSL handshake when a
135 * connection is established. In per-directory context it forces a SSL
136 * renegotiation with the reconfigured Cipher Suite after the HTTP request
137 * was read but before the HTTP response is sent.
138 * @param ctx Server or Client context to use.
139 * @param ciphers An SSL cipher specification.
140 */
141 public static native boolean setCipherSuite(long ctx, String ciphers)
142 throws Exception;
143
144 /**
145 * Set File of concatenated PEM-encoded CA CRLs or
146 * directory of PEM-encoded CA Certificates for Client Auth
147 * <br>
148 * This directive sets the all-in-one file where you can assemble the
149 * Certificate Revocation Lists (CRL) of Certification Authorities (CA)
150 * whose clients you deal with. These are used for Client Authentication.
151 * Such a file is simply the concatenation of the various PEM-encoded CRL
152 * files, in order of preference.
153 * <br>
154 * The files in this directory have to be PEM-encoded and are accessed throu gh
155 * hash filenames. So usually you can't just place the Certificate files the re:
156 * you also have to create symbolic links named hash-value.N. And you should
157 * always make sure this directory contains the appropriate symbolic links.
158 * Use the Makefile which comes with mod_ssl to accomplish this task.
159 * @param ctx Server or Client context to use.
160 * @param file File of concatenated PEM-encoded CA CRLs for Client Auth.
161 * @param path Directory of PEM-encoded CA Certificates for Client Auth.
162 */
163 public static native boolean setCARevocation(long ctx, String file,
164 String path)
165 throws Exception;
166
167 /**
168 * Set File of PEM-encoded Server CA Certificates
169 * <br>
170 * This directive sets the optional all-in-one file where you can assemble t he
171 * certificates of Certification Authorities (CA) which form the certificate
172 * chain of the server certificate. This starts with the issuing CA certific ate
173 * of of the server certificate and can range up to the root CA certificate.
174 * Such a file is simply the concatenation of the various PEM-encoded CA
175 * Certificate files, usually in certificate chain order.
176 * <br>
177 * But be careful: Providing the certificate chain works only if you are usi ng
178 * a single (either RSA or DSA) based server certificate. If you are using a
179 * coupled RSA+DSA certificate pair, this will work only if actually both
180 * certificates use the same certificate chain. Else the browsers will be
181 * confused in this situation.
182 * @param ctx Server or Client context to use.
183 * @param file File of PEM-encoded Server CA Certificates.
184 * @param skipfirst Skip first certificate if chain file is inside
185 * certificate file.
186 */
187 public static native boolean setCertificateChainFile(long ctx, String file,
188 boolean skipfirst);
189 /**
190 * Set BIO of PEM-encoded Server CA Certificates
191 * <p>
192 * This directive sets the optional all-in-one file where you can assemble t he
193 * certificates of Certification Authorities (CA) which form the certificate
194 * chain of the server certificate. This starts with the issuing CA certific ate
195 * of of the server certificate and can range up to the root CA certificate.
196 * Such a file is simply the concatenation of the various PEM-encoded CA
197 * Certificate files, usually in certificate chain order.
198 * <p>
199 * But be careful: Providing the certificate chain works only if you are usi ng
200 * a single (either RSA or DSA) based server certificate. If you are using a
201 * coupled RSA+DSA certificate pair, this will work only if actually both
202 * certificates use the same certificate chain. Otherwsie the browsers will be
203 * confused in this situation.
204 * @param ctx Server or Client context to use.
205 * @param bio BIO of PEM-encoded Server CA Certificates.
206 * @param skipfirst Skip first certificate if chain file is inside
207 * certificate file.
208 */
209 public static native boolean setCertificateChainBio(long ctx, long bio, bool ean skipfirst);
210
211 /**
212 * Set Certificate
213 * <br>
214 * Point setCertificateFile at a PEM encoded certificate. If
215 * the certificate is encrypted, then you will be prompted for a
216 * pass phrase. Note that a kill -HUP will prompt again. A test
217 * certificate can be generated with `make certificate' under
218 * built time. Keep in mind that if you've both a RSA and a DSA
219 * certificate you can configure both in parallel (to also allow
220 * the use of DSA ciphers, etc.)
221 * <br>
222 * If the key is not combined with the certificate, use key param
223 * to point at the key file. Keep in mind that if
224 * you've both a RSA and a DSA private key you can configure
225 * both in parallel (to also allow the use of DSA ciphers, etc.)
226 * @param ctx Server or Client context to use.
227 * @param cert Certificate file.
228 * @param key Private Key file to use if not in cert.
229 * @param password Certificate password. If null and certificate
230 * is encrypted, password prompt will be displayed.
231 * @param idx Certificate index SSL_AIDX_RSA or SSL_AIDX_DSA.
232 */
233 public static native boolean setCertificate(long ctx, String cert,
234 String key, String password,
235 int idx)
236 throws Exception;
237
238 /**
239 * Set Certificate
240 * <br>
241 * Point setCertificate at a PEM encoded certificate stored in a BIO. If
242 * the certificate is encrypted, then you will be prompted for a
243 * pass phrase. Note that a kill -HUP will prompt again. A test
244 * certificate can be generated with `make certificate' under
245 * built time. Keep in mind that if you've both a RSA and a DSA
246 * certificate you can configure both in parallel (to also allow
247 * the use of DSA ciphers, etc.)
248 * <br>
249 * If the key is not combined with the certificate, use key param
250 * to point at the key file. Keep in mind that if
251 * you've both a RSA and a DSA private key you can configure
252 * both in parallel (to also allow the use of DSA ciphers, etc.)
253 * @param ctx Server or Client context to use.
254 * @param certBio Certificate BIO.
255 * @param keyBio Private Key BIO to use if not in cert.
256 * @param password Certificate password. If null and certificate
257 * is encrypted, password prompt will be displayed.
258 * @param idx Certificate index SSL_AIDX_RSA or SSL_AIDX_DSA.
259 */
260 public static native boolean setCertificateBio(
261 long ctx, long certBio, long keyBio, String password, int idx) throw s Exception;
262
263 /**
264 * Set the size of the internal session cache.
265 * http://www.openssl.org/docs/ssl/SSL_CTX_sess_set_cache_size.html
266 */
267 public static native long setSessionCacheSize(long ctx, long size);
268
269 /**
270 * Get the size of the internal session cache.
271 * http://www.openssl.org/docs/ssl/SSL_CTX_sess_get_cache_size.html
272 */
273 public static native long getSessionCacheSize(long ctx);
274
275 /**
276 * Set the timeout for the internal session cache in seconds.
277 * http://www.openssl.org/docs/ssl/SSL_CTX_set_timeout.html
278 */
279 public static native long setSessionCacheTimeout(long ctx, long timeoutSecon ds);
280
281 /**
282 * Get the timeout for the internal session cache in seconds.
283 * http://www.openssl.org/docs/ssl/SSL_CTX_set_timeout.html
284 */
285 public static native long getSessionCacheTimeout(long ctx);
286
287 /**
288 * Set the mode of the internal session cache and return the previous used m ode.
289 */
290 public static native long setSessionCacheMode(long ctx, long mode);
291
292 /**
293 * Get the mode of the current used internal session cache.
294 */
295 public static native long getSessionCacheMode(long ctx);
296
297 /**
298 * Session resumption statistics methods.
299 * http://www.openssl.org/docs/ssl/SSL_CTX_sess_number.html
300 */
301 public static native long sessionAccept(long ctx);
302 public static native long sessionAcceptGood(long ctx);
303 public static native long sessionAcceptRenegotiate(long ctx);
304 public static native long sessionCacheFull(long ctx);
305 public static native long sessionCbHits(long ctx);
306 public static native long sessionConnect(long ctx);
307 public static native long sessionConnectGood(long ctx);
308 public static native long sessionConnectRenegotiate(long ctx);
309 public static native long sessionHits(long ctx);
310 public static native long sessionMisses(long ctx);
311 public static native long sessionNumber(long ctx);
312 public static native long sessionTimeouts(long ctx);
313
314 /**
315 * Set TLS session keys.
316 */
317 public static void setSessionTicketKeys(long ctx, SessionTicketKey[] keys) {
318 if (keys == null || keys.length == 0) {
319 throw new IllegalArgumentException("Length of the keys should be lon ger than 0.");
320 }
321 byte[] binaryKeys = new byte[keys.length * SessionTicketKey.TICKET_KEY_S IZE];
322 for (int i = 0; i < keys.length; i++) {
323 SessionTicketKey key = keys[i];
324 int dstCurPos = SessionTicketKey.TICKET_KEY_SIZE * i;
325 System.arraycopy(key.getName(), 0, binaryKeys, dstCurPos, SessionTic ketKey.NAME_SIZE);
326 dstCurPos += SessionTicketKey.NAME_SIZE;
327 System.arraycopy(key.getHmacKey(), 0, binaryKeys, dstCurPos, Session TicketKey.HMAC_KEY_SIZE);
328 dstCurPos += SessionTicketKey.HMAC_KEY_SIZE;
329 System.arraycopy(key.getAesKey(), 0, binaryKeys, dstCurPos, SessionT icketKey.AES_KEY_SIZE);
330 }
331 setSessionTicketKeys0(ctx, binaryKeys);
332 }
333
334 /**
335 * Set TLS session keys. This allows us to share keys across TFEs.
336 */
337 @Deprecated
338 public static void setSessionTicketKeys(long ctx, byte[] keys) {
339 if (keys.length % SessionTicketKey.TICKET_KEY_SIZE != 0) {
340 throw new IllegalArgumentException("Session ticket keys provided wer e wrong size. keys.length % " + SessionTicketKey.TICKET_KEY_SIZE + " must be 0") ;
341 }
342 setSessionTicketKeys0(ctx, keys);
343 }
344 /**
345 * Set TLS session keys. This allows us to share keys across TFEs.
346 */
347 private static native void setSessionTicketKeys0(long ctx, byte[] keys);
348
349 /**
350 * Set File and Directory of concatenated PEM-encoded CA Certificates
351 * for Client Auth
352 * <br>
353 * This directive sets the all-in-one file where you can assemble the
354 * Certificates of Certification Authorities (CA) whose clients you deal wit h.
355 * These are used for Client Authentication. Such a file is simply the
356 * concatenation of the various PEM-encoded Certificate files, in order of
357 * preference. This can be used alternatively and/or additionally to
358 * path.
359 * <br>
360 * The files in this directory have to be PEM-encoded and are accessed throu gh
361 * hash filenames. So usually you can't just place the Certificate files the re:
362 * you also have to create symbolic links named hash-value.N. And you should
363 * always make sure this directory contains the appropriate symbolic links.
364 * Use the Makefile which comes with mod_ssl to accomplish this task.
365 * @param ctx Server or Client context to use.
366 * @param file File of concatenated PEM-encoded CA Certificates for
367 * Client Auth.
368 * @param path Directory of PEM-encoded CA Certificates for Client Auth.
369 */
370 public static native boolean setCACertificate(long ctx, String file,
371 String path)
372 throws Exception;
373
374 /**
375 * Set file for randomness
376 * @param ctx Server or Client context to use.
377 * @param file random file.
378 */
379 public static native void setRandom(long ctx, String file);
380
381 /**
382 * Set SSL connection shutdown type
383 * <br>
384 * The following levels are available for level:
385 * <PRE>
386 * SSL_SHUTDOWN_TYPE_STANDARD
387 * SSL_SHUTDOWN_TYPE_UNCLEAN
388 * SSL_SHUTDOWN_TYPE_ACCURATE
389 * </PRE>
390 * @param ctx Server or Client context to use.
391 * @param type Shutdown type to use.
392 */
393 public static native void setShutdownType(long ctx, int type);
394
395 /**
396 * Set Type of Client Certificate verification and Maximum depth of CA Certi ficates
397 * in Client Certificate verification.
398 * <br>
399 * This directive sets the Certificate verification level for the Client
400 * Authentication. Notice that this directive can be used both in per-server
401 * and per-directory context. In per-server context it applies to the client
402 * authentication process used in the standard SSL handshake when a connecti on
403 * is established. In per-directory context it forces a SSL renegotiation wi th
404 * the reconfigured client verification level after the HTTP request was rea d
405 * but before the HTTP response is sent.
406 * <br>
407 * The following levels are available for level:
408 * <PRE>
409 * SSL_CVERIFY_NONE - No client Certificate is required at all
410 * SSL_CVERIFY_OPTIONAL - The client may present a valid Certificate
411 * SSL_CVERIFY_REQUIRE - The client has to present a valid Certificat e
412 * SSL_CVERIFY_OPTIONAL_NO_CA - The client may present a valid Certificate
413 * but it need not to be (successfully) verifia ble
414 * </PRE>
415 * <br>
416 * The depth actually is the maximum number of intermediate certificate issu ers,
417 * i.e. the number of CA certificates which are max allowed to be followed w hile
418 * verifying the client certificate. A depth of 0 means that self-signed cli ent
419 * certificates are accepted only, the default depth of 1 means the client
420 * certificate can be self-signed or has to be signed by a CA which is direc tly
421 * known to the server (i.e. the CA's certificate is under
422 * <code>setCACertificatePath</code>), etc.
423 * @param ctx Server or Client context to use.
424 * @param level Type of Client Certificate verification.
425 * @param depth Maximum depth of CA Certificates in Client Certificate
426 * verification.
427 */
428 public static native void setVerify(long ctx, int level, int depth);
429
430 /**
431 * Allow to hook {@link CertificateVerifier} into the handshake processing.
432 * This will call {@code SSL_CTX_set_cert_verify_callback} and so replace th e default verification
433 * callback used by openssl
434 * @param ctx Server or Client context to use.
435 * @param verifier the verifier to call during handshake.
436 */
437 public static native void setCertVerifyCallback(long ctx, CertificateVerifie r verifier);
438
439 /**
440 * Set next protocol for next protocol negotiation extension
441 * @param ctx Server context to use.
442 * @param nextProtos comma delimited list of protocols in priority order
443 *
444 * @deprecated use {@link #setNpnProtos(long, String[], int)}
445 */
446 @Deprecated
447 public static void setNextProtos(long ctx, String nextProtos) {
448 setNpnProtos(ctx, nextProtos.split(","), SSL.SSL_SELECTOR_FAILURE_CHOOSE _MY_LAST_PROTOCOL);
449 }
450
451 /**
452 * Set next protocol for next protocol negotiation extension
453 * @param ctx Server context to use.
454 * @param nextProtos protocols in priority order
455 * @param selectorFailureBehavior see {@link SSL#SSL_SELECTOR_FAILURE_NO_ADV ERTISE}
456 * and {@link SSL#SSL_SELECTOR_FAILURE_CHOOSE _MY_LAST_PROTOCOL}
457 */
458 public static native void setNpnProtos(long ctx, String[] nextProtos, int se lectorFailureBehavior);
459
460 /**
461 * Set application layer protocol for application layer protocol negotiation extension
462 * @param ctx Server context to use.
463 * @param alpnProtos protocols in priority order
464 * @param selectorFailureBehavior see {@link SSL#SSL_SELECTOR_FAILURE_NO_ADV ERTISE}
465 * and {@link SSL#SSL_SELECTOR_FAILURE_CHOOSE _MY_LAST_PROTOCOL}
466 */
467 public static native void setAlpnProtos(long ctx, String[] alpnProtos, int s electorFailureBehavior);
468
469 /**
470 * Set DH parameters
471 * @param ctx Server context to use.
472 * @param cert DH param file (can be generated from e.g. {@code openssl dhpa ram -rand - 2048 > dhparam.pem} -
473 * see the <a href="https://www.openssl.org/docs/apps/dhparam.ht ml">OpenSSL documentation</a>).
474 */
475 public static native void setTmpDH(long ctx, String cert)
476 throws Exception;
477
478 /**
479 * Set ECDH elliptic curve by name
480 * @param ctx Server context to use.
481 * @param curveName the name of the elliptic curve to use
482 * (available names can be obtained from {@code openssl ecparam -list_curves}).
483 */
484 public static native void setTmpECDHByCurveName(long ctx, String curveName)
485 throws Exception;
486
487 /**
488 * Set the context within which session be reused (server side only)
489 * http://www.openssl.org/docs/ssl/SSL_CTX_set_session_id_context.html
490 *
491 * @param ctx Server context to use.
492 * @param sidCtx can be any kind of binary data, it is therefore possible to use e.g. the name
493 * of the application and/or the hostname and/or service name
494 * @return {@code true} if success, {@code false} otherwise.
495 */
496 public static native boolean setSessionIdContext(long ctx, byte[] sidCtx);
497 }
OLDNEW
« no previous file with comments | « java/src/org/apache/tomcat/jni/SSL.java ('k') | java/src/org/apache/tomcat/jni/SSLExt.java » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698