美文网首页
Jetty9.4.29配置HTTPS测试

Jetty9.4.29配置HTTPS测试

作者: 明翼 | 来源:发表于2020-05-25 15:51 被阅读0次

    由于工作需要,需要测试Jetty配置HTTPS的解析情况,本篇记录下Jetty下的HTTPS的配置。

    一 简单介绍

    1.1 Jetty介绍

    Jetty 是一个Servlet引擎,是一个可扩展和非常灵活的应用服务。它有一个基本数据模型,这个数据模型就是 Handler(处理器),所有可以被扩展的组件都可以作为一个 Handler,添加到 Server 中,Jetty 就是帮你管理这些 Handler。
    下图是 Jetty 的基本架构图,整个 Jetty 的核心组件由 Server 和 Connector 两个组件构成,整个 Server 组件是基于 Handler 容器工作的,它类似与 Tomcat 的 Container 容器。
    Connector 用于负责接受客户端的连接请求,并将请求分配给一个处理队列去处理。


    Jetty架构图

    1.2 Jetty优点

    • Jetty的架构简单,可以按需加载组件,减少不需要的组件,减少服务器内存开销。
    • Jetty 采用异步的Servlet,可以同时处理大量连接,且长时间保持连接状态。
    • Jetty 采用NIO在处理I/O请求更占优势,处理静态资源性能更好。
    • Jetty 嵌入到应用中,使一个普通应用快速支持http服务。

    二 Jetty 配置和使用

    Jetty最新版本为:jetty-distribution-9.4.29.v20200521.tar.gz ,和以前版本使用方法稍微有所不同。

    2.1 添加默认启动模块

    默认情况下,https和日志模块都没有开启,运行jetty连个日志都没有,实在是不合理。

    #添加日志模块
    java -jar start.jar --add-to-start=console-capture
    #添加https 模块
    java -jar start.jar --add-to-start=https
    # https模块要依赖ssl模块
    java -jar start.jar --add-to-start=ssl
    

    以上命令在jetty_home目录运行,更改start.ini配置文件。

    ## Connector host/address to bind to
     jetty.ssl.host=0.0.0.0
    
    ## Connector port to listen on
     jetty.ssl.port=7443
     jetty.sslContext.keyStorePath=etc/keystore
     jetty.sslContext.trustStorePath=etc/keystore
    

    2.2 启动命令

    前台启动:

    java -jar start.jar
    

    后台启动命令:

    ./bin/jetty.sh  start
    

    报错信息如下:

    2020-05-25 14:35:52.228:WARN:oejx.XmlConfiguration:main: 
    java.security.PrivilegedActionException: java.io.IOException: Is a directory
        at java.security.AccessController.doPrivileged(Native Method)
    

    配置的key文件错误,使用keystore文件试试,转换方法如下:

    2.3 pem文件转keystore

    jetty 使用的是keystore文件,需要进行转换,转命令:

    #需要输入密码 假设输入123456
    openssl pkcs12 -export -in server-cert.pem -inkey server-key.pem  -out out.pk12
    #转成keystore文件
    keytool -importkeystore -deststorepass 123456 -destkeypass 123456 -destkeystore sh.keystore -srckeystore out.pk12 -srcstoretype PKCS12 -srcstorepass 123456 
    

    转换密码:

    java -cp lib/jetty-util-9.4.29.v20200521.jar  org.eclipse.jetty.util.security.Password 123456
    2020-05-25 15:06:01.084:INFO::main: Logging initialized @114ms to org.eclipse.jetty.util.log.StdErrLog
    123456
    OBF:19iy19j019j219j419j619j8
    MD5:e10adc3949ba59abbe56e057f20f883e
    

    配置更改start.ini文件:

    ## Keystore file path (relative to $jetty.base)
    jetty.sslContext.keyStorePath=etc/keystore/sh.keystore
    ## Truststore file path (relative to $jetty.base)
    jetty.sslContext.trustStorePath=etc/keystore/sh.keystore
    ## Keystore password
     jetty.sslContext.keyStorePassword=OBF:19iy19j019j219j419j619j8
    

    配置后继续报错:

    2020-05-25 15:12:39.532:INFO:oejus.SslContextFactory:main: x509=X509@1786dec2(1,h=[192.168.63.1],w=[]) for Server@6acdbdf5[provider=null,keyStore=file:///home/miaohq/soft/jetty/etc/keystore/sh.keystore,trustStore=file:///home/miaohq/soft/jetty/etc/keystore/sh.keystore]
    2020-05-25 15:12:39.573:WARN:oejx.XmlConfiguration:main: 
    java.security.PrivilegedActionException: java.security.UnrecoverableKeyException: Cannot recover key
    

    到这里面才发现是不是密钥套件没配置,所以提取不了key?所以下面配置下。

    三 配置https和ssl配置

    3.1 配置jetty-ssl-context.xml修改

      <Set name="KeyStorePath"><Property name="jetty.base" default="." />/<Property name="jetty.sslContext.keyStorePath" deprecated="jetty.keystore" default="etc/keystore/sh.keystore"/></Set>
      <Set name="KeyStorePassword"><Property name="jetty.sslContext.keyStorePassword" deprecated="jetty.keystore.password" default="OBF:19iy19j019j219j419j619j8"/></Set>
      <Set name="KeyManagerPassword"><Property name="jetty.sslContext.keyManagerPassword" deprecated="jetty.keymanager.password" default="OBF:19iy19j019j219j419j619j8"/></Set>
      <Set name="TrustStorePath"><Property name="jetty.base" default="." />/<Property name="jetty.sslContext.trustStorePath" deprecated="jetty.truststore" default="etc/keystore/sh.keystore"/></Set>
    

    3.2 配置jetty-ssl.xml修改

    <Set name="port"><Property name="jetty.ssl.port" deprecated="ssl.port" default="7443" /></Set>
    

    这次终于可以愉快访问了。

    3.3 通过系统命令启停jetty

    添加服务到系统

    cp        bin/jetty.sh /etc/init.d/jetty
    #jetty的安装目录
    echo JETTY_HOME=`pwd` > /etc/default/jetty
    #jetty的web目录
    echo "JETTY_BASE=/opt/jetty-base" >> /etc/default/jetty
    

    启动命令:

    service jetty start
    

    3.4 配置Tls版本和支持密钥套件

    更改jetty-ssl-context.xml 目前这个里面RSA的套件都不支持了:(。

    <Set name="IncludeProtocols">
        <Array type="String">
            <Item>TLSv1.2</Item>
        </Array>
      </Set>
    
      <Set name="IncludeCipherSuites">
        <Array type="String">
          <Item>TLS_RSA_WITH_AES_128_CBC_SHA256</Item>
          <Item>TLS_RSA_WITH_AES_128_CBC_SHA</Item>
          <Item>TLS_RSA_WITH_AES_128_GCM_SHA256</Item>
          <Item>TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256</Item>
        </Array>
      </Set>
    
    

    3.4 注意

    目前我是在jetty的目录下直接启动的,其实不是太合适,正规点,是需要自己指定个目录,然后jetty_base指向这个目录。

    四 诗词欣赏

    西江月·堂上谋臣帷幄
    
    [宋] [辛弃疾]
    
    堂上谋臣帷幄,边头猛将干戈。
    天时地利与人和。燕可伐与曰可。
    此日楼台鼎鼐,他时剑履山河。
    都人齐和大风歌。管领群臣来贺。
    

    相关文章

      网友评论

          本文标题:Jetty9.4.29配置HTTPS测试

          本文链接:https://www.haomeiwen.com/subject/stieahtx.html