Jetty 6 HTTPS 配置指南

Jetty 6 支持配置 HTTPS ,它原生提供 SSL/TLS 能力,下面分前置准备完整配置步骤验证说明。


一、前置准备:SSL 证书文件

需要 Java 标准密钥库文件,二选一即可:

  1. JKS 格式(Jetty 6 最常用,Java 默认密钥库)

  2. PKCS12 (.p12/.pfx) 证书

生成 / 转换证书(简单自测)

本地测试可先用 JDK 自带 keytool 生成自签名证书:

bash 复制代码
keytool -genkeypair -alias jetty -keyalg RSA -keystore jetty.jks -storepass 123456 -keypass 123456

执行后按提示填写信息,生成 jetty.jks


二、Jetty 6 两种配置方式

Jetty 6 主流使用 XML 配置文件jetty.xml/jetty-ssl.xml),分「独立配置 SSL」和「混合 HTTP+HTTPS」。

方式 1:使用官方 jetty-ssl.xml(推荐)

Jetty 6 安装包默认自带 etc/jetty-ssl.xml,步骤如下:

  1. 放置证书

    jetty.jks 放到 Jetty 的 etc/ 目录(或自定义路径,记好绝对路径)。

  2. 修改 jetty-ssl.xml

    打开 etc/jetty-ssl.xml,找到 SslSocketConnector 节点,修改密钥库、密码、端口:

xml 复制代码
<!-- HTTPS 连接器,默认端口 8443 -->
<Call name="addConnector">
  <Arg>
    <New class="org.mortbay.jetty.security.SslSocketConnector">
      <!-- HTTPS 监听端口 -->
      <Set name="Port">8443</Set>
      <Set name="Host">0.0.0.0</Set>

      <!-- 密钥库路径(绝对/相对路径) -->
      <Set name="Keystore"><SystemProperty name="jetty.home" default="."/>/etc/jetty.jks</Set>
      <!-- 密钥库密码 -->
      <Set name="Password">123456</Set>
      <!-- 私钥密码(和上面一致) -->
      <Set name="KeyPassword">123456</Set>

      <!-- 信任库(客户端证书认证可选,自测可注释) -->
      <!-- <Set name="Truststore">...</Set> -->
      <!-- <Set name="TrustPassword">...</Set> -->
    </New>
  </Arg>
</Call>
  1. 启动 Jetty 加载 SSL 配置
bash 复制代码
# Linux/Mac
java -jar start.jar etc/jetty.xml etc/jetty-ssl.xml

# Windows
java -jar start.jar etc\jetty.xml etc\jetty-ssl.xml

同时加载 jetty.xml(HTTP 8080)+ jetty-ssl.xml(HTTPS 8443),实现双协议共存


方式 2:直接整合到 jetty.xml(只启用 HTTPS)

如果不需要 HTTP,直接在 jetty.xml 替换默认 SocketConnectorSslSocketConnector

xml 复制代码
<!-- 注释原有 HTTP SocketConnector -->
<!--
<Call name="addConnector">
  <Arg>
    <New class="org.mortbay.jetty.bio.SocketConnector">
      <Set name="Port">8080</Set>
    </New>
  </Arg>
</Call>
-->

<!-- 新增 HTTPS 连接器 -->
<Call name="addConnector">
  <Arg>
    <New class="org.mortbay.jetty.security.SslSocketConnector">
      <Set name="Port">8443</Set>
      <Set name="Keystore"><SystemProperty name="jetty.home" default="."/>/etc/jetty.jks</Set>
      <Set name="Password">123456</Set>
      <Set name="KeyPassword">123456</Set>
    </New>
  </Arg>
</Call>

直接启动:

bash 复制代码
java -jar start.jar etc/jetty.xml

三、PKCS12 (.p12/.pfx) 证书适配

如果你的证书是 .p12,只需额外指定 密钥库类型

xml 复制代码
<Set name="KeystoreType">PKCS12</Set>

完整片段:

xml 复制代码
<New class="org.mortbay.jetty.security.SslSocketConnector">
  <Set name="Port">8443</Set>
  <Set name="Keystore">/etc/your.p12</Set>
  <Set name="KeystoreType">PKCS12</Set>
  <Set name="Password">p12密码</Set>
  <Set name="KeyPassword">私钥密码</Set>
</New>

四、访问验证

启动成功后,浏览器访问:

Plain 复制代码
https://localhost:8443

自签名证书会提示「不安全」,属于正常现象,正式环境替换可信 CA 证书即可。


五、常见问题排查

  1. 启动报错:找不到 keystore

    路径错误,建议使用绝对路径测试。

  2. 密码错误:Invalid keystore format

    核对 Password/KeyPassword,JKS 和 PKCS12 不要混用类型。

  3. 端口被占用

    修改 <Set name="Port"> 为其他端口(如 8444)。

  4. Jetty 6 老旧注意:

    Jetty 6 版本过旧,仅支持老旧 SSL/TLS 协议(SSLv3、TLS1.0) ,不支持 TLS1.2/1.3,生产环境强烈建议升级 Jetty 版本

相关推荐
Multipath7122 小时前
乾元通基于原生UDP时隙感知的多链路聚合方案
网络·网络协议·5g·安全·udp·智能路由器·实时音视频
Lsetea2 小时前
Nginx报SSL_CTX_use_PrivateKey failed:证书与私钥不匹配怎么排查
nginx·https·ssl证书·openssl·私钥
qq_297670874 小时前
第 4 篇:HTTP 和浏览器——HTTPS 不只是「把 HTTP 包一层 TLS」那么简单
网络安全·https·tls
sugar__salt4 小时前
从跨域到 WebSocket:一篇讲透浏览器的通信边界
网络·websocket·网络协议
今夕资源网5 小时前
本地SSL证书生成工具本地 HTTPS 配置不用再敲命令:CertTool 一站式管理自签证书与 Hosts
网络协议·https·ssl·ssl证书生成·ssl本地测试证书
2401_868534785 小时前
网规备考_5.4 防火墙及访问控制技术
linux·网络协议
艾莉丝努力练剑9 小时前
【AI大模型接入SDK】Gemini模型接入知识体系
java·开发语言·网络·人工智能·网络协议·学习·http
SendTomo9 小时前
SendTomo 与 send.wang 全景对比评测与实战指南
网络·网络协议·tcp/ip·webrtc·p2p
ocean210310 小时前
2025-2026年计算机网络面试高频知识点洞察
计算机网络·面试·职场和发展·https·tcp·面试真题·秋招春招
今夕资源网10 小时前
Windows 本地 HTTPS 配置教程:使用 CertTool 创建自签名证书并部署到宝塔
windows·网络协议·https