当前位置: 首页 > 科技观察

一篇教大家使用Jetty配置HTTPS

时间:2023-03-12 08:07:55 科技观察

由于工作需要,需要测试一下Jetty的HTTPS配置解析。本文记录Jetty下的HTTPS配置。1.简介1.1Jetty简介Jetty是一个Servlet引擎,是一种可扩展且非常灵活的应用服务。它有一个基本的数据模型,这个数据模型就是Handler(处理器),所有可以扩展的组件都可以作为一个Handler,添加到Server中,Jetty就是帮你管理这些Handler。下图是Jetty的基本架构图。Jetty的核心组件由Server和Connector组成。整个Server组件是基于Handler容器工作的,类似于Tomcat的Container容器。Connector负责接受客户端的连接请求,并将请求分配到一个处理队列中进行处理。1.2Jetty的优点Jetty架构简单,可以按需加载组件,减少不必要的组件,减少服务器内存开销。Jetty使用异步Servlet,可以同时处理大量的连接,并长时间保持连接状态。Jetty使用NIO在处理I/O请求上有优势,在处理静态资源上有更好的性能。Jetty嵌入在应用程序中,使得一个普通的应用程序可以快速支持http服务。2.Jetty配置及使用Jetty最新版本为:jetty-distribution-9.4.29.v20200521.tar.gz,与之前的版本略有不同。2.1添加默认启动模块默认情况下,https和log模块是没有启用的,jetty连log都没有,这真是不合理。#添加日志模块java-jarstart.jar--add-to-start=console-capture#添加https模块java-jarstart.jar--add-to-start=https#https模块依赖ssl模块java-jarstart.jar--add-to-start=ssl上面的命令运行在jetty_home目录下,修改start.ini配置文件。##绑定到jetty.ssl.host=0.0.0.0的连接器主机/地址.2启动命令前台启动:java-jarstart.jar后台启动命令:./bin/jetty.shstart报错信息如下:2020-05-2514:35:52.228:WARN:oejx.XmlConfiguration:main:爪哇。security.PrivilegedActionException:java.io.IOException:Isadirectoryatjava.security.AccessController.doPrivileged(NativeMethod)配置的密钥文件错误。尝试使用密钥库文件。转换方法如下:2.3pem文件到keystorejetty使用keystore文件需要转换,转换命令:#需要输入密码假设输入123456opensslpkcs12-export-inserver-cert.pem-inkeyserver-key.pem-outout.pk12#转换成keystore文件keytool-importkeystore-deststorepass123456-destkeypass123456-destkeystoresh.keystore-srckeystoreout.pk12-srcstoretypePKCS12-srcstorepass123456转换密码:java-cplib/jetty-util-9.4.29.v20200521.jarorg.eclipse.jetty.util.security.Password2020-6word1220-6word12234505-2515:06:01.084:INFO::main:日志记录初始化d@114mstoorg.eclipse.jetty.util.log.StdErrLog123456OBF:19iy19j019j219j419j619j8MD5:e10adc3949ba59abbe56e057f20f883e配置更改start.ini文件:##Keystore文件路径(相对于$jetty.base.base.corekey.keystore##.s)truststore文件路径(相对于$jetty.base)jetty.sslContext.trustStorePath=etc/keystore/sh.keystore##Keystore密码jetty.sslContext.keyStorePassword=OBF:19iy19j019j219j419j619j8配置后继续报错:2020-05-2515:12:39.532:INFO:oejus.SslContextFactory:main:x509=X509@1786dec2(1,h=[192.168.63.1],w=[])forServer@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-2515:12:39.573:WARN:oejx.XmlConfiguration:main:java.security.PrivilegedActionException:java.security.UnrecoverableKeyException:Cannotrecoverkey我发现没有配置密钥套件,所以无法提取密钥?所以如下配置三、配置https和ssl配置3.1配置jetty-ssl-context.xml修改//3.2配置jetty-ssl.xml修改3.3通过系统命令启动和停止jetty为系统添加服务:cpbin/jetty.sh/etc/init.d/jetty#jetty安装目录echoJETTY_HOME=`pwd`>/etc/default/jetty#jetty'swebdirectoryecho"JETTY_BASE=/opt/jetty-base">>/etc/default/jettystartcommand:servicejettystart###3.4configureTlsversionandsupportkeysuite目前更改jetty-ssl-context.xml不支持其中的RSA套件:">TLS_RSA_WITH_AES_128_CBC_SHA256TLS_RSA_WITH_AES_128_CBC_SHATLS_RSA_WITH_AES_128_GCM_SHA256TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA2563.4注意目前我直接在jetty目录下启动,其实不太合适,正式一点需要自己指定一个目录,然后jetty_base指向t他的目录。