1. 首页 > 技术分享

在 SPRING 集成中获取 TLS 客户端证书

在本文开始前,先给大家分享几个好用的IDEA激活码

这里提供几个最新的激活码,有需要的朋友可以试试,先到先用:

2022Intellij IDEA最新激活码,IDEA稳定专属激活码(持续更新)

2022Pycharm激活码,Pycharm稳定专属激活码(持续更新)

2022Webstorm激活码,Webstorm稳定专属激活码(持续更新)

2022Phpstorm激活码,Phpstorm稳定专属激活码(持续更新)

2022Goland激活码,Goland稳定专属激活码(持续更新)

Spring Integration 是一个非常强大且可扩展的框架,用于集成。但有时如何获取您需要的一些信息并非易事。在我的例子中——用于在 TLS(基于 TLS 的系统日志)连接中进行相互身份验证的证书。您有一个接收 a 的 Java 方法,Message理想情况下您希望获得客户端用来验证自身的证书链(例如,您可能需要提取 CN)。

幸运的是,Spring Integration 很灵活。它可以做到,但它有点令人费解。我将使用 XML 表示法,但同样可以通过 Java 配置来实现。

1
2
3
4
5
6
7
8
9
10
11
12
13
<bean id="nioConnectionSupport" class="com.yourcompany.util.net.TLSMutualNioConnectionSupport">
        <constructor-arg ref="sslContextSupport" />
        <constructor-arg value="false" />
</bean>
<bean id="interceptorFactoryChain" class="org.springframework.integration.ip.tcp.connection.TcpConnectionInterceptorFactoryChain">
        <property name="interceptors">
            <bean class="com.yourcompany.util.net.TLSSyslogInterceptorFactory" />
        </property>
</bean>
 
<int-ip:tcp-connection-factory id="tlsConnectionFactory" type="server" port="${tcp.tls.port}"
                                   using-nio="true" nio-connection-support="nioConnectionSupport"
                                   single-use="false" interceptor-factory-chain="interceptorFactoryChain" />

sslContextSupport通常是一个org.springframework.integration.ip.tcp.connection.DefaultTcpSSLContextSupport或自定义实现(例如,如果您想使用“盲”信任存储)

然后你需要这两个类。您可以在它们各自的要点上查看它们:TLSSyslogInterceptorFactory和TLSMutualNioConnectionSupport。

这些类有什么作用?TLSSyslogInterceptorFactory为包含客户端证书的消息设置新标头该类TLSMutualNioConnectionSupport在 SSL 引擎上设置“wantClientAuth”选项。还有另一个选项——“needClientAuth”,用于客户端身份验证,而不仅仅是支持它。根据用例,您可以使用其中一种。

然后,您可以通过以下方式在处理程序方法中获取证书:

1 Certificate[] certificates = (Certificate[]) message.getHeaders().get(TLSSyslogInterceptorFactory.TLS_CLIENT_CERTIFICATES);

我想分享一个小技巧,以帮助下一个尝试实现这一目标的人。

本文采摘于网络,不代表本站立场,转载联系作者并注明出处:https://idea.medeming.com/share/107.html

联系我们

在线咨询:点击这里给我发消息

微信号:666666