连接器配置概览

连接器用于接收网络连接,配置一个连接器须要配置:

 1)连接器的网络參数(比如:port);

 2)连接器使用的服务(比如:executors,schedulers)。

 3)为接收连接而初始化和配置协议的连接工厂。

Jetty主要使用的连接器类型为ServerConnector。

标准Jetty公布使用以下的Jetty XML文件创建和配置连接器:

 1)jetty-http.xml

 初始化一个ServerConnector,用于接收HTTP连接(能够被升级到WebSocket连接)。

 2)jetty-https.xml

 初始化一个ServerConnector。用于接收SSL/TLS连接。

 3)example-jetty-spdy.xml

 初始化一个ServerConnector。用于接收SSL连接,连接使用HTTP或者SPDY通信。

构造一个ServerConnector

一个ServerConnector使用的服务在构造时设置,后面不能改变,服务大部分情况下被设置到默认的null或0,这样一个合理的默认值将被採用,因此,大部分情况下仅须要设置Server和连接工厂。在Jetty XML中(即jetty-http.xml中)。你能配置:

<New class="org.eclipse.jetty.server.ServerConnector">
<Arg name="server"><Ref refid="Server" /></Arg>
<Arg name="factories">
<Array type="org.eclipse.jetty.server.ConnectionFactory">
<!-- insert one or more factories here -->
</Array>
</Arg>
<!-- set connector fields here -->
</New>

你能在Javadoc中看到构造ServerConnector的其他參数,但对于差点儿全部的部署,默认值就足够了。

网络设置

配置连接器的网络设置须要在它启动之前,调用setters设置。

比如,你能在Jetty XML中设置port:

<New class="org.eclipse.jetty.server.ServerConnector">
<Arg name="server"><Ref refid="Server" /></Arg>
<Arg name="factories"><!-- insert one or more factories here --></Arg> <Set name="port">8080</Set>
</New>

Jetty XML中的值也能够被參数化,以至于他们能够通过属性文件或者命令行传入。以下是使用属性文件的样例:

<New class="org.eclipse.jetty.server.ServerConnector">
<Arg name="server"><Ref refid="Server" /></Arg>
<Arg name="factories"><!-- insert one or more factories here --></Arg> <Set name="port"><Property name="jetty.port" default="8080"/></Set>
</New>

ServerConnector的网络设置包含:

 1)host:连接器绑定的网络接口,能够是IP地址或主机名。假设是null或0.0.0.0,绑定到全部接口。

 2)port:连接器port,0则表示使用随机port(通过getLocalPort()选择可用的port);

 3)idleTimeout:连接器在空暇状态持续该时间后(单位毫秒)关闭。

 4)defaultProtocol:用于选择ConnectionFactory实例的默认协议名。

 5)stopTimeout:温柔的停止一个连接器前等待的时间(毫秒);

 6)acceptQueueSize:等待处理的连接队列大小,最好保持默认值。除非你有必要的原因去改动它;

 7)reuseAddress:同意Server socket被重绑定,即使在TIME_WAIT状态。

通常保持默认值true;

 8)soLingerTime:若值>=0。则设置socket SO_LINGER值,单位毫秒。

Jetty尝试温柔的关闭全部TCP/IP连接,因此该值不应该被改动,保持默认值-1。

HTTP配置

HttpConfiguration为HTTPChannel提供配置。你能创建1对1的HTTP连接。或者1对n的多路复用SPDY连接。

因此一个HTTPConfiguration能够用于HTTP和SPDY连接工厂。

为了避免反复配置。标准Jetty公布在jetty.xml中创建一个公用的HttpConfiguration实例,是一个Ref元素,能够在 jetty-http.xml, jetty-https.xml和example-jetty-spdy.xml中使用它。

一个通常的HttpConfiguration配置例如以下:

<New id="httpConfig" class="org.eclipse.jetty.server.HttpConfiguration">
<Set name="secureScheme">https</Set>
<Set name="securePort"><Property name="jetty.tls.port" default="8443" /></Set>
<Set name="outputBufferSize">32768</Set>
<Set name="requestHeaderSize">8192</Set>
<Set name="responseHeaderSize">8192</Set> <Call name="addCustomizer">
<Arg><New class="org.eclipse.jetty.server.ForwardedRequestCustomizer"/></Arg>
</Call>
</New>

这个样例添加了一个ForwardedRequestCustomizer处理X-Forward-For和相关的协议头。

jetty-https.xml中能够通过ID使用该实例:

<Call name="addConnector">
<Arg>
<New class="org.eclipse.jetty.server.ServerConnector">
<Arg name="server"><Ref refid="Server" /></Arg>
<Arg name="factories">
<Array type="org.eclipse.jetty.server.ConnectionFactory">
<Item>
<New class="org.eclipse.jetty.server.HttpConnectionFactory">
<Arg name="config"><Ref refid="httpConfig" /></Arg>
</New>
</Item>
</Array>
</Arg>
<!-- ... -->
</New>
</Arg>
</Call>

为SSL(在jetty-https.xml和jetty-spdy.xml中),"httpConfig"实例能被用于作为创建SSL特定配置的基础:

<New id="tlsHttpConfig" class="org.eclipse.jetty.server.HttpConfiguration">
<Arg><Ref refid="httpConfig"/></Arg>
<Call name="addCustomizer">
<Arg><New class="org.eclipse.jetty.server.SecureRequestCustomizer"/></Arg>
</Call>
</New>

这里使用SecureRequestCustomizer。添加SSL Session IDs和认证信息作为请求属性。

SSL上下文配置

SSL/TLS连接器用于HTTPS和SPDY,要求认证信息用于建立安全连接。在以下的“配置SSL”节会做具体论述。

配置连接工厂

在Jetty公布中。最简单的连接工厂的样例是jetty-http.xml:

<?xml version="1.0"?

>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.dtd"> <!-- ============================================================= -->
<!-- Configure the Jetty Server instance with an ID "Server" -->
<!-- by adding a HTTP connector. -->
<!-- This configuration must be used in conjunction with jetty.xml -->
<!-- ============================================================= -->
<Configure id="Server" class="org.eclipse.jetty.server.Server"> <!-- =========================================================== -->
<!-- Add a HTTP Connector. -->
<!-- Configure an o.e.j.server.ServerConnector with a single -->
<!-- HttpConnectionFactory instance using the common httpConfig -->
<!-- instance defined in jetty.xml -->
<!-- -->
<!-- Consult the javadoc of o.e.j.server.ServerConnector and -->
<!-- o.e.j.server.HttpConnectionFactory for all configuration -->
<!-- that may be set here. -->
<!-- =========================================================== -->
<Call name="addConnector">
<Arg>
<New class="org.eclipse.jetty.server.ServerConnector">
<Arg name="server"><Ref refid="Server" /></Arg>
<Arg name="factories">
<Array type="org.eclipse.jetty.server.ConnectionFactory">
<Item>
<New class="org.eclipse.jetty.server.HttpConnectionFactory">
<Arg name="config"><Ref refid="httpConfig" /></Arg>
</New>
</Item>
</Array>
</Arg>
<Set name="host"><Property name="jetty.host" /></Set>
<Set name="port"><Property name="jetty.port" default="80" /></Set>
<Set name="idleTimeout"><Property name="http.timeout" default="30000"/></Set>
<Set name="soLingerTime"><Property name="http.soLingerTime" default="-1"/></Set>
</New>
</Arg>
</Call> </Configure>

这里仅有一个ConnectionFactory被注入,当一个新的连接被接收时,HttpConnectionFactory将创建一个HttpConnection。

一个更复杂的样例是jetty-spdy.xml,配置了多个连接工厂:

<?

xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.dtd"> <Configure id="Server" class="org.eclipse.jetty.server.Server"> <New id="sslContextFactory" class="org.eclipse.jetty.util.ssl.SslContextFactory">
<Set name="keyStorePath">src/main/resources/keystore.jks</Set>
<Set name="keyStorePassword">storepwd</Set>
<Set name="trustStorePath">src/main/resources/truststore.jks</Set>
<Set name="trustStorePassword">storepwd</Set>
<Set name="protocol">TLSv1</Set>
</New> <New id="tlsHttpConfig" class="org.eclipse.jetty.server.HttpConfiguration">
<Arg>
<New id="httpConfig" class="org.eclipse.jetty.server.HttpConfiguration">
<Set name="secureScheme">https</Set>
<Set name="securePort">
<Property name="jetty.tls.port" default="8443"/>
</Set>
<Set name="outputBufferSize">32768</Set>
<Set name="requestHeaderSize">8192</Set>
<Set name="responseHeaderSize">8192</Set> <!-- Uncomment to enable handling of X-Forwarded- style headers
<Call name="addCustomizer">
<Arg><New class="org.eclipse.jetty.server.ForwardedRequestCustomizer"/></Arg>
</Call>
-->
</New>
</Arg>
<Call name="addCustomizer">
<Arg>
<New class="org.eclipse.jetty.server.SecureRequestCustomizer"/>
</Arg>
</Call>
</New> <New id="pushStrategy" class="org.eclipse.jetty.spdy.server.http.ReferrerPushStrategy">
<!-- Uncomment to blacklist browsers for this push strategy. If one of the blacklisted Strings occurs in the
user-agent header sent by the client, push will be disabled for this browser. This is case insensitive" -->
<!--
<Set name="UserAgentBlacklist">
<Array type="String">
<Item>.*(?i)firefox/14.*</Item>
<Item>.*(?i)firefox/15.*</Item>
<Item>.*(? i)firefox/16.*</Item>
</Array>
</Set>
--> <!-- Uncomment to override default file extensions to push -->
<!--
<Set name="PushRegexps">
<Array type="String">
<Item>.*\.css</Item>
<Item>.*\.js</Item>
<Item>.*\.png</Item>
<Item>.*\.jpg</Item>
<Item>.*\.gif</Item>
</Array>
</Set>
-->
<Set name="referrerPushPeriod">5000</Set>
<Set name="maxAssociatedResources">32</Set>
</New> <Call id="sslConnector" name="addConnector">
<Arg>
<New class="org.eclipse.jetty.server.ServerConnector">
<Arg name="server"><Ref refid="Server"/></Arg>
<Arg name="factories">
<Array type="org.eclipse.jetty.server.ConnectionFactory"> <!-- SSL Connection factory with NPN as next protocol -->
<Item>
<New class="org.eclipse.jetty.server.SslConnectionFactory">
<Arg name="next">npn</Arg>
<Arg name="sslContextFactory">
<Ref refid="sslContextFactory"/>
</Arg>
</New>
</Item> <!-- NPN Connection factory with HTTP as default protocol -->
<Item>
<New class="org.eclipse.jetty.spdy.server.NPNServerConnectionFactory">
<Arg name="protocols">
<Array type="String">
<Item>spdy/3</Item>
<Item>spdy/2</Item>
<Item>http/1.1</Item>
</Array>
</Arg>
<Set name="defaultProtocol">http/1.1</Set>
</New>
</Item> <!-- SPDY/3 Connection factory -->
<Item>
<New class="org.eclipse.jetty.spdy.server.http.HTTPSPDYServerConnectionFactory">
<Arg name="version" type="int">3</Arg>
<Arg name="config">
<Ref refid="tlsHttpConfig"/>
</Arg>
<Arg name="pushStrategy">
<Ref refid="pushStrategy"/>
</Arg>
</New>
</Item> <!-- SPDY/2 Connection factory -->
<Item>
<New class="org.eclipse.jetty.spdy.server.http.HTTPSPDYServerConnectionFactory">
<Arg name="version" type="int">2</Arg>
<Arg name="config">
<Ref refid="tlsHttpConfig"/>
</Arg>
</New>
</Item> <!-- HTTP Connection factory -->
<Item>
<New class="org.eclipse.jetty.server.HttpConnectionFactory">
<Arg name="config">
<Ref refid="tlsHttpConfig"/>
</Arg>
</New>
</Item>
</Array>
</Arg> <Set name="port">8443</Set>
</New>
</Arg>
</Call> </Configure>

在这个样例中有5个连接工厂被创建。通过他们的协议名连接在一起:

 1)"SSL-npn"

 被第一个连接工厂标识的默认协议,这里配置的连接工厂是SslConnectionFactory,使用"npn"作为下一个协议。

因此接收端点与SslConnection实例相关联,SslConnection实例与"npn"连接工厂创建的NextProtoNegoServerConnection实例构成处理链。

 2)"npn"

 这里是NPNServerConnectionFactory。链接到SslConnectionFactory。NPN连接与client协商协议的类型。然后依据协议名称找到相应工厂(以下3个中的一个)并创建一个连接来替换NPN连接。假设NPN不被支持,defaultProtocol被配置为“http/1.1”。

 3)"spdy/3"

 假设SPDY版本号是3,则NPN连接使用该工厂。

 4)"spdy/2"

 假设SPDY版本号是2。则NPN连接使用该工厂。

 5)"http/1.1"

 假设HTTP版本号是1.1,或者假设NPN不被支持。NPN连接用该工厂。

注意HTTP/1.1也能处理HTTP/1.0。

配置SSL

配置SSL是一个复杂的过程,关系到keys、certificates、protocols和formats,对这些有一个主要的了解将是非常有帮助的,以下的连接提供一些资料供參考:

 1)Certificates

  SSL Certificates HOWTO(http://en.tldp.org/HOWTO/SSL%20Certificates%20HOWTO

  Mindprod Java Glossary: Certificates(http://mindprod.com/jgloss/certificate.html

 2)Keytool

  Keytool for Unix(http://docs.oracle.com/javase/7/docs/technotes/tools/solaris/keytool.html

  Keytool for Windows(http://docs.oracle.com/javase/7/docs/technotes/tools/windows/keytool.html

 3)Other tools

  IBM Keyman(

communityUuid=6fb00498-f6ea-4f65-bf0c-adc5bd0c5fcc" target="_blank">https://www.ibm.com/developerworks/mydeveloperworks/groups/service/html/communityview?communityUuid=6fb00498-f6ea-4f65-bf0c-adc5bd0c5fcc

 4)OpenSSL

  OpenSSL HOWTO(http://www.openssl.org/docs/HOWTO/

  OpenSSL FAQ(http://www.openssl.org/support/faq.html

OpenSSL vs. Keytool

为了測试,与JDK绑定的keytool工具提供了最简单的方式产生你须要的key和cetificate。

你也能使用OpenSSL工具产生key和certificate,或者转换那些你用于Apache或者其它servers的。因为Apache和其它servers都是用OpenSSL工具套装产生和操作keys和certificates。你或许已经有了一些通过OpenSSL创建的keys和certificates,或者你或许也会更喜欢OpenSSL产生的格式。

假设你想和Jetty或者一个web server(比如Apache,不是用Java实现)使用相同的cetificate。你或许更喜欢用OpenSSL产生你的私有key和certificate。

为Jetty配置SSL

为了在Jetty配置SSL,须要运行以下的任务:

 1)产生key值对和certificates;

 2)请求一个受信任的certificate。

 3)载入keys和certificates。

 4)配置SslContextFactory。

以下将一一介绍。

产生Key值对和certificate

最简单的产生keys和certificates的方式是使用JDK自带的keytool,他产生的keys和certificates直接进入keystore。

假设你已经有了keys和certificates。你能够载入它们进入JSSE keystore(看以下“载入keys和certificates”),或者替换已经到期的certificate。

以下的样例将仅产生主要的keys和certificates。你应该阅读工具的具体手冊,假设你想指定:

 1)key的大小;

 2)certificate到期时间;

 3)备用的安全提供商。

使用JDK的keytool产生keys和certificates

以下是使用keystore产生keys和certificates的样例:

$ keytool -keystore keystore -alias jetty -genkey -keyalg RSA

命令行将提示你输入信息。须要注意的是对"first and last name"提示的回答必须提供server的有效的主机名。以下是一个样例:

$ keytool -keystore keystore -alias jetty -genkey -keyalg RSA
Enter keystore password: password
What is your first and last name?
[Unknown]: jetty.eclipse.org
What is the name of your organizational unit? [Unknown]: Jetty
What is the name of your organization? [Unknown]: Mort Bay Consulting Pty. Ltd.
What is the name of your City or Locality?
[Unknown]:
What is the name of your State or Province?
[Unknown]:
What is the two-letter country code for this unit? [Unknown]:
Is CN=jetty.eclipse.org, OU=Jetty, O=Mort Bay Consulting Pty. Ltd.,
L=Unknown, ST=Unknown, C=Unknown correct?
[no]: yes Enter key password for <jetty>
(RETURN if same as keystore password):
$

使用OpenSSL产生Keys和Certificates

以下的命令在文件jetty.key中产生一个key值对:

$ openssl genrsa -des3 -out jetty.key

以下的命令为key产生一个certificate,存入文件jetty.crt:

$ openssl req -new -x509 -key jetty.key -out jetty.crt

以下是一个完整的样例。注意“Common Name”要求提供server的完整的主机名:

$ openssl genrsa -des3 -out jetty.key
Generating RSA private key, 512 bit long modulus
...........................++++++++++++
..++++++++++++
e is 65537 (0x10001)
Enter pass phrase for jetty.key:
Verifying - Enter pass phrase for jetty.key: $ openssl req -new -x509 -key jetty.key -out jetty.crt
Enter pass phrase for jetty.key:
You are about to be asked to enter information to be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there is a default value,
If you enter '.', the field is left blank.
-----
Country Name (2 letter code) [AU]:.
State or Province Name (full name) [Some-State]:.
Locality Name (eg, city) []:.
Organization Name (eg, company) [Internet Widgets Pty Ltd]:Mort Bay Consulting Pty. Ltd.
Organizational Unit Name (eg, section) []:Jetty
Common Name (eg, YOUR name) []:jetty.eclipse.org
Email Address []: $

其他方式获取keys和certificates

你也能够通过其他方式获取keys和certificates。

请求一个可信的certificate

使用keytool和OpenSSL产生的keys和certificates已经足够执行一个SSL连接器。然而浏览器将不信任你产生的certificate,它将提示用户certificate不可信。

为了获取一个大部分浏览器都信任的certificate,你须要请求一个众所周知的certificate authority(CA)为你的key/certificate签名。这种CA包含:AddTrust,Entrust,GeoTrust,RSA Data Security,Thawte,VISA,ValiCert,Verisign。和beTRUSTed, 等等。每一个CA都有它自己的指导手冊(查看JSSE或者OpenSSL相关章节)。可是全部的CA都要求产生一个certificate signing request(CSR)。

用keytool产生CSR

以下的命令为一个已经在keystore中的key/cert产生jetty.csr文件:

$ keytool -certreq -alias jetty -keystore keystore -file jetty.csr

用OpenSSL产生CSR

以下的命令为jetty.key中的key产生jetty.csr文件:

$ openssl req -new -key jetty.key -out jetty.csr

注意这个命令仅用jetty.key中的key。没有jetty.crt中的certificate。你须要输入certificate的细节。

载入keys和certificates

一旦CA给了你一个certificate。或者假设你没有使用keytool产生你自己的certificate,你须要载入它到JSSE keystore。

使用keytool载入certificates

你能使用keytool载入一个PEM格式的certificate到keystore,PEM格式是一个证书的文本编码。它通过OpenSSL产生,被一些CA返回给你。以下PEM文件的一个样例:

jetty.crt
-----BEGIN CERTIFICATE-----
MIICSDCCAfKgAwIBAgIBADANBgkqhkiG9w0BAQQFADBUMSYwJAYDVQQKEx1Nb3J0
IEJheSBDb25zdWx0aW5nIFB0eS4gTHRkLjEOMAwGA1UECxMFSmV0dHkxGjAYBgNV
BAMTEWpldHR5Lm1vcnRiYXkub3JnMB4XDTAzMDQwNjEzMTk1MFoXDTAzMDUwNjEz
MTk1MFowVDEmMCQGA1UEChMdTW9ydCBCYXkgQ29uc3VsdGluZyBQdHkuIEx0ZC4x
DjAMBgNVBAsTBUpldHR5MRowGAYDVQQDExFqZXR0eS5tb3J0YmF5Lm9yZzBcMA0G
CSqGSIb3DQEBAQUAA0sAMEgCQQC5V4oZeVdhdhHqa9L2/ZnKySPWUqqy81riNfAJ
7uALW0kEv/LtlG34dOOcVVt/PK8/bU4dlolnJx1SpiMZbKsFAgMBAAGjga4wgasw
HQYDVR0OBBYEFFV1gbB1XRvUx1UofmifQJS/MCYwMHwGA1UdIwR1MHOAFFV1gbB1
XRvUx1UofmifQJS/MCYwoVikVjBUMSYwJAYDVQQKEx1Nb3J0IEJheSBDb25zdWx0
aW5nIFB0eS4gTHRkLjEOMAwGA1UECxMFSmV0dHkxGjAYBgNVBAMTEWpldHR5Lm1v
cnRiYXkub3JnggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADQQA6NkaV
OtXzP4ayzBcgK/qSCmF44jdcARmrXhiXUcXzjxsLjSJeYPJojhUdC2LQKy+p4ki8
Rcz6oCRvCGCe5kDB
-----END CERTIFICATE-----

以下的命令载入一个PEM编码的证书(jetty.crt)到JSSE keystore:

$ keytool -keystore keystore -import -alias jetty -file jetty.crt -trustcacerts

假设你从CA收到的证书不是kertool理解的格式,你能使用openssl命令转换格式:

$ openssl x509 -in jetty.der -inform DER -outform PEM -out jetty.crt

通过PKCS12载入keys和certificates

假设你的key和证书在不同的文件里,你须要合并它们到PKCS12格式。然后载入到keystore。证书能够是你自己产生的,或者从CA得到的。

以下的OpenSSL命令用于合并jetty.key中的key和jetty.crt中的证书到jetty.pkcs12文件:

$ openssl pkcs12 -inkey jetty.key -in jetty.crt -export -out jetty.pkcs12

假设你有一个证书链。使用以下的方式生成PKCS12:

$ cat example.crt intermediate.crt [intermediate2.crt] ... rootCA.crt > cert-chain.txt
$ openssl pkcs12 -export -inkey example.key -in cert-chain.txt -out example.pkcs12

证书的命令必须是从server到rootCA。依照RFC2246中第7.4.2描写叙述。

OpenSSL请求一个导出的password,下一步的工作须要一个非空的password。接下来使用keytool载入PKCS12文件进入JSSE keystore:

$ keytool -importkeystore -srckeystore jetty.pkcs12 -srcstoretype PKCS12 -destkeystore keystore

配置SslContextFactory

为了让SSL证书配置到Jetty。须要注入SslContextFactory对象的一个实例到连接器的SslConnectionFactory,在Jetty公布中SslConnectionFactory在jetty-https.xml和jetty-spdy.xml中配置。

因为SPDY也能处理HTTPS,因此你通常须要配置两个配置文件里的一个。但也能够使用命令行或者编辑start.ini文件。

以下的配置创建一个SslContextFactory的实例,ID为"sslContextFactory":

<New id="sslContextFactory" class="org.eclipse.jetty.util.ssl.SslContextFactory">
<Set name="KeyStorePath"><Property name="jetty.home" default="." />/etc/keystore</Set>
<Set name="KeyStorePassword">OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4</Set>
<Set name="KeyManagerPassword">OBF:1u2u1wml1z7s1z7a1wnl1u2g</Set>
<Set name="TrustStorePath"><Property name="jetty.home" default="." />/etc/keystore</Set>
<Set name="TrustStorePassword">OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4</Set>
</New>

这里使用了随jetty公布的keystore。为了使用你自己的keystore。你须要更新至少两个信息:

 1)KeyStorePath:你能用你自己的keystore替换这里提供的keystore,或者改变配置指向新的文件。

注意因为keystore是很重要的安全信息。因此keystore文件所在的目录应该有严格的许可限制。

 2)KeyStorePassword:keystore的password能够用普通文本保存,也能够做一些保护,它能被扰乱,通过使用Password class。

Truststore通常设置为同样的keystore,在验证client证书时使用。

keyManagerPassword作为password參数传递到KeyManagerFactory.init(...),假设没有keymanagerpassword。那么用keystorepassword取代。假设没有trustmanager,那么keystore被用于truststore,keystorepassword被用于TrustStorePassword。

不须要创建一个新的SslContextFactory实例,由于在jetty-ssl.xml中已经存在。在jetty-ssl.xml中编辑路径和password信息,并确保你添加了以下的行在start.ini中,在jetty.dump.stop=之后加入:

etc/jetty-ssl.xml
etc/jetty-https.xml

你也能够选择在jetty-https.xml中配置httpsport:

<Set name="port">8443</Set>

或者通过命令行设置,比如:

$ java -jar start.jar https.port=8443

Disabling/Enabling指定的password组

比如为了避免BEAST攻击,须要配置一组特定的password组。这能通过SslContext.setIncludeCipherSuites(java.lang.String...)或者通过SslContext.setExcludeCipherSuites(java.lang.String...)实现。

setIncludeCipherSuites和setExcludeCipherSuites都能使用在JDK中使用的password组名,也能够使用正則表達式。

以下是一些样例怎么配置RC4password组。他们都能保护server免于BEAST攻击。

包含一套优先的password组:

<Set name="IncludeCipherSuites">
<Array type="String">
<Item>TLS_RSA_WITH_RC4_128_MD5</Item>
<Item>TLS_RSA_WITH_RC4_128_SHA</Item>
<Item>TLS_ECDHE_RSA_WITH_RC4_128_SHA</Item>
</Array>
</Set>

通过使用正則表達式包含全部RC4password组:

<Set name="IncludeCipherSuites">
<Array type="String">
<Item>.*RC4.*</Item>
</Array>
</Set>

排除全部非RC4password组:

<Set name="ExcludeCipherSuites">
<Array type="String">
<Item>SSL_RSA_WITH_DES_CBC_SHA</Item>
<Item>SSL_DHE_RSA_WITH_DES_CBC_SHA</Item>
<Item>SSL_DHE_DSS_WITH_DES_CBC_SHA</Item>
<Item>SSL_RSA_EXPORT_WITH_RC4_40_MD5</Item>
<Item>SSL_RSA_EXPORT_WITH_DES40_CBC_SHA</Item>
<Item>SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA</Item>
<Item>SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA</Item>
<Item>TLS_DHE_RSA_WITH_AES_128_CBC_SHA256</Item>
<Item>TLS_RSA_WITH_AES_128_CBC_SHA</Item>
<Item>TLS_DHE_RSA_WITH_AES_128_CBC_SHA</Item>
<Item>TLS_RSA_WITH_AES_128_CBC_SHA256</Item>
<Item>TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA</Item>
<Item>TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256</Item>
<Item>TLS_RSA_WITH_3DES_EDE_CBC_SHA</Item>
<Item>TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA</Item>
<Item>TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA</Item>
<Item>RSA_WITH_3DES_EDE_CBC_SHA</Item>
</Array>
</Set>

注意你应该优先选择使用正則表達式的IncludeCipherSuites,这样更加有利于扩展。

配置SSL连接器和port

上面创建的SslContextFactory实例被注入到SslConnectionFactory实例,当接收网络连接的时候将被依次注入ServerConnector实例。比如以下jetty-https.xml中的样例:

<Call id="sslConnector" name="addConnector">
<Arg>
<New class="org.eclipse.jetty.server.ServerConnector">
<Arg name="server"><Ref refid="Server" /></Arg>
<Arg name="factories">
<Array type="org.eclipse.jetty.server.ConnectionFactory">
<Item>
<New class="org.eclipse.jetty.server.SslConnectionFactory">
<Arg name="next">http/1.1</Arg>
<Arg name="sslContextFactory"><Ref refid="sslContextFactory"/></Arg>
</New>
</Item>
<Item>
<New class="org.eclipse.jetty.server.HttpConnectionFactory">
<Arg name="config"><Ref refid="tlsHttpConfig"/></Arg>
</New>
</Item>
</Array>
</Arg>
<Set name="host"><Property name="jetty.host" /></Set>
<Set name="port"><Property name="jetty.tls.port" default="8443" /></Set>
<Set name="idleTimeout">30000</Set>
</New>
</Arg>
</Call>

注意SSL连接器port被直接设置在ServerConnector实例。

更新证书

假设你正在更新你的配置使用一个新的证书(可能由于旧的证书已经过期)。你仅须要依照“载入keys和certificates”节描写叙述的过程载入新的证书就可以。假设你使用PKCS12方法导入原始的key和certificate,应该使用别名“1”而不是“jetty”,由于那是PKCS12处理进入keystore的别名。

Jetty:配置连接器的更多相关文章

  1. IntelliJ IDEA使用(二):tomcat和jetty配置

    上一讲用idea创建了maven web项目,接下来我们把项目发布到tomcat和jetty运行,以便进一步地开发和调试 配置tomcat 第一.打开菜单栏 第二.点击设置按钮,添加应用服务器,选择t ...

  2. 阿里云服务器Linux CentOS安装配置(五)jetty配置、部署

    阿里云服务器Linux CentOS安装配置(五)jetty配置.部署 1.官网下载jetty:wget http://repo1.maven.org/maven2/org/eclipse/jetty ...

  3. IntelliJ IDEA使用(二):tomcat和jetty配置(转自:http://www.cnblogs.com/jenkinschan/p/6052948.html)

    上一讲用idea创建了maven web项目,接下来我们把项目发布到tomcat和jetty运行,以便进一步地开发和调试 配置tomcat 第一.打开菜单栏 第二.点击设置按钮,添加应用服务器,选择t ...

  4. idea jetty 配置

    一.jetty 网址下载地:https://www.eclipse.org/jetty/ 1.如下图红色箭头--> 点击Downloads 下载 2.选择最新版 .ZIP 下载 3.选择安装路径 ...

  5. Jetty配置

    类似TomCat 登陆官网www.eclipse.org Download下载Jetty zip压缩版 解压到文件夹,打开idea的Config->Jetty-server->Local- ...

  6. apache+jetty 配置web jsp服务器负载均衡

    首先,查找中文资料,貌似很少,有一个网友写了点,但是1版本过老,2有些地方有错误. 经过我自己摸索,记录一下.这个图很简洁明了 第一阶段 ,配置jetty 首先从 http://download.ec ...

  7. maven jetty 配置

    对于jdk8增加如下配置: <plugin> <groupId>org.eclipse.jetty</groupId> <artifactId>jett ...

  8. JDK1.7 和 jetty配置教程

    系统是windows 7 64位版本,32位版本同理,xp系统的自己google设置环境变量 打开设置环境变量窗口,右键计算机->我的电脑,选择属性 点击高级系统设置 选择环境变量 红线为需要设 ...

  9. 内置Jetty配置JSP支持过程中的常见报错

    目录 1. 常见报错及解决 1.1 JSP support not configured 1.2 JSTL标签解析 1.3 JSP编译 1.4 JSP实现依赖 1.5 EL表达式支持 2. 小结 1. ...

随机推荐

  1. 实现浏览器遗漏的原件 jQuery.selectCheckbox

    工作中遇到了一个下拉需要实现checkbox的效果,如下图 或许网上已经有实现了,但简单的功能自己实现就好了, 结构 <div class="form-control-wrap&quo ...

  2. Qt录音程序

    源地址:http://www.oschina.net/code/snippet_1243295_48623 [代码] [C/C++]代码 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 ...

  3. Windows Azure入门教学系列 (五):使用Queue Storage

    本文是Windows Azure入门教学的第五篇文章. 本文将会介绍如何使用Queue Storage.Queue Storage提供给我们一个云端的队列.我们可以用Queue Storage来进行进 ...

  4. FastReport的WCF托管到Windows服务的配置文件

    官网上找到的,还没有来得及研究,有时间了再研究. <?xml version="1.0"?> <configuration> <appSettings ...

  5. Mockito文档-单元测试技术

    Overview  Package   Class  Use  Tree  Deprecated  Index  Help     PREV CLASS   NEXT CLASS FRAMES     ...

  6. 1.0.1-学习Opencv与MFC混合编程之---播放AVI视频

    资源源代码:http://download.csdn.net/detail/nuptboyzhb/3961639 版本1.0.1新增内容 Ø  新建菜单项,Learning OpenCV——> ...

  7. uvc摄像头代码解析7

    13.uvc视频初始化 13.1 uvc数据流控制 struct uvc_streaming_control { __u16 bmHint; __u8 bFormatIndex; //视频格式索引 _ ...

  8. Android 高仿 频道管理----网易、今日头条、腾讯视频 (可以拖动的GridView)附源码DEMO

    距离上次发布(android高仿系列)今日头条 --新闻阅读器 (二) 相关的内容已经半个月了,最近利用空闲时间,把今日头条客户端完善了下.完善的功能一个一个全部实现后,就放整个源码.开发的进度就是按 ...

  9. UVA - 12119 The Bells are Ringing (枚举)

    Perhaps you all have heard the mythical story about Tower of Hanoi (The details of this story is not ...

  10. Eclipse + PyDev 无法导入模块

    下载后的包,在python IDLE 都可以导入这些模块,但是在Eclipse里面需要我们自己添加路径 需要导入的模块,在那个路径下,就在这里添加路径即可,其他的同理.