【问题标题】:How to get SSL info (peer cert) in Jersey running with Netty?如何在使用 Netty 运行的 Jersey 中获取 SSL 信息(对等证书)?
【发布时间】:2014-11-11 00:26:06
【问题描述】:

我正在使用带有 Netty 的 Jersey 框架。

我正在通过 SSL 客户端证书对客户端进行身份验证。

我正在尝试实现一个 GET whoami() 方法供客户调用。我希望响应包含来自用于调用 netty 服务器的客户端 ssl 证书的一些信息。

我想我需要使用某种@Context 参数,但我找不到进入 SSLEngine 的方法。

我找到了一个使用 Girzzly[1] 的示例,但我在 netty 中找不到类似的东西。

您对如何访问客户端 SSL 详细信息有任何想法吗?在 Netty 中我可以使用哪些 Context 对象?

更新说明:如何从我的@GET 资源中访问 ChannelPipeline?

[1]http://jersey.576304.n2.nabble.com/Context-SecurityContext-not-initialized-with-SSL-client-certs-td7556681.html

【问题讨论】:

    标签: java ssl jersey netty client-certificates


    【解决方案1】:

    获取 SSLEngine 取决于您的 ChannelPipeline 在 Netty 中的初始化方式。一种常见的模式是将SslHandler 插入到管道中,就像example 一样。这是unit test,您可以在其中明确看到 SSLEngine 被 SslHandler 包装并插入到管道中。一旦您知道您的管道是如何配置的,您就可以使用 ChannelPipeline.get(...) 按类型或名称从管道中获取元素。

    要获得更具体的答案,您必须提供有关您的配置的更多详细信息。我不熟悉您的设置、Netty 和 Jersey 的交互方式,或者 Netty 的界面对您的可访问性。

    【讨论】:

    • 感谢您的想法。我的管道设置几乎与您链接的示例完全相同。我实际上是在试图弄清楚 Netty 的接口在 @GET 注释方法中的可访问性。在我链接的 Grizzly 示例中,@Context Request 类有一个 .getContext() 方法。但是对于 Netty,这似乎不可用。
    • Netty 不是 servlet 容器,没有任何 Servlet 相关的类(如ServletContext)。即使在示例中,您链接的 Request 对象也来自 Jersey 而不是 Grizzly。你将不得不澄清你的设计,Jersey 和 Netty 如何/为什么结合和交互。似乎您的 Grizzly 配置与 servlet 容器的交互方式不同(在这种情况下为 servlet 请求设置连接对象)。
    猜你喜欢
    • 2011-03-06
    • 1970-01-01
    • 1970-01-01
    • 2018-07-07
    • 2011-12-13
    • 2015-09-25
    • 1970-01-01
    • 2019-02-10
    • 2014-06-16
    相关资源
    最近更新 更多