jetty 9:设置最基本的SSL / https

时间:2013-10-07 23:38:22

标签: grails ssl jetty

注意:如果您想查看此演示应用的行为,请访问www.collaborativepowernowinternational.us。在这里,选择testssl.PersonController,您可以创建一个人。然后去编辑指定SSL通道的人员,这将提供重定向循环。

看起来Jetty 9中有更多配置项进入start.ini文件,我的版本为9.05。

为了测试最基本的SSL / https,我在start.ini中取消注释以下几行:

#===========================================================
# SSL Context
# Create the keystore and trust store for use by
# HTTPS and SPDY
#-----------------------------------------------------------
jetty.keystore=etc/keystore
jetty.keystore.password=OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4
jetty.keymanager.password=OBF:1u2u1wml1z7s1z7a1wnl1u2g
jetty.truststore=etc/keystore
jetty.truststore.password=OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4
jetty.secure.port=8443
etc/jetty-ssl.xml

#===========================================================
# HTTPS Connector
# Must be used with jetty-ssl.xml
#-----------------------------------------------------------
jetty.https.port=8443
etc/jetty-https.xml

没有其他Jetty配置更改。然后我构建了最基本的Grails应用程序(有一个Person类),我将某些控制器操作设置为安全,这在我的开发机器上使用较旧的内置Jetty版本(Grails包含)可以正常工作。只需包含spring-security-core,然后将以下行添加到配置文件中即可完成此操作:

grails.plugins.springsecurity.secureChannel.definition = [
  '/person/list': 'REQUIRES_INSECURE_CHANNEL',
  '/person/delete/**': 'REQUIRES_SECURE_CHANNEL',
  '/person/edit/**': 'REQUIRES_SECURE_CHANNEL',
  '/person/show': 'REQUIRES_INSECURE_CHANNEL'
]

grails.plugins.springsecurity.portMapper.httpPort=80
grails.plugins.springsecurity.portMapper.httpsPort=443

当我访问person / edit操作时,我在浏览器中获得了一个重定向循环(在专用的CentOs 6机器上使用部署的WAR文件到Jetty 9)。这是使用Jetty 9附带提供的密钥库,只需取消注释start.ini中的行即可使用它。

我正在阅读的主要Jetty SSL配置页面是here。我不清楚,是否正在更新start.ini文件?如果没有,那么如何添加前一个链接中描述的jetty-https.xml中的行,即行:

 <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>

不确定如何添加它们,但它们似乎也与上​​面的start.ini文件行重复。

请帮助我帮助我运行最基本的Jetty SSL?非常感谢。


如果不熟悉Grails,可以简单地下载它,然后创建一个域类 - 有一个命令行选项。然后给它字段String firstName,String lastName。然后有命令生成控制器和视图 - 这完全是自动的。然后添加插件spring-security-core。在本文档的第16/17章中,正如我所示,列出哪些控制器操作是安全的,例如人/编辑。

2 个答案:

答案 0 :(得分:4)

你实际上已经足够使用我们在Jetty 9.0.6发行版中提供的默认试用密钥库来使用它的Jetty部分了。

简单地说,上面的模糊就足以使SSL在Jetty中运行。我下载了9.0.6发行版并取消注释这些行并且它可以工作。好吧,我不得不进入start.d / demo.ini文件并使用etc / jetty-ssl.xml和etc / jetty-https.xml删除最后两行,因为它们会运行两次......但我离题了

如果启动Jetty,您可以导航到https://localhost:8443,它会抱怨成为不受信任的证书,然后加载码头分发页面。

基于此我会说这可能是某种grails配置问题,我很遗憾也不知道答案,抱歉。

答案 1 :(得分:0)

启动Jetty 9.1,事情发生了变化,你必须按照here中的说明,看看每个Jetty开发人员看起来是否正确。此外,您不应该更改/删除/编辑${jetty.home}目录中的任何内容。以下是Jetty 9.1 +上基于SSL / HTTPS的自签名证书所需要做的事情:

(a)设置环境变量$JETTY_HOME以指向您安装jetty tar包的位置,例如/opt/jetty/

(b)创建一个新目录/tmp/myJettyApp,将其指向您环境中的$JETTY_BASE

(c)cd to $JETTY_BASE

(d)按照here中的说明进行操作:

/home/sonny $ cd $JETTY_BASE
/tmp/myJettyApp/ $ java -jar $JETTY_HOME/start.jar --add-to-startd=https,http2

(e)如果您愿意,请设置您的端口:

/home/sonny $ cd $JETTY_BASE;
/tmp/myJettyApp/ $ java -jar $JETTY_HOME/start.jar jetty.ssl.port=8444

(f)现在,跑码头:

/tmp/myJettyApp/ $ java -jar $JETTY_HOME/start.jar

您将看到HTTPS正在端口8444上运行。现在,如果您想在传统的HTTPS端口中使用jetty侦听,则必须使用sudo运行:

/tmp/myJettyApp/ $ java -jar $JETTY_HOME/start.jar jetty.ssl.port=443
/tmp/myJettyApp/ $ sudo java -jar $JETTY_HOME/start.jar

请注意,这已经自动签署了自签名证书等。

现在,如果您想要生成自己的自签名证书(例如,因为您想根据需要将validity修改为任意大小值),请按照{{{ 3}},使用keytool生成新的自签名证书,然后将其放入$JETTY_BASE/etc/并分别修改$JETTY_BASE/start.d/ssl.inijetty.sslContext.keyStorePassword的{​​{1}}。顺便说一句,对于最后两个jetty.sslContext.keyManagerPassword密码,您可以使用运行ssl.ini时使用的模糊明文密码或使用纯文本密码。如果要对它们进行模糊处理,请运行keytool

希望这有助于某人。