source: installer/resources/eepsite/jetty-ssl.xml @ e7c2162

Last change on this file since e7c2162 was e7c2162, checked in by zzz <zzz@…>, 2 years ago

i2ptunnel: Strip server Date header
More efficient header checks
Jetty config tweaks

  • Property mode set to 100644
File size: 17.5 KB
Line 
1<?xml version="1.0"?>
2<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">
3
4<!-- This configuration supports Jetty 9. Do not remove this line. -->
5
6<!-- ========================================================================= -->
7<!-- If you have a 'split' directory installation, with configuration          -->
8<!-- files in ~/.i2p (Linux), %APPDATA%\I2P (Windows),                         -->
9<!-- or /Users/(user)/Library/Application Support/i2p (Mac), be sure to        -->
10<!-- edit the file in the configuration directory, NOT the install directory.  -->
11<!-- When running as a Linux daemon, the configuration directory is            -->
12<!-- /var/lib/i2p and the install directory is /usr/share/i2p .                -->
13<!-- When running as a Windows service,                                        -->
14<!-- the configuration directory is \ProgramData\i2p                           -->
15<!-- and the install directory is \Program Files\i2p .                         -->
16<!--                                                                           -->
17<!-- ========================================================================= -->
18
19<!-- =============================================================== -->
20<!-- Configure SSL for the Jetty Server                              -->
21<!-- this configuration file should be used in combination with      -->
22<!-- other configuration files.                                      -->
23<!--                                                                 -->
24<!-- =============================================================== -->
25<!-- Add a HTTPS SSL listener on port 7668                           -->
26<!--                                                                 -->
27<!-- NOTE:                                                           -->
28<!--                                                                 -->
29<!-- While I2P already encrypts end-to-end, HTTPS support            -->
30<!-- is valuable for authentication.                                 -->
31<!--                                                                 -->
32<!-- These instructions are to add SSL support to an existing        -->
33<!-- HTTP Jetty website.                                             -->
34<!--                                                                 -->
35<!-- For HTTPS ONLY, create a standard server tunnel                 -->
36<!-- (NOT HTTP server), and skip step 8.                             -->
37<!--                                                                 -->
38<!-- For non-Jetty servers (e.g. Apache), follow your server         -->
39<!-- instructions to generate and configure the certificates,        -->
40<!-- and skip steps 1-7.                                             -->
41<!--                                                                 -->
42<!-- =============================================================== -->
43<!--                                                                 -->
44<!-- To add SSL support for your existing website:                   -->
45<!--                                                                 -->
46<!-- Step 1:                                                         -->
47<!-- Get the b32 for your wehsite, it's the link at the              -->
48<!-- "preview" button in the Hidden Services Manager in              -->
49<!-- the console. If you aren't running i2p, you can                 -->
50<!-- get it from your private key file                               -->
51<!-- (probably ~/.i2p/eepsite/eepPriv.dat)                           -->
52<!-- with the command:                                               -->
53<!--     java -cp ~/i2p/lib/i2p.jar net.i2p.data.PrivateKeyFile ~/.i2p/eepsite/eepPriv.dat  -->
54<!-- Save the b32 to put in the certificate's CN in Step 2.          -->
55<!--                                                                 -->
56<!--                                                                 -->
57<!-- Step 2:                                                         -->
58<!-- Generate selfsigned certificates.                               -->
59<!-- We recommend two: one for the hostname, and one for the b32.    -->
60<!-- Note that server-side SNI to serve the correct certificate      -->
61<!-- requires Java 8. Otherwise it will pick one.                    -->
62<!-- (at random? first one?)                                         -->
63<!-- Change the CN and key password in the example, of course.       -->
64<!-- It's OK to keep the keystore password as "changeit" if you like.  -->
65<!-- Use the same passwords for both certificates.                   -->
66<!-- See https://wiki.eclipse.org/Jetty/Howto/Configure_SSL          -->
67<!-- for alternate methods.                                          -->
68<!--
69   keytool -genkey -keystore ~/.i2p/eepsite/etc/keystore.ks -storepass changeit -alias b32 -dname CN=biglongkey.b32.i2p,OU=Eepsite,O=XX,L=XX,ST=XX,C=XX -validity 3652 -keyalg RSA -keysize 2048 -keypass myKeyPassword
70   keytool -genkey -keystore ~/.i2p/eepsite/etc/keystore.ks -storepass changeit -alias hostname -dname CN=example.i2p,OU=Eepsite,O=XX,L=XX,ST=XX,C=XX -validity 3652 -keyalg RSA -keysize 2048 -keypass myKeyPassword
71   chmod 600 ~/.i2p/eepsite/etc/keystore.ks
72 -->
73<!--                                                                 -->
74<!-- But does SNI work? see:                                         -->
75<!-- http://blog.ivanristic.com/2014/03/ssl-tls-improvements-in-java-8.html -->
76<!-- http://stackoverflow.com/questions/20887504/tls-extension-server-name-indication-sni-value-not-available-on-server-side -->
77<!--                                                                 -->
78<!-- And no, you can't get a real certificate for an i2p             -->
79<!-- address from a Certificate Authority, but someday               -->
80<!-- it may be possible. Here's how Tor did it:                      -->
81<!-- https://cabforum.org/2015/02/18/ballot-144-validation-rules-dot-onion-names/ -->
82<!--                                                                 -->
83<!--                                                                 -->
84<!-- Step 3:                                                         -->
85<!-- Update this configuration file.                                 -->
86<!-- Edit the KeyStorePassword, TrustStorePassword, and              -->
87<!-- KeyManagerPassword below to match the passwords from Step 2.    -->
88<!--                                                                 -->
89<!--                                                                 -->
90<!-- Step 4:                                                         -->
91<!-- If running I2P, stop the website Jetty on /configclients        -->
92<!-- in the console.                                                 -->
93<!--                                                                 -->
94<!--                                                                 -->
95<!-- Step 5:                                                         -->
96<!-- Configure Jetty to read in this file at startup.                -->
97<!-- If running I2P, edit the website Jetty on /configclients        -->
98<!-- to add the argument "/path/to/.i2p/eepsite/jetty-ssl.xml".      -->
99<!--                                                                 -->
100<!-- If I2P is not running, edit the file ~/.i2p/clients.config      -->
101<!-- to add the argument "/path/to/.i2p/eepsite/jetty-ssl.xml"       -->
102<!-- at the end of the line:                                         -->
103<!--    clientApp.3.args="eepsite/jetty.xml"                         -->
104<!-- so it now looks like:                                           -->
105<!--    clientApp.3.args="/path to/.i2p/eepsite/jetty.xml" "/path/to/.i2p/eepsite/jetty-ssl.xml" -->
106<!--                                                                 -->
107<!--                                                                 -->
108<!-- Step 6:                                                         -->
109<!-- Start Jetty.                                                    -->
110<!-- If running I2P, start the website Jetty on /configclients       -->
111<!-- in the console.                                                 -->
112<!-- If I2P is not running, start it.                                -->
113<!--                                                                 -->
114<!-- Now go to the /logs page in the console and check for errors    -->
115<!-- in both the router and wrapper logs.                            -->
116<!--                                                                 -->
117<!--                                                                 -->
118<!-- Step 7:                                                         -->
119<!-- Test Jetty.                                                     -->
120<!-- If there were no errors, test your Jetty SSL by                 -->
121<!-- going to https://127.0.0.1:7668/ in your browser.               -->
122<!-- You will have to confirm the security exception for             -->
123<!-- the selfsigned certificate.                                     -->
124<!--                                                                 -->
125<!--                                                                 -->
126<!-- Step 8:                                                         -->
127<!-- Configure i2ptunnel.                                            -->
128<!-- Tell i2ptunnel to route SSL to port 7668 by adding the          -->
129<!-- following custom option on the i2ptunnel edit page              -->
130<!-- for your website:                                               -->
131<!--        targetForPort.443=127.0.0.1:7668                         -->
132<!-- Also, verify that "Use SSL" near the top is NOT set.            -->
133<!-- That would be SSL-over-SSL, which won't work.                   -->
134<!--                                                                 -->
135<!--                                                                 -->
136<!-- Step 9:                                                         -->
137<!-- Start the tunnel if it isn't started.                           -->
138<!--                                                                 -->
139<!--                                                                 -->
140<!-- Step 10:                                                        -->
141<!-- In the i2ptunnel HTTP Client configuration,                     -->
142<!-- enable "Allow SSL to I2P addresses" if it isn't already.        -->
143<!--                                                                 -->
144<!--                                                                 -->
145<!-- Step 11:                                                        -->
146<!-- Test SSL via i2ptunnel.                                         -->
147<!-- Test SSL to your website through I2P by entering                -->
148<!-- https://yoursite.i2p/ in your browser.                          -->
149<!-- If it doesn't work, check the /logs page in the console.        -->
150<!-- You may need to adjust your browser proxy settings to           -->
151<!-- ensure that https i2p URLs are fetched through the I2P proxy.   -->
152<!-- For example, in privoxy, add                                    -->
153<!-- https://*.i2p/* and https://*.i2p:*/*                           -->
154<!--                                                                 -->
155<!--                                                                 -->
156<!-- Step 12:                                                        -->
157<!-- Tell your users.                                                -->
158<!-- Put a link to the https version on your                         -->
159<!-- home page. Remind them that in                                  -->
160<!-- the i2ptunnel HTTP Client configuration,                        -->
161<!-- enable "Allow SSL to I2P addresses" if it isn't already.        -->
162<!-- Remind them to confirm the security exception for               -->
163<!-- the selfsigned certificate (but not one for a hostname          -->
164<!-- mismatch) (but see SNI issues above).                           -->
165<!-- Users may need to adjust their browser proxy settings to        -->
166<!-- ensure that https i2p URLs are fetched through the I2P proxy.   -->
167<!-- For example, in privoxy, add                                    -->
168<!-- https://*.i2p/* and https://*.i2p:*/*                           -->
169<!--                                                                 -->
170<!-- Decide what link to use. The hostname is not secure,            -->
171<!-- as users may have a different hostname in their browser.        -->
172<!-- Also, new address helpers won't work with SSL.                  -->
173<!-- The b32 is the recommended hostname.                            -->
174<!--                                                                 -->
175<!--                                                                 -->
176<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
177
178<Configure id="Server" class="org.eclipse.jetty.server.Server">
179
180  <New id="sslContextFactory" class="org.eclipse.jetty.util.ssl.SslContextFactory">
181    <Set name="KeyStorePath">./eepsite/etc/keystore.ks</Set>
182    <Set name="KeyStorePassword">changeit</Set>
183    <Set name="KeyManagerPassword">myKeyPassword</Set>
184    <Set name="TrustStorePath">./eepsite/etc/keystore.ks</Set>
185    <Set name="TrustStorePassword">changeit</Set>
186    <Set name="ExcludeCipherSuites">
187      <Array type="java.lang.String">
188        <Item>SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA</Item>
189        <Item>SSL_DH_anon_EXPORT_WITH_RC4_40_MD5</Item>
190        <Item>SSL_DH_anon_WITH_3DES_EDE_CBC_SHA</Item>
191        <Item>SSL_DH_anon_WITH_DES_CBC_SHA</Item>
192        <Item>SSL_DH_anon_WITH_RC4_128_MD5</Item>
193        <Item>SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA</Item>
194        <Item>SSL_DHE_DSS_WITH_DES_CBC_SHA</Item>
195        <Item>SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA</Item>
196        <Item>SSL_DHE_RSA_WITH_DES_CBC_SHA</Item>
197        <Item>SSL_RSA_EXPORT_WITH_DES40_CBC_SHA</Item>
198        <Item>SSL_RSA_EXPORT_WITH_RC4_40_MD5</Item>
199        <Item>SSL_RSA_WITH_DES_CBC_SHA</Item>
200        <Item>SSL_RSA_WITH_NULL_MD5</Item>
201        <Item>SSL_RSA_WITH_NULL_SHA</Item>
202        <Item>TLS_DH_anon_WITH_AES_128_CBC_SHA</Item>
203        <Item>TLS_DH_anon_WITH_AES_128_CBC_SHA256</Item>
204        <Item>TLS_DH_anon_WITH_AES_128_GCM_SHA256</Item>
205        <Item>TLS_DH_anon_WITH_AES_256_CBC_SHA</Item>
206        <Item>TLS_DH_anon_WITH_AES_256_CBC_SHA256</Item>
207        <Item>TLS_DH_anon_WITH_AES_256_GCM_SHA384</Item>
208        <Item>TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA</Item>
209        <Item>TLS_ECDH_anon_WITH_AES_128_CBC_SHA</Item>
210        <Item>TLS_ECDH_anon_WITH_AES_256_CBC_SHA</Item>
211        <Item>TLS_ECDH_anon_WITH_NULL_SHA</Item>
212        <Item>TLS_ECDH_anon_WITH_RC4_128_SHA</Item>
213        <Item>TLS_ECDH_ECDSA_WITH_NULL_SHA</Item>
214        <Item>TLS_ECDHE_ECDSA_WITH_NULL_SHA</Item>
215        <Item>TLS_ECDHE_RSA_WITH_NULL_SHA</Item>
216        <Item>TLS_ECDH_RSA_WITH_NULL_SHA</Item>
217        <Item>TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5</Item>
218        <Item>TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA</Item>
219        <Item>TLS_KRB5_EXPORT_WITH_RC4_40_MD5</Item>
220        <Item>TLS_KRB5_EXPORT_WITH_RC4_40_SHA</Item>
221        <Item>TLS_KRB5_WITH_3DES_EDE_CBC_MD5</Item>
222        <Item>TLS_KRB5_WITH_3DES_EDE_CBC_SHA</Item>
223        <Item>TLS_KRB5_WITH_DES_CBC_MD5</Item>
224        <Item>TLS_KRB5_WITH_DES_CBC_SHA</Item>
225        <Item>TLS_KRB5_WITH_RC4_128_MD5</Item>
226        <Item>TLS_KRB5_WITH_RC4_128_SHA</Item>
227        <Item>TLS_RSA_WITH_NULL_SHA256</Item>
228        <Item>SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA</Item>
229        <Item>SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA</Item>
230        <Item>SSL_RSA_WITH_3DES_EDE_CBC_SHA</Item>
231        <Item>SSL_RSA_WITH_RC4_128_MD5</Item>
232        <Item>SSL_RSA_WITH_RC4_128_SHA</Item>
233        <Item>TLS_ECDH_ECDSA_WITH_RC4_128_SHA</Item>
234        <Item>TLS_ECDH_RSA_WITH_RC4_128_SHA</Item>
235        <Item>TLS_ECDHE_ECDSA_WITH_RC4_128_SHA</Item>
236        <Item>TLS_ECDHE_RSA_WITH_RC4_128_SHA</Item>
237        <Item>TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA</Item>
238        <Item>TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA</Item>
239        <Item>TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA</Item>
240        <Item>TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA</Item>
241        <Item>TLS_DHE_DSS_WITH_AES_128_CBC_SHA</Item>
242        <!-- Please keep this list in sync with the one in I2PSSLSocketFactory -->
243      </Array>
244    </Set>
245    <Set name="ExcludeProtocols">
246      <Array type="java.lang.String">
247        <Item>SSLv2Hello</Item>
248        <Item>SSLv3</Item>
249      </Array>
250    </Set>
251  </New>
252
253  <Call name="addConnector">
254    <Arg>
255      <New class="org.eclipse.jetty.server.ServerConnector">
256        <Arg><Ref id="Server" /></Arg>
257        <Arg type="int">1</Arg>     <!-- number of acceptors -->
258        <Arg type="int">0</Arg>     <!-- default number of selectors -->
259        <Arg>
260           <Array type="org.eclipse.jetty.server.ConnectionFactory">    <!-- varargs so we need an array -->
261              <Item>
262                <New class="org.eclipse.jetty.server.SslConnectionFactory">
263                  <Arg><Ref id="sslContextFactory" /></Arg>
264                  <Arg>http/1.1</Arg>
265                </New>
266              </Item>
267              <Item>
268                <New class="org.eclipse.jetty.server.HttpConnectionFactory">
269                  <Arg>
270                    <New class="org.eclipse.jetty.server.HttpConfiguration">
271                      <Set name="sendServerVersion">false</Set>
272                      <Set name="sendDateHeader">false</Set>
273                      <Set name="sendXPoweredBy">false</Set>
274                    </New>
275                  </Arg>
276                </New>
277              </Item>
278            </Array>
279        </Arg>
280        <Set name="host">127.0.0.1</Set>
281        <Set name="port">7668</Set>
282        <Set name="idleTimeout">600000</Set>
283      </New>
284    </Arg>
285  </Call>
286</Configure>
Note: See TracBrowser for help on using the repository browser.