如何在 Spring WS 中配置双向 SSL 连接,而不使用 Spring boot 和使用单独的 Apache tomcat 服务器?

2024-04-30

我需要以双向 SSL 连接安全机制向服务器发送 Soap 请求消息,并处理来自服务器的 Soap 响应。我正在使用 Spring MVC 和 Spring ws,后者完全使用注释进行配置,并且需要配置两种方式 SSL 连接以将肥皂请求发送到服务器。如何在我的 Spring MVC Web 服务应用程序中按顺序配置两种方式 SSL 连接通过 SSL 将我的肥皂消息发送到服务器?


我可以指导您完成所有必需的步骤,但存在差距。请查看我的答案,以便我可以为您提供正确的配置链接

双向 SSL 是带有客户端证书身份验证的 TLS 连接。它与签署肥皂请求不同(证书用于在 TLS 中对客户端进行身份验证一次(请参阅双向 SSL 说明 https://stackoverflow.com/questions/10725572/two-way-ssl-clarification),并签署肥皂是在肥皂主体上进行数字签名并将其包含在肥皂头中)

你需要很多东西(请检查)

  • 管理 TLS 连接的服务器。您已选择 tomcat。没问题,但我认为将 apache 与反向代理放在一起更简单

  • SSL 证书,最好由受信任的实体颁发。如果没有,您可以生成自己的证书,但在后续步骤中需要额外配置

  • 用于配置客户端信任库的 SSL 证书(x509 证书)的公钥

  • 要在 TLS 连接中进行身份验证的客户端证书

  • openssl 软件用于生成证书

  • 我还推荐使用这个应用程序(http://portecle.sourceforge.net/)到 http://portecle.sourceforge.net/)to修改 JKS 密钥库而不是地狱

配置服务器

1)生成SSL证书(server.crt和server.key)

如果有,请转到2)。如果没有,请遵循http://www.akadia.com/services/ssh_test_certificate.html http://www.akadia.com/services/ssh_test_certificate.html

openssl genrsa -des3 -out server.key 1024
openssl req -new -key server.key -out server.csr
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

您将获得 server.crt 和 server.key

2)转换为PKCS12(server.pfx)配置会更简单 如果已经给您提供了证书,也会给您一个CACert。

openssl pkcs12 -export -out server.pfx -inkey server.key -in server.crt -certfile CACert.crt

3)生成客户端证书(client.p12)(摘自https://gist.github.com/mtigas/952344 https://gist.github.com/mtigas/952344) 创建证书颁发机构根 openssl genrsa -des3 -out ca.key 4096 openssl req -new -x509 -days 365 -key ca.key -out ca.crt

 Create the Client Key and CSR
 openssl genrsa -des3 -out client.key 4096
 openssl req -new -key client.key -out client.csr
 # self-signed
 openssl x509 -req -days 365 -in client.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out client.crt

 Convert Client Key to PKCS
 openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12

4)配置服务器信任库(truststore.jks)

Open portecle
New KeyStore -> JKS
Import trusted certificate. Import client.crt and ca.crt
Save as truststore.jks

5)使用客户端身份验证配置tomcat SSL

https://tomcat.apache.org/tomcat-7.0-doc/config/http.html#SSL_Support https://tomcat.apache.org/tomcat-7.0-doc/config/http.html#SSL_Support类似于 Prashant Thorat 答案

<Connector
    port="443"
    protocol="org.apache.coyote.http11.Http11NioProtocol"
    connectionTimeout="20000"
    redirectPort="8443"
    scheme="https" 
    secure="true" 
    SSLEnabled="true"
    sslProtocol="TLS"
    keystoreFile="server.pfx"
    keystorePass="thepassword" 
    keystoreType="PKCS12"
    truststoreFile="truststore.jks"
    truststorePass="thepassword"
    truststoreType="JKS"
    clientAuth="true">

配置客户端

1)创建客户端信任库(client-truststore.jks)打开 portecle,创建一个新的 JKS 并将服务器证书 (server.crt) 包含为受信任的 (

2)创建客户端密钥库(client-keystore.jks)打开 portecle,创建一个新的 JKS 并导入密钥/对。使用 client.p12 或 client.crt 和 client.key。还导入 ca.crt

3)配置弹簧我从来没有做过WS spring,但是用过CXF。这是同一个概念 您不需要签署 SOAP,只需要带有客户端身份验证的 TLS 连接,因此无需进行肥皂配置

按照本教程操作https://secinto.wordpress.com/2013/01/21/spring-and-webservices-how-to-use-ssltls-client-authentication/ https://secinto.wordpress.com/2013/01/21/spring-and-webservices-how-to-use-ssltls-client-authentication/

关键是

private void setupTLSSpring() throws Exception {

 ProtocolSocketFactory authSSLProtocolSocketFactory = new AuthSSLProtocolSocketFactory(new URL(
     "file:%PATH_TO_KEYSTORE%/client-keystore.jks"), PASSWORD, new URL(
     "file:%PATH_TO_TRUSTSTORE%/client-truststore.jks"), PASSWORD);

 Protocol.registerProtocol("https", new Protocol("https", authSSLProtocolSocketFactory, 8410));
 }

EDITED

如果你使用银行API,可能银行会向服务器提供受信任的SSL证书和客户端证书进行身份验证¿不是这样的吗? 在这种情况下忘记'配置服务器' section

在“配置客户端”步骤 1 中,从服务器 SSL 证书中提取公钥并导入到 client-truststore.jks 中。

如果某些步骤不适合您所需的配置,请详细说明

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

如何在 Spring WS 中配置双向 SSL 连接,而不使用 Spring boot 和使用单独的 Apache tomcat 服务器? 的相关文章

随机推荐

  • 使用 JPA2/Hibernate 保留 java.time.Instant (JDK8)

    JPA 和 Hibernate 目前都不支持 JDK8 中 JSR 310 带来的新日期 时间类 JPAticket https java net jira browse JPA SPEC 63 休眠ticket https hiberna
  • 在 Blazor 中显示计时器

    我正在尝试在服务器端 Blazor 应用程序中显示倒计时器 我的代码同时使用 F 和 C 语言 该代码在某种程度上可以工作 但计时器永远不会按预期停止 并且计时器显示偶尔不会呈现所有数字 这是我第一次尝试 Blazor 服务器端应用程序 我
  • 具有 SSL 客户端证书的 iPhone 应用程序

    我正在构建一个 iPhone 应用程序 需要使用客户端证书通过 https 访问 Web 服务 如果我将客户端证书 pkcs12 格式 放入应用程序包中 我就可以将其加载到应用程序中并进行 https 调用 很大程度上要感谢 stackov
  • Security.h 中结构的 macOS 文档

    我正在尝试使用Security h通过 Java 和 JNA 的 macOS 框架 这意味着我需要将某些结构重建为 Java 类 问题是 当我查看文档中的结构时 this one https developer apple com refe
  • 如何将温莎城堡与 ASP.Net Web 表单一起使用?

    我正在尝试将 Windsor 的依赖注入连接到标准的 asp net Web 表单 我想我已经使用 HttpModule 和 CustomAttribute 代码如下所示 实现了这一点 尽管该解决方案似乎有点笨拙 并且想知道 Windsor
  • 按广度优先顺序列出目录所有内容导致效率低下

    我编写了一个 Haskell 模块来按广度优先顺序列出目录的所有内容 下面是源代码 module DirElements dirElem where import System Directory getDirectoryContents
  • Sinon.js 结合 CalledWith 次数

    我知道与sinon js https sinonjs org您可以测试间谍是否被呼叫一定次数 sinon assert calledTwice mySpy someMethod 您可以测试是否使用某些参数调用了间谍 sinon assert
  • 像 Java 一样覆盖 Objective-C 类中的方法

    我经常使用此语句来扩展类 而不需要编写整个单独的文件 假设 ClassFromFramework 是库中包含的框架的一部分的类 public ClassFromFramework public String myMethod operati
  • 使用特定区域设置启动 Google Chrome(使用命令行参数)

    如何使用命令行参数以特定区域设置启动 Google Chrome 根据http peter sh experiments chromium command line switches http peter sh experiments ch
  • MIME 类型/内容类型,用于在 IE 和 Firefox 中使用 Excel 打开 CSV 文件

    我在 Excel 中识别并打开 CSV 输出时遇到问题 在我的 Web 应用程序中 我有一个 java servlet 它将搜索结果返回给用户 搜索结果由 Apache Solr 服务器提供 GUI 前端有一个选项 允许用户请求 CSV 格
  • 生成唯一随机数的智能方法

    我想生成 00000001 到 99999999 范围内的唯一随机数序列 所以第一个可能是 00001010 第二个可能是 40002928 等等 最简单的方法是生成一个随机数并将其存储在数据库中 下次再执行一次并检查数据库中该数字是否已存
  • 使用概率选择数组值

    我还有一个作业要做 那就是 从黄色 蓝色和红色中随机选择一种颜色 概率为 黄色 3 7 蓝色 1 7 红色 3 7 我知道我可以通过使用类似的方法来解决这个问题 黄黄黄蓝红红红 但我认为这在编程上不是很好 因为当我碰巧发生这种情况时 我将不
  • C++ 模板类问题中的类型条件

    使用海湾合作委员会4 2 我有这个条件类型的元模板 template
  • Phong 着色问题

    我正在根据以下内容编写着色器冯模型 http en wikipedia org wiki Phong reflection model 我正在尝试实现这个方程 其中 n 是法线 l 是光线方向 v 是相机方向 r 是光反射 维基百科文章中更
  • facebook 发送 API 错误代码:100 API 错误描述:无效参数错误消息:“链接”无效

    我正在使用 facebook post GRAPH UI 来发布私人消息 并链接到我在 facebook 中的应用程序 早些时候它工作正常 但从最近两天开始 对话框开始抛出错误 发生错误 请稍后再试 API错误代码 100API错误描述 无
  • 为什么 typeof 函数在 C 中不起作用

    我使用GCC编译器 版本9 2 0 我想在 C 中使用 typeof 函数 但它会引发错误 错误 typeof 之前的预期表达式 如果您需要更多信息 请询问我 int a 5 double b the expected result is
  • Angular 2 材料垫片尺寸

    我有下面的代码
  • 如何使用 .NET 压缩目录?

    我有一个包含多个文件的目录 我想将此文件夹压缩为 zip 或 tar gz 文件 我怎样才能用 C 完成他的工作 您可以使用DotNetZip 库 http www codeplex com DotNetZip 它有相当丰富和有用的功能 E
  • 覆盖 Chrome 扩展页面 CSS

    我正在尝试使用 Chrome 扩展程序页面上的时尚扩展程序 但由于某种原因它不起作用 我试图用谷歌搜索这个 但我只得到关于使用扩展覆盖 CSS 的答案 而不是覆盖 Chrome 扩展页面 有什么想法为什么它不起作用吗 或者我怎样才能强迫它
  • 如何在 Spring WS 中配置双向 SSL 连接,而不使用 Spring boot 和使用单独的 Apache tomcat 服务器?

    我需要以双向 SSL 连接安全机制向服务器发送 Soap 请求消息 并处理来自服务器的 Soap 响应 我正在使用 Spring MVC 和 Spring ws 后者完全使用注释进行配置 并且需要配置两种方式 SSL 连接以将肥皂请求发送到