如何通过XML配置为嵌入式Jetty 9启用SSL模式
Jetty 9 单一XML配置启用SSL方案
可行性说明
完全可以实现,无需改用官方拆分的多配置文件,直接在你现有的jetty.xml中追加SSL相关配置即可,原有Java加载逻辑不需要做任何修改。
前置准备
- 提前准备好SSL证书对应的密钥库文件,推荐使用JKS或PKCS12格式,记录好密钥库密码、密钥密码、证书别名
- 确保项目依赖中包含
jetty-sslengine相关组件,避免启动时出现类缺失报错
具体配置修改步骤
第一步:追加SSL相关配置
在你现有jetty.xml的<Configure id="Server" class="org.eclipse.jetty.server.Server">标签内部,原有HTTP连接器配置的前面,添加如下配置,所有占位符请替换为你实际的参数:
<!-- 公共HTTP配置,HTTP和HTTPS连接器共用 --> <New id="httpConfig" class="org.eclipse.jetty.server.HttpConfiguration"> <Set name="secureScheme">https</Set> <Set name="securePort"><Property name="jetty.ssl.port" default="8443"/></Set> <Set name="sendServerVersion">false</Set> <Set name="requestHeaderSize">8192</Set> </New> <!-- SSL上下文工厂配置 --> <New id="sslContextFactory" class="org.eclipse.jetty.util.ssl.SslContextFactory$Server"> <Set name="keyStorePath">替换为你的密钥库文件实际路径,例如C:/jetty/etc/ssl.keystore</Set> <Set name="keyStorePassword">替换为你的密钥库密码</Set> <Set name="keyManagerPassword">替换为你的密钥密码</Set> <Set name="keyStoreType">JKS</Set> <!-- 禁用不安全的SSL/TLS协议,可按需调整 --> <Set name="excludeProtocols"> <Array type="java.lang.String"> <Item>SSLv3</Item> <Item>TLSv1</Item> <Item>TLSv1.1</Item> </Array> </Set> </New> <!-- HTTPS连接器配置 --> <Call name="addConnector"> <Arg> <New id="httpsConnector" class="org.eclipse.jetty.server.ServerConnector"> <Arg name="server"><Ref refid="Server"/></Arg> <Arg name="factories"> <Array type="org.eclipse.jetty.server.ConnectionFactory"> <Item> <New class="org.eclipse.jetty.server.SslConnectionFactory"> <Arg name="next">http/1.1</Arg> <Arg name="sslContextFactory"><Ref refid="sslContextFactory"/></Arg> </New> </Item> <Item> <New class="org.eclipse.jetty.server.HttpConnectionFactory"> <Arg name="config"><Ref refid="httpConfig"/></Arg> </New> </Item> </Array> </Arg> <Set name="host"><SystemProperty name="jetty.ssl.host"/></Set> <Set name="port"><Property name="jetty.ssl.port" default="8443"/></Set> <Set name="idleTimeout"><Property name="jetty.http.idleTimeout" default="30000"/></Set> </New> </Arg> </Call>
如果需要实现HTTP请求自动跳转到HTTPS,可以额外追加如下配置:
<!-- HTTP强制跳转HTTPS配置,可选 --> <Call name="insertHandler"> <Arg> <New class="org.eclipse.jetty.server.handler.SecuredRedirectHandler"/> </Arg> </Call>
如果不需要保留HTTP访问,直接注释掉原有HTTP连接器的配置即可。
第二步:启动验证
原有Java加载代码不需要做任何修改,直接运行即可加载新增的SSL配置,通过配置的HTTPS端口即可访问服务。
注意事项
- 生产环境请使用CA机构签发的正规证书,自签名证书仅可用于测试环境,访问时会触发安全提示
- 若HTTPS使用443端口,Linux/Mac环境需要root/管理员权限才能启动
- 密钥库文件请做好权限控制,避免明文密码泄露
内容的提问来源于stack exchange,提问作者Avinash Modi
相关产品推荐
相关产品推荐

