1 <?xml version="1.0" encoding="ISO-8859-1"?>
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
4 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
5 This file is generated from xml source: DO NOT EDIT
6 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
8 <title>mod_ssl_ct - Apache HTTP Server Version 2.5</title>
9 <link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
10 <link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
11 <link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" />
12 <script src="../style/scripts/prettify.min.js" type="text/javascript">
15 <link href="../images/favicon.ico" rel="shortcut icon" /></head>
17 <div id="page-header">
18 <p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/quickreference.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
19 <p class="apache">Apache HTTP Server Version 2.5</p>
20 <img alt="" src="../images/feather.gif" /></div>
21 <div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div>
23 <a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">HTTP Server</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.5</a> > <a href="./">Modules</a></div>
24 <div id="page-content">
25 <div id="preamble"><h1>Apache Module mod_ssl_ct</h1>
27 <p><span>Available Languages: </span><a href="../en/mod/mod_ssl_ct.html" title="English"> en </a></p>
29 <table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Implementation of Certificate Transparency (RFC 6962)
31 <tr><th><a href="module-dict.html#Status">Status:</a></th><td>Extension</td></tr>
32 <tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>ssl_ct_module</td></tr>
33 <tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_ssl_ct.c</td></tr></table>
37 <p>This module provides an implementation of Certificate Transparency, in
38 conjunction with <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> and command-line tools from the
39 <a href="https://code.google.com/p/certificate-transparency/">certificate-transparency</a>
40 open source project. The goal of Certificate Transparency is to expose the
41 use of server certificates which are trusted by browsers but were mistakenly
42 or maliciously issued. More information about Certificate Transparency is
43 available at <a href="http://www.certificate-transparency.org/">
44 http://www.certificate-transparency.org/</a>. Key terminology used in
45 this documentation:</p>
48 <dt>Certificate log</dt>
49 <dd>A certificate log, referred to simply as <q>log</q> in this documentation,
50 is a network service to which server certificates have been submitted. A
51 user agent can confirm that the certificate of a server which it accesses
52 has been submitted to a log which it trusts, and that the log itself has
53 not been tampered with.</dd>
55 <dt>Signed Certificate Timestamp (SCT)</dt>
56 <dd>This is an acknowledgement from a log that it has accepted a valid
57 certificate. It is signed with the log's public key. One or more SCTs
58 is passed to clients during the handshake, either in the ServerHello
59 (TLS extension), certificate extension, or in a stapled OCSP response.</dd>
62 <p>This implementation for Apache httpd provides these features for TLS
63 servers and proxies:</p>
66 <li>Signed Certificate Timestamps (SCTs) can be obtained from logs
67 automatically and, in conjunction with any statically configured SCTs, sent
68 to aware clients in the ServerHello (during the handshake).</li>
69 <li>SCTs can be received by the proxy from origin servers in the ServerHello,
70 in a certificate extension, and/or within stapled OCSP responses; any SCTs
71 received can be partially validated on-line and optionally queued for off-line
73 <li>The proxy can be configured to disallow communication with an origin
74 server which does not provide an SCT which passes on-line validation.</li>
77 <p>Configuration information about logs can be defined statically in the web
78 server configuration or maintained in a SQLite3 database. In the latter case,
79 <code class="module"><a href="../mod/mod_ssl_ct.html">mod_ssl_ct</a></code> will reload the database periodically, so any
80 site-specific infrastructure for maintaining and propagating log configuration
81 information does not have to also restart httpd to make it take effect.</p>
83 <div class="note">This module is experimental for the following reasons:
85 <li>Insufficient test and review</li>
86 <li>Reliance on an unreleased version of OpenSSL (1.0.2, Beta 3 or later) for
88 <li>Incomplete <a href="#audit">off-line audit capability</a></li>
91 <p>Configuration mechanisms, format of data saved for off-line audit, and
92 other characteristics are subject to change based on further feedback and
96 <div id="quickview"><h3 class="directives">Directives</h3>
98 <li><img alt="" src="../images/down.gif" /> <a href="#ctauditstorage">CTAuditStorage</a></li>
99 <li><img alt="" src="../images/down.gif" /> <a href="#ctlogclient">CTLogClient</a></li>
100 <li><img alt="" src="../images/down.gif" /> <a href="#ctlogconfigdb">CTLogConfigDB</a></li>
101 <li><img alt="" src="../images/down.gif" /> <a href="#ctmaxsctage">CTMaxSCTAge</a></li>
102 <li><img alt="" src="../images/down.gif" /> <a href="#ctproxyawareness">CTProxyAwareness</a></li>
103 <li><img alt="" src="../images/down.gif" /> <a href="#ctsctstorage">CTSCTStorage</a></li>
104 <li><img alt="" src="../images/down.gif" /> <a href="#ctserverhellosctlimit">CTServerHelloSCTLimit</a></li>
105 <li><img alt="" src="../images/down.gif" /> <a href="#ctstaticlogconfig">CTStaticLogConfig</a></li>
106 <li><img alt="" src="../images/down.gif" /> <a href="#ctstaticscts">CTStaticSCTs</a></li>
110 <li><img alt="" src="../images/down.gif" /> <a href="#server">Server processing overview</a></li>
111 <li><img alt="" src="../images/down.gif" /> <a href="#proxy">Proxy processing overview</a></li>
112 <li><img alt="" src="../images/down.gif" /> <a href="#logconf">Log configuration</a></li>
113 <li><img alt="" src="../images/down.gif" /> <a href="#logging">Logging CT status in the access log</a></li>
114 <li><img alt="" src="../images/down.gif" /> <a href="#audit">Off-line audit for proxy</a></li>
115 </ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
116 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
117 <div class="section">
118 <h2><a name="server" id="server">Server processing overview</a></h2>
121 <p>Servers need to send SCTs to their clients. SCTs in a certificate
122 extension or stapled OCSP response will be sent without any special program
123 logic. This module handles sending SCTs configured by the administrator or
124 received from configured logs.</p>
126 <p>The number of SCTs sent in the ServerHello (i.e., not including those in a
127 certificate extension or stapled OCSP response) can be limited by the
128 <code class="directive"><a href="#ctserverhellosctlimit">CTServerHelloSCTLimit</a></code>
131 <p>For each server certificate, a daemon process maintains an SCT list to be
132 sent in the ServerHello, created from statically configured SCTs as well as
133 those received from logs. Logs marked as untrusted or with a maximum valid
134 timestamp before the present time will be ignored. Periodically the daemon
135 will submit certificates to a log as necessary (due to changed log
136 configuration or age) and rebuild the concatenation of SCTs.</p>
138 <p>The SCT list for a server certificate will be sent to any client that
139 indicates awareness in the ClientHello when that particular server certificate
142 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
143 <div class="section">
144 <h2><a name="proxy" id="proxy">Proxy processing overview</a></h2>
147 <p>The proxy indicates Certificate Transparency awareness in the ClientHello
148 by including the <em>signed_certificate_timestamp</em> extension. It can
149 recognize SCTs received in the ServerHello, in an extension in the certificate
150 for an origin server, or in a stapled OCSP response.</p>
152 <p>On-line verification is attempted for each received SCT:</p>
155 <li>For any SCT, the timestamp can be checked to see if it is not yet valid
156 based on the current time as well as any configured valid time interval for
158 <li>For an SCT from a log for which a public key is configured, the server
159 signature will be checked.</li>
162 <p>If verification fails for at least one SCT and verification was not
163 successful for at least one SCT, the connection is aborted if
164 <code class="directive"><a href="#ctproxyawareness">CTProxyAwareness</a></code> is set to
165 <em>require</em>.</p>
167 <p>Additionally, the server certificate chain and SCTs are stored for off-line
168 verification if the <code class="directive"><a href="#ctauditstorage">CTAuditStorage</a></code>
169 directive is configured.</p>
171 <p>As an optimization, on-line verification and storing of data from the
172 server is only performed the first time a web server child process receives
173 the data. This saves some processing time as well as disk space. For typical
174 reverse proxy setups, very little processing overhead will be required.</p>
176 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
177 <div class="section">
178 <h2><a name="logconf" id="logconf">Log configuration</a></h2>
181 <p>Servers and proxies use different information about logs for their processing.
182 This <em>log configuration</em> can be set in two ways:</p>
185 <li>Create a log configuration database using <code class="program"><a href="../programs/ctlogconfig.html">ctlogconfig</a></code>,
186 and configure the path to that database using the <code class="directive"><a href="#ctlogconfig">
187 CTLogConfig</a></code> directive. This method of configuration supports
188 dynamic updates; <code class="module"><a href="../mod/mod_ssl_ct.html">mod_ssl_ct</a></code> will re-read the database at
189 intervals. Additionally, the off-line audit program <code>ctauditscts</code>
190 can use this configuration to find the URL of logs.</li>
192 <li>Configure information about logs statically using the <code class="directive"><a href="#ctstaticlogconfig">CTStaticLogConfig</a></code> directive. As with all other
193 directives, the server must be restarted in order to pick up changes to the
197 <p>The information that can be configured about a log using either mechanism is
202 <dd>The log id is the SHA-256 hash of the log's public key, and is part of
203 every SCT. This is a convenient way to identify a particular log when
204 configuring valid timestamp ranges or certain other information.</dd>
206 <dt>public key of the log</dt>
207 <dd>A proxy must have the public key of the log in order to check the
208 signature in SCTs it receives which were obtained from the log.
210 A server must have the public key of the log in order to submit certificates
213 <dt>general trust/distrust setting</dt>
214 <dd>This is a mechanism to distrust or restore trust in a particular log,
215 for whatever reason (including simply avoiding interaction with the
216 log in situations where it is off-line).</dd>
218 <dt>minimum and/or maximum valid timestamps</dt>
219 <dd>When configured, the proxy will check that timestamps from SCTs
220 are within the valid range.</dd>
223 <dd>The URL of the log (for its API) is required by a server in order to
224 submit server certificates to the log. The server will submit
225 each server certificate in order to obtain an SCT for each log with a
226 configured URL, except when the log is also marked as distrusted or the
227 current time is not within any configured valid timestamp range.
229 The log URL is also needed by off-line auditing of SCTs received by a
233 <p>Generally, only a small subset of this information is configured for a
234 particular log. Refer to the documentation for the <code class="directive"><a href="#ctstaticlogconfig">CTStaticLogConfig</a></code> directive and the
235 <code class="program"><a href="../programs/ctlogconfig.html">ctlogconfig</a></code> command for more specific information.</p>
237 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
238 <div class="section">
239 <h2><a name="logging" id="logging">Logging CT status in the access log</a></h2>
242 <p>Both proxy and server modes set the <code>SSL_CT_PEER_STATUS</code>
243 variable to indicate if the peer is CT-aware.</p>
245 <p>Proxy mode sets the <code>SSL_PROXY_SCT_SOURCES</code> variable to
246 indicate whether and where SCTs were obtained (ServerHello, certificate
247 extension, etc.).</p>
249 <p>These variables can be logged with the <code>%{<em>varname</em>}e</code>
250 format of <code class="module"><a href="../mod/mod_log_config.html">mod_log_config</a></code>.</p>
251 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
252 <div class="section">
253 <h2><a name="audit" id="audit">Off-line audit for proxy</a></h2>
256 <p>Experimental support for this is implemented in the <code>ctauditscts</code>
257 command, which itself relies on the <code>verify_single_proof.py</code> tool in the
258 <em>certificate-transparency</em> open source project. <code>ctauditscts</code>
259 can parse data for off-line audit (enabled with the <code class="directive"><a href="#ctauditstorage">
260 CTAuditStorage</a></code> directive) and invoke <code>verify_single_proof.py</code>.
263 <p>Here are rough notes for using <code>ctauditscts</code>:</p>
266 <li>Create a <em>virtualenv</em> using the <code>requirements.txt</code> file
267 from the <em>certificate-transparency</em> project and run the following steps
268 with that <em>virtualenv</em> activated.</li>
269 <li>Set <code>PYTHONPATH</code> to include the <code>python</code>
270 directory within the <em>certificate-transparency</em> tools.</li>
271 <li>Set <code>PATH</code> to include the <code>python/ct/client/tools</code>
273 <li>Run <code>ctauditscts</code>, passing the value of the
274 <code class="directive">CTAuditStorage</code> directive and, optionally, the path to
275 the log configuration database. The latter will be used to look up log URLs
279 <p>The data saved for audit can also be used by other programs; refer to the
280 <code>ctauditscts</code> source code for details on processing the data.</p>
282 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
283 <div class="directive-section"><h2><a name="CTAuditStorage" id="CTAuditStorage">CTAuditStorage</a> <a name="ctauditstorage" id="ctauditstorage">Directive</a></h2>
284 <table class="directive">
285 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Existing directory where data for off-line audit will be stored</td></tr>
286 <tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>CTAuditStorage <em>directory</em></code></td></tr>
287 <tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>none</code></td></tr>
288 <tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
289 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
290 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ssl_ct</td></tr>
292 <p>The <code class="directive">CTAuditStorage</code> directive sets the name of a
293 directory where data will be stored for off-line audit. If <em>directory</em>
294 is not absolute then it is assumed to be relative to <code class="directive"><a href="../mod/core.html#defaultruntimedir">
295 DefaultRuntimeDir</a></code>.</p>
297 <p>If this directive is not specified, data will not be stored for off-line
300 <p>The directory will contain files named <code><em>PID</em>.tmp</code> for
301 active child processes and files named <code><em>PID</em>.out</code> for exited
302 child processes. These <code>.out</code> files are ready for off-line audit.
303 The experimental command <code>ctauditscts</code> (in the httpd source tree, not
304 currently installed) interfaces with <em>certificate-transparency</em> tools to
305 perform the audit.</p>
308 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
309 <div class="directive-section"><h2><a name="CTLogClient" id="CTLogClient">CTLogClient</a> <a name="ctlogclient" id="ctlogclient">Directive</a></h2>
310 <table class="directive">
311 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Location of certificate-transparency log client tool</td></tr>
312 <tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>CTLogClient <em>executable</em></code></td></tr>
313 <tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>none</code></td></tr>
314 <tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
315 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
316 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ssl_ct</td></tr>
318 <p><em>executable</em> is the full path to the log client tool, which is
319 normally file <code>cpp/client/ct</code> (or <code>ct.exe</code>) within the
321 <a href="https://code.google.com/p/certificate-transparency/">
322 certificate-transparency</a> open source project.</p>
324 <p>An alternative implementation could be used to retrieve SCTs for a
325 server certificate as long as the command-line interface is equivalent.</p>
327 <p>If this directive is not configured, server certificates cannot be
328 submitted to logs in order to obtain SCTs; thus, only admin-managed
329 SCTs or SCTs in certificate extensions will be provided to clients.</p>
332 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
333 <div class="directive-section"><h2><a name="CTLogConfigDB" id="CTLogConfigDB">CTLogConfigDB</a> <a name="ctlogconfigdb" id="ctlogconfigdb">Directive</a></h2>
334 <table class="directive">
335 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Log configuration database supporting dynamic updates</td></tr>
336 <tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>CTLogConfigDB <em>filename</em></code></td></tr>
337 <tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>none</code></td></tr>
338 <tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
339 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
340 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ssl_ct</td></tr>
342 <p>The <code class="directive">CTLogConfigDB</code> directive sets the name of a database
343 containing configuration about known logs. If <em>filename</em> is not absolute
344 then it is assumed to be relative to
345 <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>.</p>
347 <p>Refer to the documentation for the <code class="program"><a href="../programs/ctlogconfig.html">ctlogconfig</a></code> program,
348 which manages the database.</p>
351 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
352 <div class="directive-section"><h2><a name="CTMaxSCTAge" id="CTMaxSCTAge">CTMaxSCTAge</a> <a name="ctmaxsctage" id="ctmaxsctage">Directive</a></h2>
353 <table class="directive">
354 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Maximum age of SCT obtained from a log, before it will be
356 <tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>CTMaxSCTAge <em>num-seconds</em></code></td></tr>
357 <tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>1 day</code></td></tr>
358 <tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
359 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
360 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ssl_ct</td></tr>
362 <p>Server certificates with SCTs which are older than this maximum age will
363 be resubmitted to configured logs. Generally the log will return the same SCT
364 as before, but that is subject to log operation. SCTs will be refreshed as
365 necessary during normal server operation, with new SCTs returned to clients
366 as they become available.</p>
369 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
370 <div class="directive-section"><h2><a name="CTProxyAwareness" id="CTProxyAwareness">CTProxyAwareness</a> <a name="ctproxyawareness" id="ctproxyawareness">Directive</a></h2>
371 <table class="directive">
372 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Level of CT awareness and enforcement for a proxy
374 <tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>CTProxyAwareness <em>oblivious|aware|require</em></code></td></tr>
375 <tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>aware</code></td></tr>
376 <tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
377 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
378 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ssl_ct</td></tr>
380 <p>This directive controls awareness and checks for valid SCTs for a
381 proxy. Several options are available:</p>
385 <dd>The proxy will neither ask for nor examine SCTs. Certificate
386 Transparency processing for the proxy is completely disabled.</dd>
389 <dd>The proxy will perform all appropriate Certificate Transparency
390 processing, such as asking for and examining SCTs. However, the
391 proxy will not disallow communication if the origin server does
392 not provide any valid SCTs.</dd>
395 <dd>The proxy will abort communication with the origin server if it
396 does not provide at least one SCT which passes on-line validation.</dd>
401 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
402 <div class="directive-section"><h2><a name="CTSCTStorage" id="CTSCTStorage">CTSCTStorage</a> <a name="ctsctstorage" id="ctsctstorage">Directive</a></h2>
403 <table class="directive">
404 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Existing directory where SCTs are managed</td></tr>
405 <tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>CTSCTStorage <em>directory</em></code></td></tr>
406 <tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>none</code></td></tr>
407 <tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
408 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
409 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ssl_ct</td></tr>
411 <p>The <code class="directive">CTSCTStorage</code> directive sets the name of a
412 directory where SCTs and SCT lists will will be stored. If <em>directory</em>
413 is not absolute then it is assumed to be relative to <code class="directive"><a href="../mod/core.html#defaultruntimedir">
414 DefaultRuntimeDir</a></code>.</p>
416 <p>A subdirectory for each server certificate contains information relative
417 to that certificate; the name of the subdirectory is the SHA-256 hash of the
420 <p>The certificate-specific directory contains SCTs retrieved from configured
421 logs, SCT lists prepared from statically configured SCTs and retrieved SCTs,
422 and other information used for managing SCTs.</p>
425 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
426 <div class="directive-section"><h2><a name="CTServerHelloSCTLimit" id="CTServerHelloSCTLimit">CTServerHelloSCTLimit</a> <a name="ctserverhellosctlimit" id="ctserverhellosctlimit">Directive</a></h2>
427 <table class="directive">
428 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Limit on number of SCTs that can be returned in
429 ServerHello</td></tr>
430 <tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>CTServerHelloSCTLimit <em>limit</em></code></td></tr>
431 <tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>100</code></td></tr>
432 <tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
433 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
434 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ssl_ct</td></tr>
436 <p>This directive can be used to limit the number of SCTs which can be
437 returned by a TLS server in ServerHello, in case the number of configured
438 logs and statically-defined SCTs is relatively high.</p>
440 <p>Typically only a few SCTs would be available, so this directive is only
441 needed in special circumstances.</p>
443 <p>The directive does not take into account SCTs which may be provided in
444 certificate extensions or in stapled OCSP responses.</p>
447 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
448 <div class="directive-section"><h2><a name="CTStaticLogConfig" id="CTStaticLogConfig">CTStaticLogConfig</a> <a name="ctstaticlogconfig" id="ctstaticlogconfig">Directive</a></h2>
449 <table class="directive">
450 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Static configuration of information about a log</td></tr>
451 <tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>CTStaticLogConfig <em>log-id|-</em> <em>public-key-file|-</em>
452 <em>1|0|-</em> <em>min-timestamp|-</em> <em>max-timestamp|-</em>
453 <em>log-URL|-</em></code></td></tr>
454 <tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>none</code></td></tr>
455 <tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
456 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
457 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ssl_ct</td></tr>
459 <p>This directive is used to configure information about a particular log.
460 This directive is appropriate when configuration information changes rarely.
461 If dynamic configuration updates must be supported, refer to the
462 <code class="directive"><a href="#ctlogconfigdb">CTLogConfigDB</a></code> directive.</p>
464 <p>Each of the six fields must be specified, but usually only a small
465 amount of information must be configured for each log; use <em>-</em> when no
466 information is available for the field. For example, in support of a
467 server-only configuration (i.e., no proxy), the administrator might
468 configure only the log URL to be used when submitting server certificates
469 and obtaining a Signed Certificate Timestamp.</p>
471 <p>The fields are defined as follows:</p>
474 <dt><em>log-id</em></dt>
475 <dd>This is the id of the log, which is the SHA-256 hash of the log's
476 public key, provided in hexadecimal format. This string is 64 characters
479 This field should be omitted when <em>public-key-file</em> is provided.</dd>
481 <dt><em>public-key-file</em></dt>
482 <dd>This is the name of a file containing the PEM encoding of the log's
483 public key. If the name is not absolute, then it is assumed to be relative
484 to <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>.</dd>
486 <dt><em>trust/distrust</em></dt>
487 <dd>Set this field to <em>1</em> to distrust this log, or to otherwise avoid
488 using it for server certificate submission. Set this to <em>-</em> or
489 <em>0</em> (the default) to treat the log normally.</dd>
491 <dt><em>min-timestamp</em> and <em>max-timestamp</em></dt>
492 <dd>A timestamp is a time as expressed in the number of milliseconds since the
493 epoch, ignoring leap seconds. This is the form of time used in Signed Certificate
494 Timestamps. This must be provided as a decimal number.
496 Specify <strong><code>-</code></strong> for one of the timestamps if it is unknown.
497 For example, when configuring the minimum valid timestamp for a log which remains
498 valid, specify <strong><code>-</code></strong> for <em>max-timestamp</em>.
500 SCTs received from this log by the proxy are invalid if the timestamp
501 is older than <em>min-timestamp</em> or newer than <em>max-timestamp</em>.</dd>
503 <dt><em>log-URL</em></dt>
504 <dd>This is the URL of the log, for use in submitting server certificates
505 and in turn obtaining an SCT to be sent to clients.</dd>
510 <li><a href="#logconf">Log configuration</a> contains more general information
511 about the fields which can be configured with this directive.</li>
514 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
515 <div class="directive-section"><h2><a name="CTStaticSCTs" id="CTStaticSCTs">CTStaticSCTs</a> <a name="ctstaticscts" id="ctstaticscts">Directive</a></h2>
516 <table class="directive">
517 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Static configuration of one or more SCTs for a server certificate
519 <tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>CTStaticSCTs <em>certificate-pem-file</em> <em>sct-directory</em></code></td></tr>
520 <tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>none</code></td></tr>
521 <tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
522 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
523 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ssl_ct</td></tr>
525 <p>This directive is used to statically define one or more SCTs corresponding
526 to a server certificate. This mechanism can be used instead of or in
527 addition to dynamically obtaining SCTs from configured logs. Any changes to
528 the set of SCTs for a particular server certificate will be adopted dynamically
529 without the need to restart the server.</p>
531 <p><em>certificate-pem-file</em> refers to the server certificate in PEM
532 format. If the name is not absolute, then it is assumed to be relative to
533 <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>.</p>
535 <p><em>sct-directory</em> should contain one or more files with extension
536 <code>.sct</code>, representing one or more SCTs corresponding to the
537 server certificate. If <em>sct-directory</em> is not absolute, then it is
538 assumed to be relative to <code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>.</p>
540 <p>If <em>sct-directory</em> is empty, no error will be raised.</p>
542 <p>This directive could be used to identify directories of SCTs maintained by
543 other infrastructure, provided that they are saved in binary format with
544 file extension <em>.sct</em></p>
548 <div class="bottomlang">
549 <p><span>Available Languages: </span><a href="../en/mod/mod_ssl_ct.html" title="English"> en </a></p>
550 </div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Comments</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Freenode, or sent to our <a href="http://httpd.apache.org/lists.html">mailing lists</a>.</div>
551 <script type="text/javascript"><!--//--><![CDATA[//><!--
552 var comments_shortname = 'httpd';
553 var comments_identifier = 'http://httpd.apache.org/docs/trunk/mod/mod_ssl_ct.html';
555 if (w.location.hostname.toLowerCase() == "httpd.apache.org") {
556 d.write('<div id="comments_thread"><\/div>');
557 var s = d.createElement('script');
558 s.type = 'text/javascript';
560 s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier;
561 (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
564 d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>');
566 })(window, document);
567 //--><!]]></script></div><div id="footer">
568 <p class="apache">Copyright 2014 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
569 <p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/quickreference.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!--
570 if (typeof(prettyPrint) !== 'undefined') {