我正在尝试在我的Jetty上配置SSL。
我读到了这个: http://docs.codehaus.org/display/JETTY/How+to+configure+SSL 并创建了一个密钥库。
然后,我直接跳到第4节。但是这个配置文件在哪里我应该配置Jetty?
我试图搜索jetty.xml,但我的计算机上没有这样的...
答案 0 :(得分:39)
我在制作它时遇到了很多问题,但我最终还是知道如何让它发生。我正在使用ubuntu 10.04和java 7.它可能在windows下执行但是所有命令行都是bash命令,也许可以用cigwin / mingw做同样的事情
我使用了Jetty 8.1.8。从codehaus下载并选择linux的.tar.gz文件(.zip for windows)。
将文件解压缩到您希望的任何目录中,为了本文/答案,这将是您的{jetty}主文件夹。
转到 {jetty} / etc 目录。
按顺序执行以下所有命令行。无论何时询问密码,都要始终输入相同的密码。密码用于保护密钥文件,密钥库和证书本身。有时,将要求密码解锁密钥库或使用生成的密钥。一旦您了解了所有内容以及如何正确使用密码,您可以在准备就绪时更改这些密码(生产使用更安全)。否则,在询问时输入所请求的信息。
openssl genrsa -des3 -out jetty.key
openssl req -new -x509 -key jetty.key -out jetty.crt
keytool -keystore keystore -import -alias jetty -file jetty.crt -trustcacerts
openssl req -new -key jetty.key -out jetty.csr
openssl pkcs12 -inkey jetty.key -in jetty.crt -export -out jetty.pkcs12
keytool -importkeystore -srckeystore jetty.pkcs12 -srcstoretype PKCS12 -destkeystore keystore
现在您必须编辑 {jetty} /etc/jetty-ssl.xml 并配置您的密码以匹配您在证书生成期间使用的密码。如果要混淆密码,请返回命令行。转到 {jetty} 主目录并执行以下命令:
java -cp lib/jetty-util-8.1.8.v20121106.jar org.eclipse.jetty.util.security.Password "{PASSWORD}"
更改 {PASSWORD} 以获取实际密码,然后更改模糊密码,包括 jetty-ssl.xml 中所有密码字段中的“OBF:”。请注意,像这样模糊的密码很难为人类阅读,但很容易以编程方式未被删除。它只是阻止开发人员在编辑文件时知道密码。应正确保护所有配置文件,并尽可能限制其访问。
编辑 {jetty} /start.ini 并取消注释#etc / jetty-ssl.xml 行(只需删除#)
启动码头:
java -jar start.jar
现在通过以下网址与您的服务器联系:https://localhost:8443
完成!
请注意,此答案是使用jetty启用SSL的快速方法。为了确保生产安全,您必须阅读更多有关该主题的内容。
答案 1 :(得分:24)
在获得有关密钥库的更多经验后更新了答案。我向您保证,此解决方案可与中间证书完美配合(2015年7月29日)。
注意:PEM格式表示可读文件,证书以---BEGIN CERTIFICATE---
开头,私钥以-----BEGIN PRIVATE KEY-----
行开头。
这是一个简单的分步指南。从空目录开始 如果您有私钥(PEM编码.key),请跳至步骤2 如果您有证书签名请求(PEM编码.csr),请跳至步骤3 如果您有证书(PEM编码.crt或.pem)
,请跳至步骤4准备(无密码)私钥。
openssl genrsa -des3 -passout pass:1 -out domain.pass.key 2048
openssl rsa -passin pass:1 -in domain.pass.key -out domain.key
rm domain.pass.key
准备证书签名请求(CSR)。我们将使用我们的密钥生成此信息。询问时输入相关信息。请注意-sha256
的使用,如果没有它,现代浏览器将生成警告。
openssl req -key domain.key -sha256 -new -out domain.csr
准备证书。选择一个:
a)自己签名
openssl x509 -req -days 3650 -in domain.csr -signkey domain.key -out domain.crt
b)将其发送给权威机构
您的SSL提供商将以PEM格式为您提供证书及其中间证书。
添加到信任链并以PKCS12格式打包。为方便起见,第一个命令设置密钥库密码(否则您需要输入密码十几次)。为安全设置不同的密码。
export PASS=LW33Lk714l9l8Iv
选择一个:
a)自签名证书(无需中间证书)
openssl pkcs12 -export -in domain.crt -inkey domain.key -out domain.p12 -name domain -passout pass:$PASS
keytool -importkeystore -deststorepass $PASS -destkeypass $PASS -destkeystore domain.keystore -srckeystore domain.p12 -srcstoretype PKCS12 -srcstorepass $PASS -alias domain
b)需要包含中间证书
下载中间证书并将其连接到一个文件中。订单应该是sub to root。
cat sub.class1.server.ca.pem ca.pem > ca_chain.pem
对链文件中的每个中间证书使用-caname
参数,分别与它们放入链文件的顺序相对应。
openssl pkcs12 -export -in domain.crt -inkey domain.key -out domain.p12 -name domain -passout pass:$PASS -CAfile ca_chain.pem -caname sub1 -caname root -chain
keytool -importkeystore -deststorepass $PASS -destkeypass $PASS -destkeystore domain.keystore -srckeystore domain.p12 -srcstoretype PKCS12 -srcstorepass $PASS -alias domain
重要提示:虽然keytool -list
只会列出一个条目而不是任何中间证书,但它会完美运行。
配置码头。
将domain.keystore
文件移至JETTY_HOME / etc /。
选择一个:
a)您正在使用新的start.ini
样式配置(Jetty 8+):
jetty.keystore=etc/domain.keystore
jetty.truststore=etc/domain.keystore
jetty.keystore.password=LW33Lk714l9l8Iv
jetty.keymanager.password=LW33Lk714l9l8Iv
jetty.truststore.password=LW33Lk714l9l8Iv
b)您正在使用.xml文件的旧样式配置(您应该升级到新样式!):
修改JETTY_HOME/etc/jetty-ssl.xml
文件并更改以下部分。替换密码部分以匹配您的密码。我们没有定义KeyManagerPassword
,因为我们的密钥没有密码。
<Configure id="Server" class="org.eclipse.jetty.server.Server">
<New id="sslContextFactory" class="org.eclipse.jetty.http.ssl.SslContextFactory">
<Set name="KeyStore"><Property name="jetty.home" default="." />/etc/keystore</Set>
<Set name="KeyStorePassword">LW33Lk714l9l8Iv</Set>
<Set name="TrustStore"><Property name="jetty.home" default="." />/etc/keystore</Set>
<Set name="TrustStorePassword">LW33Lk714l9l8Iv</Set>
</New>
<Call name="addConnector">...</Call>
</Configure>
编辑start.ini文件以包含jetty-ssl.xml文件。
(重新)启动码头。
请注意,此密钥库文件也可以与其他容器(如Tomcat)一起使用。祝好运!
答案 2 :(得分:2)
Jetty的默认配置文件,位于$JETTY_HOME/etc/jetty.xml
如果您使用的是maven的jetty插件,则需要在pom.xml文件中指定ssl密钥库详细信息。有关详细信息,请参阅this question
答案 3 :(得分:2)
刚刚以每年6美元的价格购买了godaddy的证书。很棒,而且持续时间很长。以下是我根据这些网站和Jean-Philippe Gravel的回答在Amazon EC2 / Ubuntu / Jetty上设置的步骤。
http://docs.codehaus.org/display/JETTY/How+to+configure+SSL
http://community.xmatters.com/docs/DOC-1228#.UgWsI1MU7lc
keytool -keystore keystore -alias jettykey -genkey -keyalg RSA
请注意,“名字和姓氏”必须是您的FQDN(不含http://)。在我的第一次尝试中,我尽职尽责地说出了我的名字和姓氏,但是godaddy有很好的警告而拒绝了它。
为Godaddy生成CSR文件:
keytool -certreq -alias jetty -keystore keystore -file jetty.csr
以Godaddy表格提交,以创建证书,包括BEGIN / END“新证书请求”。
(Godaddy要求你验证它的网站。有几种方法,因为我通过代理购买了域名,我发现通过托管由godaddy生成的html页面进行验证是最容易和最快的。)
从godaddy下载包含证书和中间证书的zip。有一个服务器类型列表可供选择。我选择“其他”。然后将证书与中间证书结合起来。
cat mydomain.com.crt gd_bundle.crt > certchain.txt
导出我的私钥
keytool -importkeystore -srckeystore keystore -destkeystore intermediate.p12 -deststoretype PKCS12
openssl pkcs12 -in intermediate.p12 -out jettykey.pem -nodes
合并私钥和证书
openssl pkcs12 -export -inkey jettykey.pem -in certchain.txt -out jetty.pkcs12
导入pkcs12证书(别名变为1)
keytool -importkeystore -srckeystore jetty.pkcs12 -srcstoretype PKCS12 -destkeystore keystore
(我备份了密钥库,然后删除了原始密钥。我在进行故障排除时这样做了,Jetty可能需要也可能不需要。)
keytool -delete -keystore keystore -alias jettykey
sudo cp keystore /usr/share/jetty/etc/
sudo vi /usr/share/jetty/etc/jetty-ssl.xml
相应地修改your.store.password,your.key.password和your.trust.password。如果要对其进行模糊处理,请使用
java -cp /usr/share/jetty/lib/jetty.jar:/usr/share/jetty/lib/jetty-util.jar org.mortbay.jetty.security.Password <your.password>
指示Jetty加载jetty-ssl.xml文件。
sudo echo "/etc/jetty/jetty-ssl.xml" >> /etc/jetty/jetty.conf
sudo /sbin/iptables -t nat -I PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 8443
(同时修改Amazon EC2安全组以允许443)
sudo service jetty start
答案 4 :(得分:1)
如果您碰巧使用Jetty 9.3,则应更改start.d/ssl.ini
中的配置:
jetty.sslContext.keyStorePath=mystore.jks
jetty.sslContext.keyStorePassword=X
jetty.sslContext.keyManagerPassword=X
jetty.sslContext.trustStorePath=mystore.jks
jetty.sslContext.trustStorePassword=X
其中:
mystore.jks
是使用keytool
X
是您的明文密码(我建议跳过混淆,因为它只会给您带来虚假的安全性)商店与为Tomcat生成的商店完全相同。即使您使用不同的Java版本来生成不应该成为问题的密钥库。
答案 5 :(得分:0)
在使用Jetty作为Maven插件的Windows上尝试时,以下步骤可以提供帮助:
pom.xml
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>8.1.11.v20130520</version>
<configuration>
<scanIntervalSeconds>10</scanIntervalSeconds>
<webApp>
<contextPath>/yourappcontext</contextPath>
</webApp>
<connectors>
<connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">
<port>9090</port>
<maxIdleTime>1</maxIdleTime>
</connector>
<connector implementation="org.eclipse.jetty.server.ssl.SslSocketConnector">
<port>9443</port>
<keystore>src/test/resources/keystore</keystore>
<keyPassword>123456</keyPassword>
<password>123456</password>
</connector>
</connectors>
</configuration>
</plugin>
使用JDK工具生成密钥/证书keytool
:
keytool -keystore keystore -alias jetty -genkey -keyalg RSA
此命令将生成一个文件keystore
,我们需要将其放在以下(或任何您喜欢的文件,直到在keystore
元素中配置)路径src/test/resources/keystore
。