【问题标题】:jetty 9: setting up the most basic SSL / httpsjetty 9:设置最基本的 SSL/https
【发布时间】:2013-10-07 23:38:21
【问题描述】:

注意:如果您想查看此演示应用程序的行为,只需访问 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 操作时,我在浏览器中得到一个重定向循环(使用部署的 WAR 文件到专用 CentOs 6 机器上的 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 章中,正如我所展示的,when 列出了哪些控制器操作是安全的,例如 person/edit。

【问题讨论】:

    标签: grails ssl jetty


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 谢谢!事实证明,Grails 允许使用一种方法来指定安全通道,该通道可以通过插件在较旧的 Jetty 版本上“在桌面上”工作,但在较新的 Jetty 版本(我也在部署)中不起作用。这个问题与如何打开 SSL 并在 Jetty 9.05/9.06(通过 start.ini)和较新的 Jetty 9.10 版本之间指定证书的不断变化相结合,让我感到厌烦 - 无法得到任何工作。
    • 感谢您阐明要使用的正确版本 - 即暂时为 9.06,因为 9.10 的配置机制已完成,相关文档已更新。
    【解决方案2】:

    根据 Jetty 开发人员,从 Jetty 9.1 开始,情况发生了变化,您必须按照 here 中的说明进行操作,以使事情看起来正确。此外,您不应该更改/删除/编辑${jetty.home} 目录中的任何内容。在 Jetty 9.1+ 上,您需要为基于 SSL/HTTPS 的自签名证书执行以下操作:

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

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

    (c) cd 到$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 端口监听,你必须使用 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"

    希望这对某人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-08
      • 1970-01-01
      • 2015-06-12
      • 2014-03-09
      • 2018-07-05
      • 2013-07-23
      • 1970-01-01
      相关资源
      最近更新 更多