2013-10-07 63 views
5

注意:如果您想查看此演示应用程序的行为,请访问www.collaborativepowernowinternational.us。在这里,选择testssl.PersonController,你可以创建一个人。然后去编辑指定了SSL通道的人员,这会给出一个重定向循环。jetty 9:设置最基本的SSL/https

它似乎与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 

没有其他码头配置更改。然后,我构建了最基本的Grails应用程序(拥有一个Person类),其中我设置了某些控制器操作来保证安全性,这可以在我的开发机器上使用较旧的内置Jetty版本(即Grails包含的版本)正常工作。这是由包括弹簧安全的核心,然后把下面几行到配置文件做简单:

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 

当我访问的人/编辑动作我得到在浏览器重定向循环(使用部署的WAR文件到专用的CentOs 6机器上的Jetty 9)。这是使用随Jetty 9提供的提供的密钥存储库,只需取消注释start.ini中的行即可使用它。

我正在阅读的主要Jetty SSL配置页面是here。我不清楚的是,是否足够更新start.ini文件?如果不是,究竟怎样完成一个加入此之前的链接描述码头,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> 

不知道如何添加,但他们似乎也开始重复。 ini文件行上面。

你能帮我解决一下最基本的Jetty SSL吗?非常感谢。


如果不熟悉Grails,可以简单地下载它,然后创建一个域类 - 这里有一个命令行选项。然后给它字段字符串firstName,字符串lastName。然后有命令生成一个控制器并查看它 - 这全部是自动的。然后添加一个弹簧安全核心插件。在本文档的第16/17章中,如我所示,列出哪些控制器操作是安全的,如人员/编辑。

回答

4

实际上,您只需使用我们在Jetty 9.0.6发行版中发布的默认试用密钥存储库的Jetty部分即可获得足够的资源。

简单地说,上面提到的blurb足以使SSL在Jetty中工作。我下载了9.0.6发行版,并取消了这些行的注释并且工作正常。那么,我必须进入start.d/demo.ini文件,并使用etc/jetty-ssl.xml和etc/jetty-https.xml删除最后两行,因为它们会运行两次......但我离题了。

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

基于这一点,我会说这可能是某种类型的grails配置问题,我很遗憾也不知道答案,对不起。

+0

谢谢!事实证明,Grails允许通过插件指定在桌面上工作的安全通道,但不适用于更新的Jetty版本(我也正在部署)。这个问题与如何打开SSL以及在Jetty 9.05/9.06(通过start.ini)和更新的Jetty 9.10版本之间指定证书的流量相结合,让我无法工作 - 无法正常工作。 – Ray

+0

感谢您澄清要使用的正确版本 - 即9.06,因为9.10的配置机制已完成并且相关文档已更新。 – Ray

0

起始码头9。1,事情已经发生变化,你必须按照here中的说明为每个Jetty开发人员提供正确的内容。此外,您不应该更改/删除/编辑${jetty.home}目录中的任何内容。以下是您需要为Jetty 9.1+上的基于自签名证书的SSL/HTTPS执行的操作:

(a)将环境变量$JETTY_HOME设置为指向您安装码头tar包的位置,如/opt/jetty/。 (b)在您的环境中创建一个新目录,/tmp/myJettyApp,指向$JETTY_BASE

(C)cd到$JETTY_BASE

here

(d)按照说明:

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

(五)设置你的端口,如果你想:

/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端口监听,你必须使用sudo来运行:

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

注意,这已经这样做了自我自动签名的证书等。

现在,如果您想生成自己的自签名证书(比如说,因为您想将validity修改为任意大或小的值,具体取决于您的需要),请按照here中的说明生成新的使用keytool自签名证书,然后将其置于$JETTY_BASE/etc/中,并分别修改$JETTY_BASE/start.d/ssl.inijetty.sslContext.keyStorePasswordjetty.sslContext.keyManagerPassword。顺便说一句,对于最后两个ssl.ini密码,您可以使用您在运行keytool时使用的模糊纯文本密码或使用纯文本密码。如果你想混淆它们,请运行{jetty.home} $ java -cp lib/jetty-util-9.3.6.v20151106.jar org.eclipse.jetty.util.security.Password "MyInterestingAndAwesomePassword"

希望这可以帮助别人。