如何使用jetty建立2路SSL认证连接

2024-06-20

我想使用 2 路 ssl 连接器创建一个 servlet。 我创建test2wayssl.jks并发起SSL 选择通道连接器当我从邮递员发送请求时客户证书,邮递员的回应是

连接 127.0.0.1:29226/2wayssl 时出错。

下面是我的代码。但这不起作用。

Server server = new Server(29226);

SslContextFactory sslContextFactory = new SslContextFactory();
sslContextFactory.setKeyStorePath("2-way-ssl-authentication/test2wayssl.jks");
sslContextFactory.setKeyStorePassword("123456"); 
sslContextFactory.setKeyManagerPassword("123456");
sslContextFactory.setTrustAll(true);

SslSelectChannelConnector sslConnector = new SslSelectChannelConnector(sslContextFactory);
sslConnector.setAllowRenegotiate(true); 
sslConnector.setHost("localhost");
sslConnector.setServer(server);      

server.addConnector(sslConnector);

ServletHandler handler = new ServletHandler();
handler.addServletWithMapping(HelloServlet.class, "/2wayssl");
server.setHandler(handler); 

try { 
  server.start(); 
} catch (Exception e) {
  e.printStackTrace();  // TODO impl
}

下面是我的 servlet 类

  @SuppressWarnings("serial")
  public static class HelloServlet extends HttpServlet 
  {
    @Override
    protected void doPost(HttpServletRequest request,
                         HttpServletResponse response) throws IOException
    {
      response.setStatus(HttpServletResponse.SC_OK);
      response.setContentType("text/html");
      response.setCharacterEncoding("utf-8");
      response.getWriter().println("<h1>2 Way SSL Authentication</h1>");
    }
  }

任何帮助表示赞赏。


SslSelectChannelConnector来自 Jetty 8 岁及以上现已停产/停产 https://www.eclipse.org/jetty/documentation/current/what-jetty-version.html,并且不支持客户端证书,请先升级到Jetty支持的稳定版本。

Jetty 9.4.27.v20200227 是如何通过使用SslContextFactory.Server和一个(或两个)选项

  • setWantClientAuth(true)这会打开与以下内容相关的 SSL 连接上的 JVM 功能javax.net.ssl.SSLParameters.getWantClientAuth() https://docs.oracle.com/javase/8/docs/api/javax/net/ssl/SSLParameters.html#getWantClientAuth--
  • setNeedClientAuth(true)这会打开与以下内容相关的 SSL 连接上的 JVM 功能javax.net.ssl.SSLParameters.getNeedClientAuth() https://docs.oracle.com/javase/8/docs/api/javax/net/ssl/SSLParameters.html#getNeedClientAuth--

Example:

Server server = new Server();
int httpsPort = 8443;

// Setup HTTP Connector
HttpConfiguration httpConf = new HttpConfiguration();
httpConf.setSecurePort(httpsPort);
httpConf.setSecureScheme("https");

// Setup SSL
SslContextFactory.Server sslContextFactory = new SslContextFactory.Server();
sslContextFactory.setKeyStoreResource(findKeyStorePath());
sslContextFactory.setKeyStorePassword("OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4");
sslContextFactory.setKeyManagerPassword("OBF:1u2u1wml1z7s1z7a1wnl1u2g");
sslContextFactory.setWantClientAuth(true); // Option 1
sslContextFactory.setNeedClientAuth(true); // Option 2

// Setup HTTPS Configuration
HttpConfiguration httpsConf = new HttpConfiguration();
httpsConf.setSecureScheme("https");
httpsConf.setSecurePort(httpsPort);
httpsConf.addCustomizer(new SecureRequestCustomizer()); // adds ssl info to request object

// Establish the HTTPS ServerConnector
ServerConnector httpsConnector = new ServerConnector(server,
    new SslConnectionFactory(sslContextFactory,"http/1.1"),
    new HttpConnectionFactory(httpsConf));
httpsConnector.setPort(httpsPort);

server.addConnector(httpsConnector);

// Add a Handlers for requests
HandlerList handlers = new HandlerList();
handlers.addHandler(new SecuredRedirectHandler());
handlers.addHandler(new HelloHandler("Hello Secure World"));
server.setHandler(handlers);

server.start();
server.join();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用jetty建立2路SSL认证连接 的相关文章

随机推荐

  • 为什么 dataclasses.astuple 返回类属性的深层副本?

    在下面的代码中astuple函数正在执行数据类的类属性的深层复制 为什么它不能产生与函数相同的结果my tuple import copy import dataclasses dataclasses dataclass class Dem
  • pickle.PicklingError:无法腌制未打开读取的文件

    我在 Dataproc 上运行 PySpark 作业时收到此错误 可能是什么原因 这是错误的堆栈跟踪 File usr lib python2 7 pickle py line 331 in save self save reduce ob
  • SQL 约束以防止根据列的先前值更新列

    是否可以使用检查约束 或其他一些技术 来防止在更新记录时设置与其先前值相矛盾的值 一个例子是 NULL 时间戳 表明发生了某些事情 例如 file exported 一旦文件被导出并且具有非 NULL 值 就不应再将其设置为 NULL 另一
  • UIViewControllerAnimatedTransitioning:旋转更改后黑屏片段

    我已经创建了一个视图控制器转换 只要我不更改设备方向 一切都正常 图 1 显示了应有的屏幕 然后我切换到下一个视图控制器 在其中更改方向 现在我回到第一个视图控制器并再次切换方向 然后我得到的结果如图 2 所示 出现黑色边框 请不要介意屏幕
  • 如何获取之前的URL?

    我需要调用我的网络应用程序的 URL 例如 如果有一个从 stackoverflow com 到我的网站 foo com 的链接 我需要 Web 应用程序 托管 bean 中的 stackoverflow 链接 感谢所有帮助 谢谢 并不总是
  • 如何使用 BigQuery 有效地选择另一个表中匹配子字符串的记录?

    我有一个包含数百万个字符串的表 我想将其与包含大约两万个字符串的表进行匹配 如下所示 standardSQL SELECT record FROM record JOIN fragment ON record name LIKE CONCA
  • 我想检查 $('#td1').text() === "x" 是否?

    我想检查innerHtml是否有X或O 所以我不能再次添加任何其他东西 但它不起作用 添加检查代码后它就停止了 我在这里尝试做一个简单的XO游戏来更熟悉javascript和jquery 我也不确定是否可以用 jQuery 做到这一点
  • 为什么同一个curl命令在windows和linux下输出不同的东西?

    为什么同样的curl o file https www link com 命令输出不同的东西 例如 如果我运行命令curl o source txt https www youtube com playlist list PLIx6Fwnp
  • 在 Python 中将列表元素作为单独的项目返回

    Stackoverflow 的朋友们大家好 我有一个计算列表的函数 我想单独返回列表的每个元素 如下所示 接收此返回的函数旨在处理未定义数量的参数 def foo my list 1 2 3 4 return 1 2 3 4 列表中的元素数
  • jQuery AJAX 调用 Java 方法

    使用 jQuery AJAX 我们可以调用特定的 JAVA 方法 例如从 Action 类 该 Java 方法返回的数据将用于填充一些 HTML 代码 请告诉我是否可以使用 jQuery 轻松完成此操作 就像在 DWR 中一样 此外 对于
  • 围绕所选 ListView 项目的矩形

    我想在 ListView 中的所选项目周围绘制一个矩形 因为阅读了 Microsoft 建议不要更改所述项目的 突出显示颜色 的地方 但是 我正在使用 selectedIndexChanged 事件 当绘制实际的 listviewitem
  • execv() 和 const 性

    我经常使用execv 函数在 C 中 但如果某些参数在 C 字符串中 则令我烦恼的是我无法执行此操作 const char args 4 args 0 usr bin whatever args 1 filename c str args
  • 在 Elasticsearch python 客户端中使用 SQL Access

    我正在尝试使用 python 客户端进行弹性搜索 以使用 SQL 访问进行弹性搜索来查询索引 我想使用sql语法查询索引 我如何指定elasticsearch必须读取SQL语法 def searchText text t1 time tim
  • 为什么Golang无法从前面小写字符的struct生成json?

    我正在尝试打印我创建的结构体的 json 结果 如下所示 type Machine struct m ip string m type string m serial string 并打印出来 m Machine m ip test m t
  • 强制 WCF 在进入实际函数之前对每个请求调用一个方法

    我有一个具有许多不同功能的 RESTful WCF 服务 对于每个函数 我需要调用我编写的身份验证方法 我可以在每个请求上手动调用此方法 但我一直在寻找一种方法来强制 WCF 引擎在输入这些函数之前调用此方法 有谁知道这是否可能 Cheer
  • JPA2 中是否有 OnDelete 的等效注释

    import org hibernate annotations OnDelete OnDelete action org hibernate annotations OnDeleteAction CASCADE List
  • 在 Jar 文件中运行 ANT build.xml 文件

    我需要使用存储在 jar 文件中的 build xml 文件运行 ANT 构建 该 jar 文件在类路径中可用 是否可以在不分解 jar 文件并将 build xml 保存到本地目录的情况下做到这一点 如果是的话我该怎么办呢 Update
  • Laravel 5.5 带有 slack 的按需通知

    根据这一页 https laravel com docs 5 5 notifications on demand notifications 我们可以按需发送通知 而无需通过模型 我如何使用 slack 来做同样的事情 我想做这样的事情 e
  • iOS 7 上 Safari 浏览器的用户代理

    我只想在带有 Safari 浏览器的 iPhone 和 iPod 中打开我的网站 对于 Chrome Dolphin 等任何其他浏览器 它不应该打开 但目前我从几乎所有设备获得相同的用户代理 对于Safari User Agent Stri
  • 如何使用jetty建立2路SSL认证连接

    我想使用 2 路 ssl 连接器创建一个 servlet 我创建test2wayssl jks并发起SSL 选择通道连接器当我从邮递员发送请求时客户证书 邮递员的回应是 连接 127 0 0 1 29226 2wayssl 时出错 下面是我